decode_gen.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. // Copyright 2018 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style.
  3. // license that can be found in the LICENSE file.
  4. // Code generated by generate-types. DO NOT EDIT.
  5. package proto
  6. import (
  7. "math"
  8. "unicode/utf8"
  9. "google.golang.org/protobuf/internal/encoding/wire"
  10. "google.golang.org/protobuf/internal/errors"
  11. "google.golang.org/protobuf/reflect/protoreflect"
  12. )
  13. // unmarshalScalar decodes a value of the given kind.
  14. //
  15. // Message values are decoded into a []byte which aliases the input data.
  16. func (o UnmarshalOptions) unmarshalScalar(b []byte, wtyp wire.Type, fd protoreflect.FieldDescriptor) (val protoreflect.Value, n int, err error) {
  17. switch fd.Kind() {
  18. case protoreflect.BoolKind:
  19. if wtyp != wire.VarintType {
  20. return val, 0, errUnknown
  21. }
  22. v, n := wire.ConsumeVarint(b)
  23. if n < 0 {
  24. return val, 0, wire.ParseError(n)
  25. }
  26. return protoreflect.ValueOf(wire.DecodeBool(v)), n, nil
  27. case protoreflect.EnumKind:
  28. if wtyp != wire.VarintType {
  29. return val, 0, errUnknown
  30. }
  31. v, n := wire.ConsumeVarint(b)
  32. if n < 0 {
  33. return val, 0, wire.ParseError(n)
  34. }
  35. return protoreflect.ValueOf(protoreflect.EnumNumber(v)), n, nil
  36. case protoreflect.Int32Kind:
  37. if wtyp != wire.VarintType {
  38. return val, 0, errUnknown
  39. }
  40. v, n := wire.ConsumeVarint(b)
  41. if n < 0 {
  42. return val, 0, wire.ParseError(n)
  43. }
  44. return protoreflect.ValueOf(int32(v)), n, nil
  45. case protoreflect.Sint32Kind:
  46. if wtyp != wire.VarintType {
  47. return val, 0, errUnknown
  48. }
  49. v, n := wire.ConsumeVarint(b)
  50. if n < 0 {
  51. return val, 0, wire.ParseError(n)
  52. }
  53. return protoreflect.ValueOf(int32(wire.DecodeZigZag(v & math.MaxUint32))), n, nil
  54. case protoreflect.Uint32Kind:
  55. if wtyp != wire.VarintType {
  56. return val, 0, errUnknown
  57. }
  58. v, n := wire.ConsumeVarint(b)
  59. if n < 0 {
  60. return val, 0, wire.ParseError(n)
  61. }
  62. return protoreflect.ValueOf(uint32(v)), n, nil
  63. case protoreflect.Int64Kind:
  64. if wtyp != wire.VarintType {
  65. return val, 0, errUnknown
  66. }
  67. v, n := wire.ConsumeVarint(b)
  68. if n < 0 {
  69. return val, 0, wire.ParseError(n)
  70. }
  71. return protoreflect.ValueOf(int64(v)), n, nil
  72. case protoreflect.Sint64Kind:
  73. if wtyp != wire.VarintType {
  74. return val, 0, errUnknown
  75. }
  76. v, n := wire.ConsumeVarint(b)
  77. if n < 0 {
  78. return val, 0, wire.ParseError(n)
  79. }
  80. return protoreflect.ValueOf(wire.DecodeZigZag(v)), n, nil
  81. case protoreflect.Uint64Kind:
  82. if wtyp != wire.VarintType {
  83. return val, 0, errUnknown
  84. }
  85. v, n := wire.ConsumeVarint(b)
  86. if n < 0 {
  87. return val, 0, wire.ParseError(n)
  88. }
  89. return protoreflect.ValueOf(v), n, nil
  90. case protoreflect.Sfixed32Kind:
  91. if wtyp != wire.Fixed32Type {
  92. return val, 0, errUnknown
  93. }
  94. v, n := wire.ConsumeFixed32(b)
  95. if n < 0 {
  96. return val, 0, wire.ParseError(n)
  97. }
  98. return protoreflect.ValueOf(int32(v)), n, nil
  99. case protoreflect.Fixed32Kind:
  100. if wtyp != wire.Fixed32Type {
  101. return val, 0, errUnknown
  102. }
  103. v, n := wire.ConsumeFixed32(b)
  104. if n < 0 {
  105. return val, 0, wire.ParseError(n)
  106. }
  107. return protoreflect.ValueOf(uint32(v)), n, nil
  108. case protoreflect.FloatKind:
  109. if wtyp != wire.Fixed32Type {
  110. return val, 0, errUnknown
  111. }
  112. v, n := wire.ConsumeFixed32(b)
  113. if n < 0 {
  114. return val, 0, wire.ParseError(n)
  115. }
  116. return protoreflect.ValueOf(math.Float32frombits(uint32(v))), n, nil
  117. case protoreflect.Sfixed64Kind:
  118. if wtyp != wire.Fixed64Type {
  119. return val, 0, errUnknown
  120. }
  121. v, n := wire.ConsumeFixed64(b)
  122. if n < 0 {
  123. return val, 0, wire.ParseError(n)
  124. }
  125. return protoreflect.ValueOf(int64(v)), n, nil
  126. case protoreflect.Fixed64Kind:
  127. if wtyp != wire.Fixed64Type {
  128. return val, 0, errUnknown
  129. }
  130. v, n := wire.ConsumeFixed64(b)
  131. if n < 0 {
  132. return val, 0, wire.ParseError(n)
  133. }
  134. return protoreflect.ValueOf(v), n, nil
  135. case protoreflect.DoubleKind:
  136. if wtyp != wire.Fixed64Type {
  137. return val, 0, errUnknown
  138. }
  139. v, n := wire.ConsumeFixed64(b)
  140. if n < 0 {
  141. return val, 0, wire.ParseError(n)
  142. }
  143. return protoreflect.ValueOf(math.Float64frombits(v)), n, nil
  144. case protoreflect.StringKind:
  145. if wtyp != wire.BytesType {
  146. return val, 0, errUnknown
  147. }
  148. v, n := wire.ConsumeBytes(b)
  149. if n < 0 {
  150. return val, 0, wire.ParseError(n)
  151. }
  152. if fd.Syntax() == protoreflect.Proto3 && !utf8.Valid(v) {
  153. return protoreflect.Value{}, 0, errors.InvalidUTF8(string(fd.FullName()))
  154. }
  155. return protoreflect.ValueOf(string(v)), n, nil
  156. case protoreflect.BytesKind:
  157. if wtyp != wire.BytesType {
  158. return val, 0, errUnknown
  159. }
  160. v, n := wire.ConsumeBytes(b)
  161. if n < 0 {
  162. return val, 0, wire.ParseError(n)
  163. }
  164. return protoreflect.ValueOf(append(([]byte)(nil), v...)), n, nil
  165. case protoreflect.MessageKind:
  166. if wtyp != wire.BytesType {
  167. return val, 0, errUnknown
  168. }
  169. v, n := wire.ConsumeBytes(b)
  170. if n < 0 {
  171. return val, 0, wire.ParseError(n)
  172. }
  173. return protoreflect.ValueOf(v), n, nil
  174. case protoreflect.GroupKind:
  175. if wtyp != wire.StartGroupType {
  176. return val, 0, errUnknown
  177. }
  178. v, n := wire.ConsumeGroup(fd.Number(), b)
  179. if n < 0 {
  180. return val, 0, wire.ParseError(n)
  181. }
  182. return protoreflect.ValueOf(v), n, nil
  183. default:
  184. return val, 0, errUnknown
  185. }
  186. }
  187. func (o UnmarshalOptions) unmarshalList(b []byte, wtyp wire.Type, list protoreflect.List, fd protoreflect.FieldDescriptor) (n int, err error) {
  188. switch fd.Kind() {
  189. case protoreflect.BoolKind:
  190. if wtyp == wire.BytesType {
  191. buf, n := wire.ConsumeBytes(b)
  192. if n < 0 {
  193. return 0, wire.ParseError(n)
  194. }
  195. for len(buf) > 0 {
  196. v, n := wire.ConsumeVarint(buf)
  197. if n < 0 {
  198. return 0, wire.ParseError(n)
  199. }
  200. buf = buf[n:]
  201. list.Append(protoreflect.ValueOf(wire.DecodeBool(v)))
  202. }
  203. return n, nil
  204. }
  205. if wtyp != wire.VarintType {
  206. return 0, errUnknown
  207. }
  208. v, n := wire.ConsumeVarint(b)
  209. if n < 0 {
  210. return 0, wire.ParseError(n)
  211. }
  212. list.Append(protoreflect.ValueOf(wire.DecodeBool(v)))
  213. return n, nil
  214. case protoreflect.EnumKind:
  215. if wtyp == wire.BytesType {
  216. buf, n := wire.ConsumeBytes(b)
  217. if n < 0 {
  218. return 0, wire.ParseError(n)
  219. }
  220. for len(buf) > 0 {
  221. v, n := wire.ConsumeVarint(buf)
  222. if n < 0 {
  223. return 0, wire.ParseError(n)
  224. }
  225. buf = buf[n:]
  226. list.Append(protoreflect.ValueOf(protoreflect.EnumNumber(v)))
  227. }
  228. return n, nil
  229. }
  230. if wtyp != wire.VarintType {
  231. return 0, errUnknown
  232. }
  233. v, n := wire.ConsumeVarint(b)
  234. if n < 0 {
  235. return 0, wire.ParseError(n)
  236. }
  237. list.Append(protoreflect.ValueOf(protoreflect.EnumNumber(v)))
  238. return n, nil
  239. case protoreflect.Int32Kind:
  240. if wtyp == wire.BytesType {
  241. buf, n := wire.ConsumeBytes(b)
  242. if n < 0 {
  243. return 0, wire.ParseError(n)
  244. }
  245. for len(buf) > 0 {
  246. v, n := wire.ConsumeVarint(buf)
  247. if n < 0 {
  248. return 0, wire.ParseError(n)
  249. }
  250. buf = buf[n:]
  251. list.Append(protoreflect.ValueOf(int32(v)))
  252. }
  253. return n, nil
  254. }
  255. if wtyp != wire.VarintType {
  256. return 0, errUnknown
  257. }
  258. v, n := wire.ConsumeVarint(b)
  259. if n < 0 {
  260. return 0, wire.ParseError(n)
  261. }
  262. list.Append(protoreflect.ValueOf(int32(v)))
  263. return n, nil
  264. case protoreflect.Sint32Kind:
  265. if wtyp == wire.BytesType {
  266. buf, n := wire.ConsumeBytes(b)
  267. if n < 0 {
  268. return 0, wire.ParseError(n)
  269. }
  270. for len(buf) > 0 {
  271. v, n := wire.ConsumeVarint(buf)
  272. if n < 0 {
  273. return 0, wire.ParseError(n)
  274. }
  275. buf = buf[n:]
  276. list.Append(protoreflect.ValueOf(int32(wire.DecodeZigZag(v & math.MaxUint32))))
  277. }
  278. return n, nil
  279. }
  280. if wtyp != wire.VarintType {
  281. return 0, errUnknown
  282. }
  283. v, n := wire.ConsumeVarint(b)
  284. if n < 0 {
  285. return 0, wire.ParseError(n)
  286. }
  287. list.Append(protoreflect.ValueOf(int32(wire.DecodeZigZag(v & math.MaxUint32))))
  288. return n, nil
  289. case protoreflect.Uint32Kind:
  290. if wtyp == wire.BytesType {
  291. buf, n := wire.ConsumeBytes(b)
  292. if n < 0 {
  293. return 0, wire.ParseError(n)
  294. }
  295. for len(buf) > 0 {
  296. v, n := wire.ConsumeVarint(buf)
  297. if n < 0 {
  298. return 0, wire.ParseError(n)
  299. }
  300. buf = buf[n:]
  301. list.Append(protoreflect.ValueOf(uint32(v)))
  302. }
  303. return n, nil
  304. }
  305. if wtyp != wire.VarintType {
  306. return 0, errUnknown
  307. }
  308. v, n := wire.ConsumeVarint(b)
  309. if n < 0 {
  310. return 0, wire.ParseError(n)
  311. }
  312. list.Append(protoreflect.ValueOf(uint32(v)))
  313. return n, nil
  314. case protoreflect.Int64Kind:
  315. if wtyp == wire.BytesType {
  316. buf, n := wire.ConsumeBytes(b)
  317. if n < 0 {
  318. return 0, wire.ParseError(n)
  319. }
  320. for len(buf) > 0 {
  321. v, n := wire.ConsumeVarint(buf)
  322. if n < 0 {
  323. return 0, wire.ParseError(n)
  324. }
  325. buf = buf[n:]
  326. list.Append(protoreflect.ValueOf(int64(v)))
  327. }
  328. return n, nil
  329. }
  330. if wtyp != wire.VarintType {
  331. return 0, errUnknown
  332. }
  333. v, n := wire.ConsumeVarint(b)
  334. if n < 0 {
  335. return 0, wire.ParseError(n)
  336. }
  337. list.Append(protoreflect.ValueOf(int64(v)))
  338. return n, nil
  339. case protoreflect.Sint64Kind:
  340. if wtyp == wire.BytesType {
  341. buf, n := wire.ConsumeBytes(b)
  342. if n < 0 {
  343. return 0, wire.ParseError(n)
  344. }
  345. for len(buf) > 0 {
  346. v, n := wire.ConsumeVarint(buf)
  347. if n < 0 {
  348. return 0, wire.ParseError(n)
  349. }
  350. buf = buf[n:]
  351. list.Append(protoreflect.ValueOf(wire.DecodeZigZag(v)))
  352. }
  353. return n, nil
  354. }
  355. if wtyp != wire.VarintType {
  356. return 0, errUnknown
  357. }
  358. v, n := wire.ConsumeVarint(b)
  359. if n < 0 {
  360. return 0, wire.ParseError(n)
  361. }
  362. list.Append(protoreflect.ValueOf(wire.DecodeZigZag(v)))
  363. return n, nil
  364. case protoreflect.Uint64Kind:
  365. if wtyp == wire.BytesType {
  366. buf, n := wire.ConsumeBytes(b)
  367. if n < 0 {
  368. return 0, wire.ParseError(n)
  369. }
  370. for len(buf) > 0 {
  371. v, n := wire.ConsumeVarint(buf)
  372. if n < 0 {
  373. return 0, wire.ParseError(n)
  374. }
  375. buf = buf[n:]
  376. list.Append(protoreflect.ValueOf(v))
  377. }
  378. return n, nil
  379. }
  380. if wtyp != wire.VarintType {
  381. return 0, errUnknown
  382. }
  383. v, n := wire.ConsumeVarint(b)
  384. if n < 0 {
  385. return 0, wire.ParseError(n)
  386. }
  387. list.Append(protoreflect.ValueOf(v))
  388. return n, nil
  389. case protoreflect.Sfixed32Kind:
  390. if wtyp == wire.BytesType {
  391. buf, n := wire.ConsumeBytes(b)
  392. if n < 0 {
  393. return 0, wire.ParseError(n)
  394. }
  395. for len(buf) > 0 {
  396. v, n := wire.ConsumeFixed32(buf)
  397. if n < 0 {
  398. return 0, wire.ParseError(n)
  399. }
  400. buf = buf[n:]
  401. list.Append(protoreflect.ValueOf(int32(v)))
  402. }
  403. return n, nil
  404. }
  405. if wtyp != wire.Fixed32Type {
  406. return 0, errUnknown
  407. }
  408. v, n := wire.ConsumeFixed32(b)
  409. if n < 0 {
  410. return 0, wire.ParseError(n)
  411. }
  412. list.Append(protoreflect.ValueOf(int32(v)))
  413. return n, nil
  414. case protoreflect.Fixed32Kind:
  415. if wtyp == wire.BytesType {
  416. buf, n := wire.ConsumeBytes(b)
  417. if n < 0 {
  418. return 0, wire.ParseError(n)
  419. }
  420. for len(buf) > 0 {
  421. v, n := wire.ConsumeFixed32(buf)
  422. if n < 0 {
  423. return 0, wire.ParseError(n)
  424. }
  425. buf = buf[n:]
  426. list.Append(protoreflect.ValueOf(uint32(v)))
  427. }
  428. return n, nil
  429. }
  430. if wtyp != wire.Fixed32Type {
  431. return 0, errUnknown
  432. }
  433. v, n := wire.ConsumeFixed32(b)
  434. if n < 0 {
  435. return 0, wire.ParseError(n)
  436. }
  437. list.Append(protoreflect.ValueOf(uint32(v)))
  438. return n, nil
  439. case protoreflect.FloatKind:
  440. if wtyp == wire.BytesType {
  441. buf, n := wire.ConsumeBytes(b)
  442. if n < 0 {
  443. return 0, wire.ParseError(n)
  444. }
  445. for len(buf) > 0 {
  446. v, n := wire.ConsumeFixed32(buf)
  447. if n < 0 {
  448. return 0, wire.ParseError(n)
  449. }
  450. buf = buf[n:]
  451. list.Append(protoreflect.ValueOf(math.Float32frombits(uint32(v))))
  452. }
  453. return n, nil
  454. }
  455. if wtyp != wire.Fixed32Type {
  456. return 0, errUnknown
  457. }
  458. v, n := wire.ConsumeFixed32(b)
  459. if n < 0 {
  460. return 0, wire.ParseError(n)
  461. }
  462. list.Append(protoreflect.ValueOf(math.Float32frombits(uint32(v))))
  463. return n, nil
  464. case protoreflect.Sfixed64Kind:
  465. if wtyp == wire.BytesType {
  466. buf, n := wire.ConsumeBytes(b)
  467. if n < 0 {
  468. return 0, wire.ParseError(n)
  469. }
  470. for len(buf) > 0 {
  471. v, n := wire.ConsumeFixed64(buf)
  472. if n < 0 {
  473. return 0, wire.ParseError(n)
  474. }
  475. buf = buf[n:]
  476. list.Append(protoreflect.ValueOf(int64(v)))
  477. }
  478. return n, nil
  479. }
  480. if wtyp != wire.Fixed64Type {
  481. return 0, errUnknown
  482. }
  483. v, n := wire.ConsumeFixed64(b)
  484. if n < 0 {
  485. return 0, wire.ParseError(n)
  486. }
  487. list.Append(protoreflect.ValueOf(int64(v)))
  488. return n, nil
  489. case protoreflect.Fixed64Kind:
  490. if wtyp == wire.BytesType {
  491. buf, n := wire.ConsumeBytes(b)
  492. if n < 0 {
  493. return 0, wire.ParseError(n)
  494. }
  495. for len(buf) > 0 {
  496. v, n := wire.ConsumeFixed64(buf)
  497. if n < 0 {
  498. return 0, wire.ParseError(n)
  499. }
  500. buf = buf[n:]
  501. list.Append(protoreflect.ValueOf(v))
  502. }
  503. return n, nil
  504. }
  505. if wtyp != wire.Fixed64Type {
  506. return 0, errUnknown
  507. }
  508. v, n := wire.ConsumeFixed64(b)
  509. if n < 0 {
  510. return 0, wire.ParseError(n)
  511. }
  512. list.Append(protoreflect.ValueOf(v))
  513. return n, nil
  514. case protoreflect.DoubleKind:
  515. if wtyp == wire.BytesType {
  516. buf, n := wire.ConsumeBytes(b)
  517. if n < 0 {
  518. return 0, wire.ParseError(n)
  519. }
  520. for len(buf) > 0 {
  521. v, n := wire.ConsumeFixed64(buf)
  522. if n < 0 {
  523. return 0, wire.ParseError(n)
  524. }
  525. buf = buf[n:]
  526. list.Append(protoreflect.ValueOf(math.Float64frombits(v)))
  527. }
  528. return n, nil
  529. }
  530. if wtyp != wire.Fixed64Type {
  531. return 0, errUnknown
  532. }
  533. v, n := wire.ConsumeFixed64(b)
  534. if n < 0 {
  535. return 0, wire.ParseError(n)
  536. }
  537. list.Append(protoreflect.ValueOf(math.Float64frombits(v)))
  538. return n, nil
  539. case protoreflect.StringKind:
  540. if wtyp != wire.BytesType {
  541. return 0, errUnknown
  542. }
  543. v, n := wire.ConsumeBytes(b)
  544. if n < 0 {
  545. return 0, wire.ParseError(n)
  546. }
  547. if fd.Syntax() == protoreflect.Proto3 && !utf8.Valid(v) {
  548. return 0, errors.InvalidUTF8(string(fd.FullName()))
  549. }
  550. list.Append(protoreflect.ValueOf(string(v)))
  551. return n, nil
  552. case protoreflect.BytesKind:
  553. if wtyp != wire.BytesType {
  554. return 0, errUnknown
  555. }
  556. v, n := wire.ConsumeBytes(b)
  557. if n < 0 {
  558. return 0, wire.ParseError(n)
  559. }
  560. list.Append(protoreflect.ValueOf(append(([]byte)(nil), v...)))
  561. return n, nil
  562. case protoreflect.MessageKind:
  563. if wtyp != wire.BytesType {
  564. return 0, errUnknown
  565. }
  566. v, n := wire.ConsumeBytes(b)
  567. if n < 0 {
  568. return 0, wire.ParseError(n)
  569. }
  570. m := list.NewMessage()
  571. if err := o.unmarshalMessage(v, m); err != nil {
  572. return 0, err
  573. }
  574. list.Append(protoreflect.ValueOf(m))
  575. return n, nil
  576. case protoreflect.GroupKind:
  577. if wtyp != wire.StartGroupType {
  578. return 0, errUnknown
  579. }
  580. v, n := wire.ConsumeGroup(fd.Number(), b)
  581. if n < 0 {
  582. return 0, wire.ParseError(n)
  583. }
  584. m := list.NewMessage()
  585. if err := o.unmarshalMessage(v, m); err != nil {
  586. return 0, err
  587. }
  588. list.Append(protoreflect.ValueOf(m))
  589. return n, nil
  590. default:
  591. return 0, errUnknown
  592. }
  593. }