codec_gen.go (165316B)
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 5 // Code generated by generate-types. DO NOT EDIT. 6 7 package impl 8 9 import ( 10 "math" 11 "unicode/utf8" 12 13 "google.golang.org/protobuf/encoding/protowire" 14 "google.golang.org/protobuf/reflect/protoreflect" 15 ) 16 17 // sizeBool returns the size of wire encoding a bool pointer as a Bool. 18 func sizeBool(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 19 v := *p.Bool() 20 return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) 21 } 22 23 // appendBool wire encodes a bool pointer as a Bool. 24 func appendBool(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 25 v := *p.Bool() 26 b = protowire.AppendVarint(b, f.wiretag) 27 b = protowire.AppendVarint(b, protowire.EncodeBool(v)) 28 return b, nil 29 } 30 31 // consumeBool wire decodes a bool pointer as a Bool. 32 func consumeBool(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 33 if wtyp != protowire.VarintType { 34 return out, errUnknown 35 } 36 var v uint64 37 var n int 38 if len(b) >= 1 && b[0] < 0x80 { 39 v = uint64(b[0]) 40 n = 1 41 } else if len(b) >= 2 && b[1] < 128 { 42 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 43 n = 2 44 } else { 45 v, n = protowire.ConsumeVarint(b) 46 } 47 if n < 0 { 48 return out, errDecode 49 } 50 *p.Bool() = protowire.DecodeBool(v) 51 out.n = n 52 return out, nil 53 } 54 55 var coderBool = pointerCoderFuncs{ 56 size: sizeBool, 57 marshal: appendBool, 58 unmarshal: consumeBool, 59 merge: mergeBool, 60 } 61 62 // sizeBoolNoZero returns the size of wire encoding a bool pointer as a Bool. 63 // The zero value is not encoded. 64 func sizeBoolNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 65 v := *p.Bool() 66 if v == false { 67 return 0 68 } 69 return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) 70 } 71 72 // appendBoolNoZero wire encodes a bool pointer as a Bool. 73 // The zero value is not encoded. 74 func appendBoolNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 75 v := *p.Bool() 76 if v == false { 77 return b, nil 78 } 79 b = protowire.AppendVarint(b, f.wiretag) 80 b = protowire.AppendVarint(b, protowire.EncodeBool(v)) 81 return b, nil 82 } 83 84 var coderBoolNoZero = pointerCoderFuncs{ 85 size: sizeBoolNoZero, 86 marshal: appendBoolNoZero, 87 unmarshal: consumeBool, 88 merge: mergeBoolNoZero, 89 } 90 91 // sizeBoolPtr returns the size of wire encoding a *bool pointer as a Bool. 92 // It panics if the pointer is nil. 93 func sizeBoolPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 94 v := **p.BoolPtr() 95 return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) 96 } 97 98 // appendBoolPtr wire encodes a *bool pointer as a Bool. 99 // It panics if the pointer is nil. 100 func appendBoolPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 101 v := **p.BoolPtr() 102 b = protowire.AppendVarint(b, f.wiretag) 103 b = protowire.AppendVarint(b, protowire.EncodeBool(v)) 104 return b, nil 105 } 106 107 // consumeBoolPtr wire decodes a *bool pointer as a Bool. 108 func consumeBoolPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 109 if wtyp != protowire.VarintType { 110 return out, errUnknown 111 } 112 var v uint64 113 var n int 114 if len(b) >= 1 && b[0] < 0x80 { 115 v = uint64(b[0]) 116 n = 1 117 } else if len(b) >= 2 && b[1] < 128 { 118 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 119 n = 2 120 } else { 121 v, n = protowire.ConsumeVarint(b) 122 } 123 if n < 0 { 124 return out, errDecode 125 } 126 vp := p.BoolPtr() 127 if *vp == nil { 128 *vp = new(bool) 129 } 130 **vp = protowire.DecodeBool(v) 131 out.n = n 132 return out, nil 133 } 134 135 var coderBoolPtr = pointerCoderFuncs{ 136 size: sizeBoolPtr, 137 marshal: appendBoolPtr, 138 unmarshal: consumeBoolPtr, 139 merge: mergeBoolPtr, 140 } 141 142 // sizeBoolSlice returns the size of wire encoding a []bool pointer as a repeated Bool. 143 func sizeBoolSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 144 s := *p.BoolSlice() 145 for _, v := range s { 146 size += f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) 147 } 148 return size 149 } 150 151 // appendBoolSlice encodes a []bool pointer as a repeated Bool. 152 func appendBoolSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 153 s := *p.BoolSlice() 154 for _, v := range s { 155 b = protowire.AppendVarint(b, f.wiretag) 156 b = protowire.AppendVarint(b, protowire.EncodeBool(v)) 157 } 158 return b, nil 159 } 160 161 // consumeBoolSlice wire decodes a []bool pointer as a repeated Bool. 162 func consumeBoolSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 163 sp := p.BoolSlice() 164 if wtyp == protowire.BytesType { 165 s := *sp 166 b, n := protowire.ConsumeBytes(b) 167 if n < 0 { 168 return out, errDecode 169 } 170 for len(b) > 0 { 171 var v uint64 172 var n int 173 if len(b) >= 1 && b[0] < 0x80 { 174 v = uint64(b[0]) 175 n = 1 176 } else if len(b) >= 2 && b[1] < 128 { 177 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 178 n = 2 179 } else { 180 v, n = protowire.ConsumeVarint(b) 181 } 182 if n < 0 { 183 return out, errDecode 184 } 185 s = append(s, protowire.DecodeBool(v)) 186 b = b[n:] 187 } 188 *sp = s 189 out.n = n 190 return out, nil 191 } 192 if wtyp != protowire.VarintType { 193 return out, errUnknown 194 } 195 var v uint64 196 var n int 197 if len(b) >= 1 && b[0] < 0x80 { 198 v = uint64(b[0]) 199 n = 1 200 } else if len(b) >= 2 && b[1] < 128 { 201 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 202 n = 2 203 } else { 204 v, n = protowire.ConsumeVarint(b) 205 } 206 if n < 0 { 207 return out, errDecode 208 } 209 *sp = append(*sp, protowire.DecodeBool(v)) 210 out.n = n 211 return out, nil 212 } 213 214 var coderBoolSlice = pointerCoderFuncs{ 215 size: sizeBoolSlice, 216 marshal: appendBoolSlice, 217 unmarshal: consumeBoolSlice, 218 merge: mergeBoolSlice, 219 } 220 221 // sizeBoolPackedSlice returns the size of wire encoding a []bool pointer as a packed repeated Bool. 222 func sizeBoolPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 223 s := *p.BoolSlice() 224 if len(s) == 0 { 225 return 0 226 } 227 n := 0 228 for _, v := range s { 229 n += protowire.SizeVarint(protowire.EncodeBool(v)) 230 } 231 return f.tagsize + protowire.SizeBytes(n) 232 } 233 234 // appendBoolPackedSlice encodes a []bool pointer as a packed repeated Bool. 235 func appendBoolPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 236 s := *p.BoolSlice() 237 if len(s) == 0 { 238 return b, nil 239 } 240 b = protowire.AppendVarint(b, f.wiretag) 241 n := 0 242 for _, v := range s { 243 n += protowire.SizeVarint(protowire.EncodeBool(v)) 244 } 245 b = protowire.AppendVarint(b, uint64(n)) 246 for _, v := range s { 247 b = protowire.AppendVarint(b, protowire.EncodeBool(v)) 248 } 249 return b, nil 250 } 251 252 var coderBoolPackedSlice = pointerCoderFuncs{ 253 size: sizeBoolPackedSlice, 254 marshal: appendBoolPackedSlice, 255 unmarshal: consumeBoolSlice, 256 merge: mergeBoolSlice, 257 } 258 259 // sizeBoolValue returns the size of wire encoding a bool value as a Bool. 260 func sizeBoolValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { 261 return tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool())) 262 } 263 264 // appendBoolValue encodes a bool value as a Bool. 265 func appendBoolValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 266 b = protowire.AppendVarint(b, wiretag) 267 b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) 268 return b, nil 269 } 270 271 // consumeBoolValue decodes a bool value as a Bool. 272 func consumeBoolValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 273 if wtyp != protowire.VarintType { 274 return protoreflect.Value{}, out, errUnknown 275 } 276 var v uint64 277 var n int 278 if len(b) >= 1 && b[0] < 0x80 { 279 v = uint64(b[0]) 280 n = 1 281 } else if len(b) >= 2 && b[1] < 128 { 282 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 283 n = 2 284 } else { 285 v, n = protowire.ConsumeVarint(b) 286 } 287 if n < 0 { 288 return protoreflect.Value{}, out, errDecode 289 } 290 out.n = n 291 return protoreflect.ValueOfBool(protowire.DecodeBool(v)), out, nil 292 } 293 294 var coderBoolValue = valueCoderFuncs{ 295 size: sizeBoolValue, 296 marshal: appendBoolValue, 297 unmarshal: consumeBoolValue, 298 merge: mergeScalarValue, 299 } 300 301 // sizeBoolSliceValue returns the size of wire encoding a []bool value as a repeated Bool. 302 func sizeBoolSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 303 list := listv.List() 304 for i, llen := 0, list.Len(); i < llen; i++ { 305 v := list.Get(i) 306 size += tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool())) 307 } 308 return size 309 } 310 311 // appendBoolSliceValue encodes a []bool value as a repeated Bool. 312 func appendBoolSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 313 list := listv.List() 314 for i, llen := 0, list.Len(); i < llen; i++ { 315 v := list.Get(i) 316 b = protowire.AppendVarint(b, wiretag) 317 b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) 318 } 319 return b, nil 320 } 321 322 // consumeBoolSliceValue wire decodes a []bool value as a repeated Bool. 323 func consumeBoolSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 324 list := listv.List() 325 if wtyp == protowire.BytesType { 326 b, n := protowire.ConsumeBytes(b) 327 if n < 0 { 328 return protoreflect.Value{}, out, errDecode 329 } 330 for len(b) > 0 { 331 var v uint64 332 var n int 333 if len(b) >= 1 && b[0] < 0x80 { 334 v = uint64(b[0]) 335 n = 1 336 } else if len(b) >= 2 && b[1] < 128 { 337 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 338 n = 2 339 } else { 340 v, n = protowire.ConsumeVarint(b) 341 } 342 if n < 0 { 343 return protoreflect.Value{}, out, errDecode 344 } 345 list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) 346 b = b[n:] 347 } 348 out.n = n 349 return listv, out, nil 350 } 351 if wtyp != protowire.VarintType { 352 return protoreflect.Value{}, out, errUnknown 353 } 354 var v uint64 355 var n int 356 if len(b) >= 1 && b[0] < 0x80 { 357 v = uint64(b[0]) 358 n = 1 359 } else if len(b) >= 2 && b[1] < 128 { 360 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 361 n = 2 362 } else { 363 v, n = protowire.ConsumeVarint(b) 364 } 365 if n < 0 { 366 return protoreflect.Value{}, out, errDecode 367 } 368 list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) 369 out.n = n 370 return listv, out, nil 371 } 372 373 var coderBoolSliceValue = valueCoderFuncs{ 374 size: sizeBoolSliceValue, 375 marshal: appendBoolSliceValue, 376 unmarshal: consumeBoolSliceValue, 377 merge: mergeListValue, 378 } 379 380 // sizeBoolPackedSliceValue returns the size of wire encoding a []bool value as a packed repeated Bool. 381 func sizeBoolPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 382 list := listv.List() 383 llen := list.Len() 384 if llen == 0 { 385 return 0 386 } 387 n := 0 388 for i, llen := 0, llen; i < llen; i++ { 389 v := list.Get(i) 390 n += protowire.SizeVarint(protowire.EncodeBool(v.Bool())) 391 } 392 return tagsize + protowire.SizeBytes(n) 393 } 394 395 // appendBoolPackedSliceValue encodes a []bool value as a packed repeated Bool. 396 func appendBoolPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 397 list := listv.List() 398 llen := list.Len() 399 if llen == 0 { 400 return b, nil 401 } 402 b = protowire.AppendVarint(b, wiretag) 403 n := 0 404 for i := 0; i < llen; i++ { 405 v := list.Get(i) 406 n += protowire.SizeVarint(protowire.EncodeBool(v.Bool())) 407 } 408 b = protowire.AppendVarint(b, uint64(n)) 409 for i := 0; i < llen; i++ { 410 v := list.Get(i) 411 b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) 412 } 413 return b, nil 414 } 415 416 var coderBoolPackedSliceValue = valueCoderFuncs{ 417 size: sizeBoolPackedSliceValue, 418 marshal: appendBoolPackedSliceValue, 419 unmarshal: consumeBoolSliceValue, 420 merge: mergeListValue, 421 } 422 423 // sizeEnumValue returns the size of wire encoding a value as a Enum. 424 func sizeEnumValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { 425 return tagsize + protowire.SizeVarint(uint64(v.Enum())) 426 } 427 428 // appendEnumValue encodes a value as a Enum. 429 func appendEnumValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 430 b = protowire.AppendVarint(b, wiretag) 431 b = protowire.AppendVarint(b, uint64(v.Enum())) 432 return b, nil 433 } 434 435 // consumeEnumValue decodes a value as a Enum. 436 func consumeEnumValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 437 if wtyp != protowire.VarintType { 438 return protoreflect.Value{}, out, errUnknown 439 } 440 var v uint64 441 var n int 442 if len(b) >= 1 && b[0] < 0x80 { 443 v = uint64(b[0]) 444 n = 1 445 } else if len(b) >= 2 && b[1] < 128 { 446 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 447 n = 2 448 } else { 449 v, n = protowire.ConsumeVarint(b) 450 } 451 if n < 0 { 452 return protoreflect.Value{}, out, errDecode 453 } 454 out.n = n 455 return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), out, nil 456 } 457 458 var coderEnumValue = valueCoderFuncs{ 459 size: sizeEnumValue, 460 marshal: appendEnumValue, 461 unmarshal: consumeEnumValue, 462 merge: mergeScalarValue, 463 } 464 465 // sizeEnumSliceValue returns the size of wire encoding a [] value as a repeated Enum. 466 func sizeEnumSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 467 list := listv.List() 468 for i, llen := 0, list.Len(); i < llen; i++ { 469 v := list.Get(i) 470 size += tagsize + protowire.SizeVarint(uint64(v.Enum())) 471 } 472 return size 473 } 474 475 // appendEnumSliceValue encodes a [] value as a repeated Enum. 476 func appendEnumSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 477 list := listv.List() 478 for i, llen := 0, list.Len(); i < llen; i++ { 479 v := list.Get(i) 480 b = protowire.AppendVarint(b, wiretag) 481 b = protowire.AppendVarint(b, uint64(v.Enum())) 482 } 483 return b, nil 484 } 485 486 // consumeEnumSliceValue wire decodes a [] value as a repeated Enum. 487 func consumeEnumSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 488 list := listv.List() 489 if wtyp == protowire.BytesType { 490 b, n := protowire.ConsumeBytes(b) 491 if n < 0 { 492 return protoreflect.Value{}, out, errDecode 493 } 494 for len(b) > 0 { 495 var v uint64 496 var n int 497 if len(b) >= 1 && b[0] < 0x80 { 498 v = uint64(b[0]) 499 n = 1 500 } else if len(b) >= 2 && b[1] < 128 { 501 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 502 n = 2 503 } else { 504 v, n = protowire.ConsumeVarint(b) 505 } 506 if n < 0 { 507 return protoreflect.Value{}, out, errDecode 508 } 509 list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) 510 b = b[n:] 511 } 512 out.n = n 513 return listv, out, nil 514 } 515 if wtyp != protowire.VarintType { 516 return protoreflect.Value{}, out, errUnknown 517 } 518 var v uint64 519 var n int 520 if len(b) >= 1 && b[0] < 0x80 { 521 v = uint64(b[0]) 522 n = 1 523 } else if len(b) >= 2 && b[1] < 128 { 524 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 525 n = 2 526 } else { 527 v, n = protowire.ConsumeVarint(b) 528 } 529 if n < 0 { 530 return protoreflect.Value{}, out, errDecode 531 } 532 list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) 533 out.n = n 534 return listv, out, nil 535 } 536 537 var coderEnumSliceValue = valueCoderFuncs{ 538 size: sizeEnumSliceValue, 539 marshal: appendEnumSliceValue, 540 unmarshal: consumeEnumSliceValue, 541 merge: mergeListValue, 542 } 543 544 // sizeEnumPackedSliceValue returns the size of wire encoding a [] value as a packed repeated Enum. 545 func sizeEnumPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 546 list := listv.List() 547 llen := list.Len() 548 if llen == 0 { 549 return 0 550 } 551 n := 0 552 for i, llen := 0, llen; i < llen; i++ { 553 v := list.Get(i) 554 n += protowire.SizeVarint(uint64(v.Enum())) 555 } 556 return tagsize + protowire.SizeBytes(n) 557 } 558 559 // appendEnumPackedSliceValue encodes a [] value as a packed repeated Enum. 560 func appendEnumPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 561 list := listv.List() 562 llen := list.Len() 563 if llen == 0 { 564 return b, nil 565 } 566 b = protowire.AppendVarint(b, wiretag) 567 n := 0 568 for i := 0; i < llen; i++ { 569 v := list.Get(i) 570 n += protowire.SizeVarint(uint64(v.Enum())) 571 } 572 b = protowire.AppendVarint(b, uint64(n)) 573 for i := 0; i < llen; i++ { 574 v := list.Get(i) 575 b = protowire.AppendVarint(b, uint64(v.Enum())) 576 } 577 return b, nil 578 } 579 580 var coderEnumPackedSliceValue = valueCoderFuncs{ 581 size: sizeEnumPackedSliceValue, 582 marshal: appendEnumPackedSliceValue, 583 unmarshal: consumeEnumSliceValue, 584 merge: mergeListValue, 585 } 586 587 // sizeInt32 returns the size of wire encoding a int32 pointer as a Int32. 588 func sizeInt32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 589 v := *p.Int32() 590 return f.tagsize + protowire.SizeVarint(uint64(v)) 591 } 592 593 // appendInt32 wire encodes a int32 pointer as a Int32. 594 func appendInt32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 595 v := *p.Int32() 596 b = protowire.AppendVarint(b, f.wiretag) 597 b = protowire.AppendVarint(b, uint64(v)) 598 return b, nil 599 } 600 601 // consumeInt32 wire decodes a int32 pointer as a Int32. 602 func consumeInt32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 603 if wtyp != protowire.VarintType { 604 return out, errUnknown 605 } 606 var v uint64 607 var n int 608 if len(b) >= 1 && b[0] < 0x80 { 609 v = uint64(b[0]) 610 n = 1 611 } else if len(b) >= 2 && b[1] < 128 { 612 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 613 n = 2 614 } else { 615 v, n = protowire.ConsumeVarint(b) 616 } 617 if n < 0 { 618 return out, errDecode 619 } 620 *p.Int32() = int32(v) 621 out.n = n 622 return out, nil 623 } 624 625 var coderInt32 = pointerCoderFuncs{ 626 size: sizeInt32, 627 marshal: appendInt32, 628 unmarshal: consumeInt32, 629 merge: mergeInt32, 630 } 631 632 // sizeInt32NoZero returns the size of wire encoding a int32 pointer as a Int32. 633 // The zero value is not encoded. 634 func sizeInt32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 635 v := *p.Int32() 636 if v == 0 { 637 return 0 638 } 639 return f.tagsize + protowire.SizeVarint(uint64(v)) 640 } 641 642 // appendInt32NoZero wire encodes a int32 pointer as a Int32. 643 // The zero value is not encoded. 644 func appendInt32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 645 v := *p.Int32() 646 if v == 0 { 647 return b, nil 648 } 649 b = protowire.AppendVarint(b, f.wiretag) 650 b = protowire.AppendVarint(b, uint64(v)) 651 return b, nil 652 } 653 654 var coderInt32NoZero = pointerCoderFuncs{ 655 size: sizeInt32NoZero, 656 marshal: appendInt32NoZero, 657 unmarshal: consumeInt32, 658 merge: mergeInt32NoZero, 659 } 660 661 // sizeInt32Ptr returns the size of wire encoding a *int32 pointer as a Int32. 662 // It panics if the pointer is nil. 663 func sizeInt32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 664 v := **p.Int32Ptr() 665 return f.tagsize + protowire.SizeVarint(uint64(v)) 666 } 667 668 // appendInt32Ptr wire encodes a *int32 pointer as a Int32. 669 // It panics if the pointer is nil. 670 func appendInt32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 671 v := **p.Int32Ptr() 672 b = protowire.AppendVarint(b, f.wiretag) 673 b = protowire.AppendVarint(b, uint64(v)) 674 return b, nil 675 } 676 677 // consumeInt32Ptr wire decodes a *int32 pointer as a Int32. 678 func consumeInt32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 679 if wtyp != protowire.VarintType { 680 return out, errUnknown 681 } 682 var v uint64 683 var n int 684 if len(b) >= 1 && b[0] < 0x80 { 685 v = uint64(b[0]) 686 n = 1 687 } else if len(b) >= 2 && b[1] < 128 { 688 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 689 n = 2 690 } else { 691 v, n = protowire.ConsumeVarint(b) 692 } 693 if n < 0 { 694 return out, errDecode 695 } 696 vp := p.Int32Ptr() 697 if *vp == nil { 698 *vp = new(int32) 699 } 700 **vp = int32(v) 701 out.n = n 702 return out, nil 703 } 704 705 var coderInt32Ptr = pointerCoderFuncs{ 706 size: sizeInt32Ptr, 707 marshal: appendInt32Ptr, 708 unmarshal: consumeInt32Ptr, 709 merge: mergeInt32Ptr, 710 } 711 712 // sizeInt32Slice returns the size of wire encoding a []int32 pointer as a repeated Int32. 713 func sizeInt32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 714 s := *p.Int32Slice() 715 for _, v := range s { 716 size += f.tagsize + protowire.SizeVarint(uint64(v)) 717 } 718 return size 719 } 720 721 // appendInt32Slice encodes a []int32 pointer as a repeated Int32. 722 func appendInt32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 723 s := *p.Int32Slice() 724 for _, v := range s { 725 b = protowire.AppendVarint(b, f.wiretag) 726 b = protowire.AppendVarint(b, uint64(v)) 727 } 728 return b, nil 729 } 730 731 // consumeInt32Slice wire decodes a []int32 pointer as a repeated Int32. 732 func consumeInt32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 733 sp := p.Int32Slice() 734 if wtyp == protowire.BytesType { 735 s := *sp 736 b, n := protowire.ConsumeBytes(b) 737 if n < 0 { 738 return out, errDecode 739 } 740 for len(b) > 0 { 741 var v uint64 742 var n int 743 if len(b) >= 1 && b[0] < 0x80 { 744 v = uint64(b[0]) 745 n = 1 746 } else if len(b) >= 2 && b[1] < 128 { 747 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 748 n = 2 749 } else { 750 v, n = protowire.ConsumeVarint(b) 751 } 752 if n < 0 { 753 return out, errDecode 754 } 755 s = append(s, int32(v)) 756 b = b[n:] 757 } 758 *sp = s 759 out.n = n 760 return out, nil 761 } 762 if wtyp != protowire.VarintType { 763 return out, errUnknown 764 } 765 var v uint64 766 var n int 767 if len(b) >= 1 && b[0] < 0x80 { 768 v = uint64(b[0]) 769 n = 1 770 } else if len(b) >= 2 && b[1] < 128 { 771 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 772 n = 2 773 } else { 774 v, n = protowire.ConsumeVarint(b) 775 } 776 if n < 0 { 777 return out, errDecode 778 } 779 *sp = append(*sp, int32(v)) 780 out.n = n 781 return out, nil 782 } 783 784 var coderInt32Slice = pointerCoderFuncs{ 785 size: sizeInt32Slice, 786 marshal: appendInt32Slice, 787 unmarshal: consumeInt32Slice, 788 merge: mergeInt32Slice, 789 } 790 791 // sizeInt32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Int32. 792 func sizeInt32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 793 s := *p.Int32Slice() 794 if len(s) == 0 { 795 return 0 796 } 797 n := 0 798 for _, v := range s { 799 n += protowire.SizeVarint(uint64(v)) 800 } 801 return f.tagsize + protowire.SizeBytes(n) 802 } 803 804 // appendInt32PackedSlice encodes a []int32 pointer as a packed repeated Int32. 805 func appendInt32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 806 s := *p.Int32Slice() 807 if len(s) == 0 { 808 return b, nil 809 } 810 b = protowire.AppendVarint(b, f.wiretag) 811 n := 0 812 for _, v := range s { 813 n += protowire.SizeVarint(uint64(v)) 814 } 815 b = protowire.AppendVarint(b, uint64(n)) 816 for _, v := range s { 817 b = protowire.AppendVarint(b, uint64(v)) 818 } 819 return b, nil 820 } 821 822 var coderInt32PackedSlice = pointerCoderFuncs{ 823 size: sizeInt32PackedSlice, 824 marshal: appendInt32PackedSlice, 825 unmarshal: consumeInt32Slice, 826 merge: mergeInt32Slice, 827 } 828 829 // sizeInt32Value returns the size of wire encoding a int32 value as a Int32. 830 func sizeInt32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 831 return tagsize + protowire.SizeVarint(uint64(int32(v.Int()))) 832 } 833 834 // appendInt32Value encodes a int32 value as a Int32. 835 func appendInt32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 836 b = protowire.AppendVarint(b, wiretag) 837 b = protowire.AppendVarint(b, uint64(int32(v.Int()))) 838 return b, nil 839 } 840 841 // consumeInt32Value decodes a int32 value as a Int32. 842 func consumeInt32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 843 if wtyp != protowire.VarintType { 844 return protoreflect.Value{}, out, errUnknown 845 } 846 var v uint64 847 var n int 848 if len(b) >= 1 && b[0] < 0x80 { 849 v = uint64(b[0]) 850 n = 1 851 } else if len(b) >= 2 && b[1] < 128 { 852 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 853 n = 2 854 } else { 855 v, n = protowire.ConsumeVarint(b) 856 } 857 if n < 0 { 858 return protoreflect.Value{}, out, errDecode 859 } 860 out.n = n 861 return protoreflect.ValueOfInt32(int32(v)), out, nil 862 } 863 864 var coderInt32Value = valueCoderFuncs{ 865 size: sizeInt32Value, 866 marshal: appendInt32Value, 867 unmarshal: consumeInt32Value, 868 merge: mergeScalarValue, 869 } 870 871 // sizeInt32SliceValue returns the size of wire encoding a []int32 value as a repeated Int32. 872 func sizeInt32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 873 list := listv.List() 874 for i, llen := 0, list.Len(); i < llen; i++ { 875 v := list.Get(i) 876 size += tagsize + protowire.SizeVarint(uint64(int32(v.Int()))) 877 } 878 return size 879 } 880 881 // appendInt32SliceValue encodes a []int32 value as a repeated Int32. 882 func appendInt32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 883 list := listv.List() 884 for i, llen := 0, list.Len(); i < llen; i++ { 885 v := list.Get(i) 886 b = protowire.AppendVarint(b, wiretag) 887 b = protowire.AppendVarint(b, uint64(int32(v.Int()))) 888 } 889 return b, nil 890 } 891 892 // consumeInt32SliceValue wire decodes a []int32 value as a repeated Int32. 893 func consumeInt32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 894 list := listv.List() 895 if wtyp == protowire.BytesType { 896 b, n := protowire.ConsumeBytes(b) 897 if n < 0 { 898 return protoreflect.Value{}, out, errDecode 899 } 900 for len(b) > 0 { 901 var v uint64 902 var n int 903 if len(b) >= 1 && b[0] < 0x80 { 904 v = uint64(b[0]) 905 n = 1 906 } else if len(b) >= 2 && b[1] < 128 { 907 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 908 n = 2 909 } else { 910 v, n = protowire.ConsumeVarint(b) 911 } 912 if n < 0 { 913 return protoreflect.Value{}, out, errDecode 914 } 915 list.Append(protoreflect.ValueOfInt32(int32(v))) 916 b = b[n:] 917 } 918 out.n = n 919 return listv, out, nil 920 } 921 if wtyp != protowire.VarintType { 922 return protoreflect.Value{}, out, errUnknown 923 } 924 var v uint64 925 var n int 926 if len(b) >= 1 && b[0] < 0x80 { 927 v = uint64(b[0]) 928 n = 1 929 } else if len(b) >= 2 && b[1] < 128 { 930 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 931 n = 2 932 } else { 933 v, n = protowire.ConsumeVarint(b) 934 } 935 if n < 0 { 936 return protoreflect.Value{}, out, errDecode 937 } 938 list.Append(protoreflect.ValueOfInt32(int32(v))) 939 out.n = n 940 return listv, out, nil 941 } 942 943 var coderInt32SliceValue = valueCoderFuncs{ 944 size: sizeInt32SliceValue, 945 marshal: appendInt32SliceValue, 946 unmarshal: consumeInt32SliceValue, 947 merge: mergeListValue, 948 } 949 950 // sizeInt32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Int32. 951 func sizeInt32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 952 list := listv.List() 953 llen := list.Len() 954 if llen == 0 { 955 return 0 956 } 957 n := 0 958 for i, llen := 0, llen; i < llen; i++ { 959 v := list.Get(i) 960 n += protowire.SizeVarint(uint64(int32(v.Int()))) 961 } 962 return tagsize + protowire.SizeBytes(n) 963 } 964 965 // appendInt32PackedSliceValue encodes a []int32 value as a packed repeated Int32. 966 func appendInt32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 967 list := listv.List() 968 llen := list.Len() 969 if llen == 0 { 970 return b, nil 971 } 972 b = protowire.AppendVarint(b, wiretag) 973 n := 0 974 for i := 0; i < llen; i++ { 975 v := list.Get(i) 976 n += protowire.SizeVarint(uint64(int32(v.Int()))) 977 } 978 b = protowire.AppendVarint(b, uint64(n)) 979 for i := 0; i < llen; i++ { 980 v := list.Get(i) 981 b = protowire.AppendVarint(b, uint64(int32(v.Int()))) 982 } 983 return b, nil 984 } 985 986 var coderInt32PackedSliceValue = valueCoderFuncs{ 987 size: sizeInt32PackedSliceValue, 988 marshal: appendInt32PackedSliceValue, 989 unmarshal: consumeInt32SliceValue, 990 merge: mergeListValue, 991 } 992 993 // sizeSint32 returns the size of wire encoding a int32 pointer as a Sint32. 994 func sizeSint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 995 v := *p.Int32() 996 return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) 997 } 998 999 // appendSint32 wire encodes a int32 pointer as a Sint32. 1000 func appendSint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1001 v := *p.Int32() 1002 b = protowire.AppendVarint(b, f.wiretag) 1003 b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) 1004 return b, nil 1005 } 1006 1007 // consumeSint32 wire decodes a int32 pointer as a Sint32. 1008 func consumeSint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1009 if wtyp != protowire.VarintType { 1010 return out, errUnknown 1011 } 1012 var v uint64 1013 var n int 1014 if len(b) >= 1 && b[0] < 0x80 { 1015 v = uint64(b[0]) 1016 n = 1 1017 } else if len(b) >= 2 && b[1] < 128 { 1018 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1019 n = 2 1020 } else { 1021 v, n = protowire.ConsumeVarint(b) 1022 } 1023 if n < 0 { 1024 return out, errDecode 1025 } 1026 *p.Int32() = int32(protowire.DecodeZigZag(v & math.MaxUint32)) 1027 out.n = n 1028 return out, nil 1029 } 1030 1031 var coderSint32 = pointerCoderFuncs{ 1032 size: sizeSint32, 1033 marshal: appendSint32, 1034 unmarshal: consumeSint32, 1035 merge: mergeInt32, 1036 } 1037 1038 // sizeSint32NoZero returns the size of wire encoding a int32 pointer as a Sint32. 1039 // The zero value is not encoded. 1040 func sizeSint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1041 v := *p.Int32() 1042 if v == 0 { 1043 return 0 1044 } 1045 return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) 1046 } 1047 1048 // appendSint32NoZero wire encodes a int32 pointer as a Sint32. 1049 // The zero value is not encoded. 1050 func appendSint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1051 v := *p.Int32() 1052 if v == 0 { 1053 return b, nil 1054 } 1055 b = protowire.AppendVarint(b, f.wiretag) 1056 b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) 1057 return b, nil 1058 } 1059 1060 var coderSint32NoZero = pointerCoderFuncs{ 1061 size: sizeSint32NoZero, 1062 marshal: appendSint32NoZero, 1063 unmarshal: consumeSint32, 1064 merge: mergeInt32NoZero, 1065 } 1066 1067 // sizeSint32Ptr returns the size of wire encoding a *int32 pointer as a Sint32. 1068 // It panics if the pointer is nil. 1069 func sizeSint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1070 v := **p.Int32Ptr() 1071 return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) 1072 } 1073 1074 // appendSint32Ptr wire encodes a *int32 pointer as a Sint32. 1075 // It panics if the pointer is nil. 1076 func appendSint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1077 v := **p.Int32Ptr() 1078 b = protowire.AppendVarint(b, f.wiretag) 1079 b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) 1080 return b, nil 1081 } 1082 1083 // consumeSint32Ptr wire decodes a *int32 pointer as a Sint32. 1084 func consumeSint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1085 if wtyp != protowire.VarintType { 1086 return out, errUnknown 1087 } 1088 var v uint64 1089 var n int 1090 if len(b) >= 1 && b[0] < 0x80 { 1091 v = uint64(b[0]) 1092 n = 1 1093 } else if len(b) >= 2 && b[1] < 128 { 1094 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1095 n = 2 1096 } else { 1097 v, n = protowire.ConsumeVarint(b) 1098 } 1099 if n < 0 { 1100 return out, errDecode 1101 } 1102 vp := p.Int32Ptr() 1103 if *vp == nil { 1104 *vp = new(int32) 1105 } 1106 **vp = int32(protowire.DecodeZigZag(v & math.MaxUint32)) 1107 out.n = n 1108 return out, nil 1109 } 1110 1111 var coderSint32Ptr = pointerCoderFuncs{ 1112 size: sizeSint32Ptr, 1113 marshal: appendSint32Ptr, 1114 unmarshal: consumeSint32Ptr, 1115 merge: mergeInt32Ptr, 1116 } 1117 1118 // sizeSint32Slice returns the size of wire encoding a []int32 pointer as a repeated Sint32. 1119 func sizeSint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1120 s := *p.Int32Slice() 1121 for _, v := range s { 1122 size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) 1123 } 1124 return size 1125 } 1126 1127 // appendSint32Slice encodes a []int32 pointer as a repeated Sint32. 1128 func appendSint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1129 s := *p.Int32Slice() 1130 for _, v := range s { 1131 b = protowire.AppendVarint(b, f.wiretag) 1132 b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) 1133 } 1134 return b, nil 1135 } 1136 1137 // consumeSint32Slice wire decodes a []int32 pointer as a repeated Sint32. 1138 func consumeSint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1139 sp := p.Int32Slice() 1140 if wtyp == protowire.BytesType { 1141 s := *sp 1142 b, n := protowire.ConsumeBytes(b) 1143 if n < 0 { 1144 return out, errDecode 1145 } 1146 for len(b) > 0 { 1147 var v uint64 1148 var n int 1149 if len(b) >= 1 && b[0] < 0x80 { 1150 v = uint64(b[0]) 1151 n = 1 1152 } else if len(b) >= 2 && b[1] < 128 { 1153 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1154 n = 2 1155 } else { 1156 v, n = protowire.ConsumeVarint(b) 1157 } 1158 if n < 0 { 1159 return out, errDecode 1160 } 1161 s = append(s, int32(protowire.DecodeZigZag(v&math.MaxUint32))) 1162 b = b[n:] 1163 } 1164 *sp = s 1165 out.n = n 1166 return out, nil 1167 } 1168 if wtyp != protowire.VarintType { 1169 return out, errUnknown 1170 } 1171 var v uint64 1172 var n int 1173 if len(b) >= 1 && b[0] < 0x80 { 1174 v = uint64(b[0]) 1175 n = 1 1176 } else if len(b) >= 2 && b[1] < 128 { 1177 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1178 n = 2 1179 } else { 1180 v, n = protowire.ConsumeVarint(b) 1181 } 1182 if n < 0 { 1183 return out, errDecode 1184 } 1185 *sp = append(*sp, int32(protowire.DecodeZigZag(v&math.MaxUint32))) 1186 out.n = n 1187 return out, nil 1188 } 1189 1190 var coderSint32Slice = pointerCoderFuncs{ 1191 size: sizeSint32Slice, 1192 marshal: appendSint32Slice, 1193 unmarshal: consumeSint32Slice, 1194 merge: mergeInt32Slice, 1195 } 1196 1197 // sizeSint32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sint32. 1198 func sizeSint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1199 s := *p.Int32Slice() 1200 if len(s) == 0 { 1201 return 0 1202 } 1203 n := 0 1204 for _, v := range s { 1205 n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) 1206 } 1207 return f.tagsize + protowire.SizeBytes(n) 1208 } 1209 1210 // appendSint32PackedSlice encodes a []int32 pointer as a packed repeated Sint32. 1211 func appendSint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1212 s := *p.Int32Slice() 1213 if len(s) == 0 { 1214 return b, nil 1215 } 1216 b = protowire.AppendVarint(b, f.wiretag) 1217 n := 0 1218 for _, v := range s { 1219 n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) 1220 } 1221 b = protowire.AppendVarint(b, uint64(n)) 1222 for _, v := range s { 1223 b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) 1224 } 1225 return b, nil 1226 } 1227 1228 var coderSint32PackedSlice = pointerCoderFuncs{ 1229 size: sizeSint32PackedSlice, 1230 marshal: appendSint32PackedSlice, 1231 unmarshal: consumeSint32Slice, 1232 merge: mergeInt32Slice, 1233 } 1234 1235 // sizeSint32Value returns the size of wire encoding a int32 value as a Sint32. 1236 func sizeSint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 1237 return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) 1238 } 1239 1240 // appendSint32Value encodes a int32 value as a Sint32. 1241 func appendSint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 1242 b = protowire.AppendVarint(b, wiretag) 1243 b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) 1244 return b, nil 1245 } 1246 1247 // consumeSint32Value decodes a int32 value as a Sint32. 1248 func consumeSint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 1249 if wtyp != protowire.VarintType { 1250 return protoreflect.Value{}, out, errUnknown 1251 } 1252 var v uint64 1253 var n int 1254 if len(b) >= 1 && b[0] < 0x80 { 1255 v = uint64(b[0]) 1256 n = 1 1257 } else if len(b) >= 2 && b[1] < 128 { 1258 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1259 n = 2 1260 } else { 1261 v, n = protowire.ConsumeVarint(b) 1262 } 1263 if n < 0 { 1264 return protoreflect.Value{}, out, errDecode 1265 } 1266 out.n = n 1267 return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), out, nil 1268 } 1269 1270 var coderSint32Value = valueCoderFuncs{ 1271 size: sizeSint32Value, 1272 marshal: appendSint32Value, 1273 unmarshal: consumeSint32Value, 1274 merge: mergeScalarValue, 1275 } 1276 1277 // sizeSint32SliceValue returns the size of wire encoding a []int32 value as a repeated Sint32. 1278 func sizeSint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 1279 list := listv.List() 1280 for i, llen := 0, list.Len(); i < llen; i++ { 1281 v := list.Get(i) 1282 size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) 1283 } 1284 return size 1285 } 1286 1287 // appendSint32SliceValue encodes a []int32 value as a repeated Sint32. 1288 func appendSint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 1289 list := listv.List() 1290 for i, llen := 0, list.Len(); i < llen; i++ { 1291 v := list.Get(i) 1292 b = protowire.AppendVarint(b, wiretag) 1293 b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) 1294 } 1295 return b, nil 1296 } 1297 1298 // consumeSint32SliceValue wire decodes a []int32 value as a repeated Sint32. 1299 func consumeSint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 1300 list := listv.List() 1301 if wtyp == protowire.BytesType { 1302 b, n := protowire.ConsumeBytes(b) 1303 if n < 0 { 1304 return protoreflect.Value{}, out, errDecode 1305 } 1306 for len(b) > 0 { 1307 var v uint64 1308 var n int 1309 if len(b) >= 1 && b[0] < 0x80 { 1310 v = uint64(b[0]) 1311 n = 1 1312 } else if len(b) >= 2 && b[1] < 128 { 1313 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1314 n = 2 1315 } else { 1316 v, n = protowire.ConsumeVarint(b) 1317 } 1318 if n < 0 { 1319 return protoreflect.Value{}, out, errDecode 1320 } 1321 list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) 1322 b = b[n:] 1323 } 1324 out.n = n 1325 return listv, out, nil 1326 } 1327 if wtyp != protowire.VarintType { 1328 return protoreflect.Value{}, out, errUnknown 1329 } 1330 var v uint64 1331 var n int 1332 if len(b) >= 1 && b[0] < 0x80 { 1333 v = uint64(b[0]) 1334 n = 1 1335 } else if len(b) >= 2 && b[1] < 128 { 1336 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1337 n = 2 1338 } else { 1339 v, n = protowire.ConsumeVarint(b) 1340 } 1341 if n < 0 { 1342 return protoreflect.Value{}, out, errDecode 1343 } 1344 list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) 1345 out.n = n 1346 return listv, out, nil 1347 } 1348 1349 var coderSint32SliceValue = valueCoderFuncs{ 1350 size: sizeSint32SliceValue, 1351 marshal: appendSint32SliceValue, 1352 unmarshal: consumeSint32SliceValue, 1353 merge: mergeListValue, 1354 } 1355 1356 // sizeSint32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sint32. 1357 func sizeSint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 1358 list := listv.List() 1359 llen := list.Len() 1360 if llen == 0 { 1361 return 0 1362 } 1363 n := 0 1364 for i, llen := 0, llen; i < llen; i++ { 1365 v := list.Get(i) 1366 n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) 1367 } 1368 return tagsize + protowire.SizeBytes(n) 1369 } 1370 1371 // appendSint32PackedSliceValue encodes a []int32 value as a packed repeated Sint32. 1372 func appendSint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 1373 list := listv.List() 1374 llen := list.Len() 1375 if llen == 0 { 1376 return b, nil 1377 } 1378 b = protowire.AppendVarint(b, wiretag) 1379 n := 0 1380 for i := 0; i < llen; i++ { 1381 v := list.Get(i) 1382 n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) 1383 } 1384 b = protowire.AppendVarint(b, uint64(n)) 1385 for i := 0; i < llen; i++ { 1386 v := list.Get(i) 1387 b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) 1388 } 1389 return b, nil 1390 } 1391 1392 var coderSint32PackedSliceValue = valueCoderFuncs{ 1393 size: sizeSint32PackedSliceValue, 1394 marshal: appendSint32PackedSliceValue, 1395 unmarshal: consumeSint32SliceValue, 1396 merge: mergeListValue, 1397 } 1398 1399 // sizeUint32 returns the size of wire encoding a uint32 pointer as a Uint32. 1400 func sizeUint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1401 v := *p.Uint32() 1402 return f.tagsize + protowire.SizeVarint(uint64(v)) 1403 } 1404 1405 // appendUint32 wire encodes a uint32 pointer as a Uint32. 1406 func appendUint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1407 v := *p.Uint32() 1408 b = protowire.AppendVarint(b, f.wiretag) 1409 b = protowire.AppendVarint(b, uint64(v)) 1410 return b, nil 1411 } 1412 1413 // consumeUint32 wire decodes a uint32 pointer as a Uint32. 1414 func consumeUint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1415 if wtyp != protowire.VarintType { 1416 return out, errUnknown 1417 } 1418 var v uint64 1419 var n int 1420 if len(b) >= 1 && b[0] < 0x80 { 1421 v = uint64(b[0]) 1422 n = 1 1423 } else if len(b) >= 2 && b[1] < 128 { 1424 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1425 n = 2 1426 } else { 1427 v, n = protowire.ConsumeVarint(b) 1428 } 1429 if n < 0 { 1430 return out, errDecode 1431 } 1432 *p.Uint32() = uint32(v) 1433 out.n = n 1434 return out, nil 1435 } 1436 1437 var coderUint32 = pointerCoderFuncs{ 1438 size: sizeUint32, 1439 marshal: appendUint32, 1440 unmarshal: consumeUint32, 1441 merge: mergeUint32, 1442 } 1443 1444 // sizeUint32NoZero returns the size of wire encoding a uint32 pointer as a Uint32. 1445 // The zero value is not encoded. 1446 func sizeUint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1447 v := *p.Uint32() 1448 if v == 0 { 1449 return 0 1450 } 1451 return f.tagsize + protowire.SizeVarint(uint64(v)) 1452 } 1453 1454 // appendUint32NoZero wire encodes a uint32 pointer as a Uint32. 1455 // The zero value is not encoded. 1456 func appendUint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1457 v := *p.Uint32() 1458 if v == 0 { 1459 return b, nil 1460 } 1461 b = protowire.AppendVarint(b, f.wiretag) 1462 b = protowire.AppendVarint(b, uint64(v)) 1463 return b, nil 1464 } 1465 1466 var coderUint32NoZero = pointerCoderFuncs{ 1467 size: sizeUint32NoZero, 1468 marshal: appendUint32NoZero, 1469 unmarshal: consumeUint32, 1470 merge: mergeUint32NoZero, 1471 } 1472 1473 // sizeUint32Ptr returns the size of wire encoding a *uint32 pointer as a Uint32. 1474 // It panics if the pointer is nil. 1475 func sizeUint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1476 v := **p.Uint32Ptr() 1477 return f.tagsize + protowire.SizeVarint(uint64(v)) 1478 } 1479 1480 // appendUint32Ptr wire encodes a *uint32 pointer as a Uint32. 1481 // It panics if the pointer is nil. 1482 func appendUint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1483 v := **p.Uint32Ptr() 1484 b = protowire.AppendVarint(b, f.wiretag) 1485 b = protowire.AppendVarint(b, uint64(v)) 1486 return b, nil 1487 } 1488 1489 // consumeUint32Ptr wire decodes a *uint32 pointer as a Uint32. 1490 func consumeUint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1491 if wtyp != protowire.VarintType { 1492 return out, errUnknown 1493 } 1494 var v uint64 1495 var n int 1496 if len(b) >= 1 && b[0] < 0x80 { 1497 v = uint64(b[0]) 1498 n = 1 1499 } else if len(b) >= 2 && b[1] < 128 { 1500 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1501 n = 2 1502 } else { 1503 v, n = protowire.ConsumeVarint(b) 1504 } 1505 if n < 0 { 1506 return out, errDecode 1507 } 1508 vp := p.Uint32Ptr() 1509 if *vp == nil { 1510 *vp = new(uint32) 1511 } 1512 **vp = uint32(v) 1513 out.n = n 1514 return out, nil 1515 } 1516 1517 var coderUint32Ptr = pointerCoderFuncs{ 1518 size: sizeUint32Ptr, 1519 marshal: appendUint32Ptr, 1520 unmarshal: consumeUint32Ptr, 1521 merge: mergeUint32Ptr, 1522 } 1523 1524 // sizeUint32Slice returns the size of wire encoding a []uint32 pointer as a repeated Uint32. 1525 func sizeUint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1526 s := *p.Uint32Slice() 1527 for _, v := range s { 1528 size += f.tagsize + protowire.SizeVarint(uint64(v)) 1529 } 1530 return size 1531 } 1532 1533 // appendUint32Slice encodes a []uint32 pointer as a repeated Uint32. 1534 func appendUint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1535 s := *p.Uint32Slice() 1536 for _, v := range s { 1537 b = protowire.AppendVarint(b, f.wiretag) 1538 b = protowire.AppendVarint(b, uint64(v)) 1539 } 1540 return b, nil 1541 } 1542 1543 // consumeUint32Slice wire decodes a []uint32 pointer as a repeated Uint32. 1544 func consumeUint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1545 sp := p.Uint32Slice() 1546 if wtyp == protowire.BytesType { 1547 s := *sp 1548 b, n := protowire.ConsumeBytes(b) 1549 if n < 0 { 1550 return out, errDecode 1551 } 1552 for len(b) > 0 { 1553 var v uint64 1554 var n int 1555 if len(b) >= 1 && b[0] < 0x80 { 1556 v = uint64(b[0]) 1557 n = 1 1558 } else if len(b) >= 2 && b[1] < 128 { 1559 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1560 n = 2 1561 } else { 1562 v, n = protowire.ConsumeVarint(b) 1563 } 1564 if n < 0 { 1565 return out, errDecode 1566 } 1567 s = append(s, uint32(v)) 1568 b = b[n:] 1569 } 1570 *sp = s 1571 out.n = n 1572 return out, nil 1573 } 1574 if wtyp != protowire.VarintType { 1575 return out, errUnknown 1576 } 1577 var v uint64 1578 var n int 1579 if len(b) >= 1 && b[0] < 0x80 { 1580 v = uint64(b[0]) 1581 n = 1 1582 } else if len(b) >= 2 && b[1] < 128 { 1583 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1584 n = 2 1585 } else { 1586 v, n = protowire.ConsumeVarint(b) 1587 } 1588 if n < 0 { 1589 return out, errDecode 1590 } 1591 *sp = append(*sp, uint32(v)) 1592 out.n = n 1593 return out, nil 1594 } 1595 1596 var coderUint32Slice = pointerCoderFuncs{ 1597 size: sizeUint32Slice, 1598 marshal: appendUint32Slice, 1599 unmarshal: consumeUint32Slice, 1600 merge: mergeUint32Slice, 1601 } 1602 1603 // sizeUint32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Uint32. 1604 func sizeUint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1605 s := *p.Uint32Slice() 1606 if len(s) == 0 { 1607 return 0 1608 } 1609 n := 0 1610 for _, v := range s { 1611 n += protowire.SizeVarint(uint64(v)) 1612 } 1613 return f.tagsize + protowire.SizeBytes(n) 1614 } 1615 1616 // appendUint32PackedSlice encodes a []uint32 pointer as a packed repeated Uint32. 1617 func appendUint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1618 s := *p.Uint32Slice() 1619 if len(s) == 0 { 1620 return b, nil 1621 } 1622 b = protowire.AppendVarint(b, f.wiretag) 1623 n := 0 1624 for _, v := range s { 1625 n += protowire.SizeVarint(uint64(v)) 1626 } 1627 b = protowire.AppendVarint(b, uint64(n)) 1628 for _, v := range s { 1629 b = protowire.AppendVarint(b, uint64(v)) 1630 } 1631 return b, nil 1632 } 1633 1634 var coderUint32PackedSlice = pointerCoderFuncs{ 1635 size: sizeUint32PackedSlice, 1636 marshal: appendUint32PackedSlice, 1637 unmarshal: consumeUint32Slice, 1638 merge: mergeUint32Slice, 1639 } 1640 1641 // sizeUint32Value returns the size of wire encoding a uint32 value as a Uint32. 1642 func sizeUint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 1643 return tagsize + protowire.SizeVarint(uint64(uint32(v.Uint()))) 1644 } 1645 1646 // appendUint32Value encodes a uint32 value as a Uint32. 1647 func appendUint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 1648 b = protowire.AppendVarint(b, wiretag) 1649 b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) 1650 return b, nil 1651 } 1652 1653 // consumeUint32Value decodes a uint32 value as a Uint32. 1654 func consumeUint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 1655 if wtyp != protowire.VarintType { 1656 return protoreflect.Value{}, out, errUnknown 1657 } 1658 var v uint64 1659 var n int 1660 if len(b) >= 1 && b[0] < 0x80 { 1661 v = uint64(b[0]) 1662 n = 1 1663 } else if len(b) >= 2 && b[1] < 128 { 1664 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1665 n = 2 1666 } else { 1667 v, n = protowire.ConsumeVarint(b) 1668 } 1669 if n < 0 { 1670 return protoreflect.Value{}, out, errDecode 1671 } 1672 out.n = n 1673 return protoreflect.ValueOfUint32(uint32(v)), out, nil 1674 } 1675 1676 var coderUint32Value = valueCoderFuncs{ 1677 size: sizeUint32Value, 1678 marshal: appendUint32Value, 1679 unmarshal: consumeUint32Value, 1680 merge: mergeScalarValue, 1681 } 1682 1683 // sizeUint32SliceValue returns the size of wire encoding a []uint32 value as a repeated Uint32. 1684 func sizeUint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 1685 list := listv.List() 1686 for i, llen := 0, list.Len(); i < llen; i++ { 1687 v := list.Get(i) 1688 size += tagsize + protowire.SizeVarint(uint64(uint32(v.Uint()))) 1689 } 1690 return size 1691 } 1692 1693 // appendUint32SliceValue encodes a []uint32 value as a repeated Uint32. 1694 func appendUint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 1695 list := listv.List() 1696 for i, llen := 0, list.Len(); i < llen; i++ { 1697 v := list.Get(i) 1698 b = protowire.AppendVarint(b, wiretag) 1699 b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) 1700 } 1701 return b, nil 1702 } 1703 1704 // consumeUint32SliceValue wire decodes a []uint32 value as a repeated Uint32. 1705 func consumeUint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 1706 list := listv.List() 1707 if wtyp == protowire.BytesType { 1708 b, n := protowire.ConsumeBytes(b) 1709 if n < 0 { 1710 return protoreflect.Value{}, out, errDecode 1711 } 1712 for len(b) > 0 { 1713 var v uint64 1714 var n int 1715 if len(b) >= 1 && b[0] < 0x80 { 1716 v = uint64(b[0]) 1717 n = 1 1718 } else if len(b) >= 2 && b[1] < 128 { 1719 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1720 n = 2 1721 } else { 1722 v, n = protowire.ConsumeVarint(b) 1723 } 1724 if n < 0 { 1725 return protoreflect.Value{}, out, errDecode 1726 } 1727 list.Append(protoreflect.ValueOfUint32(uint32(v))) 1728 b = b[n:] 1729 } 1730 out.n = n 1731 return listv, out, nil 1732 } 1733 if wtyp != protowire.VarintType { 1734 return protoreflect.Value{}, out, errUnknown 1735 } 1736 var v uint64 1737 var n int 1738 if len(b) >= 1 && b[0] < 0x80 { 1739 v = uint64(b[0]) 1740 n = 1 1741 } else if len(b) >= 2 && b[1] < 128 { 1742 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1743 n = 2 1744 } else { 1745 v, n = protowire.ConsumeVarint(b) 1746 } 1747 if n < 0 { 1748 return protoreflect.Value{}, out, errDecode 1749 } 1750 list.Append(protoreflect.ValueOfUint32(uint32(v))) 1751 out.n = n 1752 return listv, out, nil 1753 } 1754 1755 var coderUint32SliceValue = valueCoderFuncs{ 1756 size: sizeUint32SliceValue, 1757 marshal: appendUint32SliceValue, 1758 unmarshal: consumeUint32SliceValue, 1759 merge: mergeListValue, 1760 } 1761 1762 // sizeUint32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Uint32. 1763 func sizeUint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 1764 list := listv.List() 1765 llen := list.Len() 1766 if llen == 0 { 1767 return 0 1768 } 1769 n := 0 1770 for i, llen := 0, llen; i < llen; i++ { 1771 v := list.Get(i) 1772 n += protowire.SizeVarint(uint64(uint32(v.Uint()))) 1773 } 1774 return tagsize + protowire.SizeBytes(n) 1775 } 1776 1777 // appendUint32PackedSliceValue encodes a []uint32 value as a packed repeated Uint32. 1778 func appendUint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 1779 list := listv.List() 1780 llen := list.Len() 1781 if llen == 0 { 1782 return b, nil 1783 } 1784 b = protowire.AppendVarint(b, wiretag) 1785 n := 0 1786 for i := 0; i < llen; i++ { 1787 v := list.Get(i) 1788 n += protowire.SizeVarint(uint64(uint32(v.Uint()))) 1789 } 1790 b = protowire.AppendVarint(b, uint64(n)) 1791 for i := 0; i < llen; i++ { 1792 v := list.Get(i) 1793 b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) 1794 } 1795 return b, nil 1796 } 1797 1798 var coderUint32PackedSliceValue = valueCoderFuncs{ 1799 size: sizeUint32PackedSliceValue, 1800 marshal: appendUint32PackedSliceValue, 1801 unmarshal: consumeUint32SliceValue, 1802 merge: mergeListValue, 1803 } 1804 1805 // sizeInt64 returns the size of wire encoding a int64 pointer as a Int64. 1806 func sizeInt64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1807 v := *p.Int64() 1808 return f.tagsize + protowire.SizeVarint(uint64(v)) 1809 } 1810 1811 // appendInt64 wire encodes a int64 pointer as a Int64. 1812 func appendInt64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1813 v := *p.Int64() 1814 b = protowire.AppendVarint(b, f.wiretag) 1815 b = protowire.AppendVarint(b, uint64(v)) 1816 return b, nil 1817 } 1818 1819 // consumeInt64 wire decodes a int64 pointer as a Int64. 1820 func consumeInt64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1821 if wtyp != protowire.VarintType { 1822 return out, errUnknown 1823 } 1824 var v uint64 1825 var n int 1826 if len(b) >= 1 && b[0] < 0x80 { 1827 v = uint64(b[0]) 1828 n = 1 1829 } else if len(b) >= 2 && b[1] < 128 { 1830 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1831 n = 2 1832 } else { 1833 v, n = protowire.ConsumeVarint(b) 1834 } 1835 if n < 0 { 1836 return out, errDecode 1837 } 1838 *p.Int64() = int64(v) 1839 out.n = n 1840 return out, nil 1841 } 1842 1843 var coderInt64 = pointerCoderFuncs{ 1844 size: sizeInt64, 1845 marshal: appendInt64, 1846 unmarshal: consumeInt64, 1847 merge: mergeInt64, 1848 } 1849 1850 // sizeInt64NoZero returns the size of wire encoding a int64 pointer as a Int64. 1851 // The zero value is not encoded. 1852 func sizeInt64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1853 v := *p.Int64() 1854 if v == 0 { 1855 return 0 1856 } 1857 return f.tagsize + protowire.SizeVarint(uint64(v)) 1858 } 1859 1860 // appendInt64NoZero wire encodes a int64 pointer as a Int64. 1861 // The zero value is not encoded. 1862 func appendInt64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1863 v := *p.Int64() 1864 if v == 0 { 1865 return b, nil 1866 } 1867 b = protowire.AppendVarint(b, f.wiretag) 1868 b = protowire.AppendVarint(b, uint64(v)) 1869 return b, nil 1870 } 1871 1872 var coderInt64NoZero = pointerCoderFuncs{ 1873 size: sizeInt64NoZero, 1874 marshal: appendInt64NoZero, 1875 unmarshal: consumeInt64, 1876 merge: mergeInt64NoZero, 1877 } 1878 1879 // sizeInt64Ptr returns the size of wire encoding a *int64 pointer as a Int64. 1880 // It panics if the pointer is nil. 1881 func sizeInt64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1882 v := **p.Int64Ptr() 1883 return f.tagsize + protowire.SizeVarint(uint64(v)) 1884 } 1885 1886 // appendInt64Ptr wire encodes a *int64 pointer as a Int64. 1887 // It panics if the pointer is nil. 1888 func appendInt64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1889 v := **p.Int64Ptr() 1890 b = protowire.AppendVarint(b, f.wiretag) 1891 b = protowire.AppendVarint(b, uint64(v)) 1892 return b, nil 1893 } 1894 1895 // consumeInt64Ptr wire decodes a *int64 pointer as a Int64. 1896 func consumeInt64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1897 if wtyp != protowire.VarintType { 1898 return out, errUnknown 1899 } 1900 var v uint64 1901 var n int 1902 if len(b) >= 1 && b[0] < 0x80 { 1903 v = uint64(b[0]) 1904 n = 1 1905 } else if len(b) >= 2 && b[1] < 128 { 1906 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1907 n = 2 1908 } else { 1909 v, n = protowire.ConsumeVarint(b) 1910 } 1911 if n < 0 { 1912 return out, errDecode 1913 } 1914 vp := p.Int64Ptr() 1915 if *vp == nil { 1916 *vp = new(int64) 1917 } 1918 **vp = int64(v) 1919 out.n = n 1920 return out, nil 1921 } 1922 1923 var coderInt64Ptr = pointerCoderFuncs{ 1924 size: sizeInt64Ptr, 1925 marshal: appendInt64Ptr, 1926 unmarshal: consumeInt64Ptr, 1927 merge: mergeInt64Ptr, 1928 } 1929 1930 // sizeInt64Slice returns the size of wire encoding a []int64 pointer as a repeated Int64. 1931 func sizeInt64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 1932 s := *p.Int64Slice() 1933 for _, v := range s { 1934 size += f.tagsize + protowire.SizeVarint(uint64(v)) 1935 } 1936 return size 1937 } 1938 1939 // appendInt64Slice encodes a []int64 pointer as a repeated Int64. 1940 func appendInt64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 1941 s := *p.Int64Slice() 1942 for _, v := range s { 1943 b = protowire.AppendVarint(b, f.wiretag) 1944 b = protowire.AppendVarint(b, uint64(v)) 1945 } 1946 return b, nil 1947 } 1948 1949 // consumeInt64Slice wire decodes a []int64 pointer as a repeated Int64. 1950 func consumeInt64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 1951 sp := p.Int64Slice() 1952 if wtyp == protowire.BytesType { 1953 s := *sp 1954 b, n := protowire.ConsumeBytes(b) 1955 if n < 0 { 1956 return out, errDecode 1957 } 1958 for len(b) > 0 { 1959 var v uint64 1960 var n int 1961 if len(b) >= 1 && b[0] < 0x80 { 1962 v = uint64(b[0]) 1963 n = 1 1964 } else if len(b) >= 2 && b[1] < 128 { 1965 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1966 n = 2 1967 } else { 1968 v, n = protowire.ConsumeVarint(b) 1969 } 1970 if n < 0 { 1971 return out, errDecode 1972 } 1973 s = append(s, int64(v)) 1974 b = b[n:] 1975 } 1976 *sp = s 1977 out.n = n 1978 return out, nil 1979 } 1980 if wtyp != protowire.VarintType { 1981 return out, errUnknown 1982 } 1983 var v uint64 1984 var n int 1985 if len(b) >= 1 && b[0] < 0x80 { 1986 v = uint64(b[0]) 1987 n = 1 1988 } else if len(b) >= 2 && b[1] < 128 { 1989 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 1990 n = 2 1991 } else { 1992 v, n = protowire.ConsumeVarint(b) 1993 } 1994 if n < 0 { 1995 return out, errDecode 1996 } 1997 *sp = append(*sp, int64(v)) 1998 out.n = n 1999 return out, nil 2000 } 2001 2002 var coderInt64Slice = pointerCoderFuncs{ 2003 size: sizeInt64Slice, 2004 marshal: appendInt64Slice, 2005 unmarshal: consumeInt64Slice, 2006 merge: mergeInt64Slice, 2007 } 2008 2009 // sizeInt64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Int64. 2010 func sizeInt64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2011 s := *p.Int64Slice() 2012 if len(s) == 0 { 2013 return 0 2014 } 2015 n := 0 2016 for _, v := range s { 2017 n += protowire.SizeVarint(uint64(v)) 2018 } 2019 return f.tagsize + protowire.SizeBytes(n) 2020 } 2021 2022 // appendInt64PackedSlice encodes a []int64 pointer as a packed repeated Int64. 2023 func appendInt64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2024 s := *p.Int64Slice() 2025 if len(s) == 0 { 2026 return b, nil 2027 } 2028 b = protowire.AppendVarint(b, f.wiretag) 2029 n := 0 2030 for _, v := range s { 2031 n += protowire.SizeVarint(uint64(v)) 2032 } 2033 b = protowire.AppendVarint(b, uint64(n)) 2034 for _, v := range s { 2035 b = protowire.AppendVarint(b, uint64(v)) 2036 } 2037 return b, nil 2038 } 2039 2040 var coderInt64PackedSlice = pointerCoderFuncs{ 2041 size: sizeInt64PackedSlice, 2042 marshal: appendInt64PackedSlice, 2043 unmarshal: consumeInt64Slice, 2044 merge: mergeInt64Slice, 2045 } 2046 2047 // sizeInt64Value returns the size of wire encoding a int64 value as a Int64. 2048 func sizeInt64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 2049 return tagsize + protowire.SizeVarint(uint64(v.Int())) 2050 } 2051 2052 // appendInt64Value encodes a int64 value as a Int64. 2053 func appendInt64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2054 b = protowire.AppendVarint(b, wiretag) 2055 b = protowire.AppendVarint(b, uint64(v.Int())) 2056 return b, nil 2057 } 2058 2059 // consumeInt64Value decodes a int64 value as a Int64. 2060 func consumeInt64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 2061 if wtyp != protowire.VarintType { 2062 return protoreflect.Value{}, out, errUnknown 2063 } 2064 var v uint64 2065 var n int 2066 if len(b) >= 1 && b[0] < 0x80 { 2067 v = uint64(b[0]) 2068 n = 1 2069 } else if len(b) >= 2 && b[1] < 128 { 2070 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2071 n = 2 2072 } else { 2073 v, n = protowire.ConsumeVarint(b) 2074 } 2075 if n < 0 { 2076 return protoreflect.Value{}, out, errDecode 2077 } 2078 out.n = n 2079 return protoreflect.ValueOfInt64(int64(v)), out, nil 2080 } 2081 2082 var coderInt64Value = valueCoderFuncs{ 2083 size: sizeInt64Value, 2084 marshal: appendInt64Value, 2085 unmarshal: consumeInt64Value, 2086 merge: mergeScalarValue, 2087 } 2088 2089 // sizeInt64SliceValue returns the size of wire encoding a []int64 value as a repeated Int64. 2090 func sizeInt64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 2091 list := listv.List() 2092 for i, llen := 0, list.Len(); i < llen; i++ { 2093 v := list.Get(i) 2094 size += tagsize + protowire.SizeVarint(uint64(v.Int())) 2095 } 2096 return size 2097 } 2098 2099 // appendInt64SliceValue encodes a []int64 value as a repeated Int64. 2100 func appendInt64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2101 list := listv.List() 2102 for i, llen := 0, list.Len(); i < llen; i++ { 2103 v := list.Get(i) 2104 b = protowire.AppendVarint(b, wiretag) 2105 b = protowire.AppendVarint(b, uint64(v.Int())) 2106 } 2107 return b, nil 2108 } 2109 2110 // consumeInt64SliceValue wire decodes a []int64 value as a repeated Int64. 2111 func consumeInt64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 2112 list := listv.List() 2113 if wtyp == protowire.BytesType { 2114 b, n := protowire.ConsumeBytes(b) 2115 if n < 0 { 2116 return protoreflect.Value{}, out, errDecode 2117 } 2118 for len(b) > 0 { 2119 var v uint64 2120 var n int 2121 if len(b) >= 1 && b[0] < 0x80 { 2122 v = uint64(b[0]) 2123 n = 1 2124 } else if len(b) >= 2 && b[1] < 128 { 2125 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2126 n = 2 2127 } else { 2128 v, n = protowire.ConsumeVarint(b) 2129 } 2130 if n < 0 { 2131 return protoreflect.Value{}, out, errDecode 2132 } 2133 list.Append(protoreflect.ValueOfInt64(int64(v))) 2134 b = b[n:] 2135 } 2136 out.n = n 2137 return listv, out, nil 2138 } 2139 if wtyp != protowire.VarintType { 2140 return protoreflect.Value{}, out, errUnknown 2141 } 2142 var v uint64 2143 var n int 2144 if len(b) >= 1 && b[0] < 0x80 { 2145 v = uint64(b[0]) 2146 n = 1 2147 } else if len(b) >= 2 && b[1] < 128 { 2148 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2149 n = 2 2150 } else { 2151 v, n = protowire.ConsumeVarint(b) 2152 } 2153 if n < 0 { 2154 return protoreflect.Value{}, out, errDecode 2155 } 2156 list.Append(protoreflect.ValueOfInt64(int64(v))) 2157 out.n = n 2158 return listv, out, nil 2159 } 2160 2161 var coderInt64SliceValue = valueCoderFuncs{ 2162 size: sizeInt64SliceValue, 2163 marshal: appendInt64SliceValue, 2164 unmarshal: consumeInt64SliceValue, 2165 merge: mergeListValue, 2166 } 2167 2168 // sizeInt64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Int64. 2169 func sizeInt64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 2170 list := listv.List() 2171 llen := list.Len() 2172 if llen == 0 { 2173 return 0 2174 } 2175 n := 0 2176 for i, llen := 0, llen; i < llen; i++ { 2177 v := list.Get(i) 2178 n += protowire.SizeVarint(uint64(v.Int())) 2179 } 2180 return tagsize + protowire.SizeBytes(n) 2181 } 2182 2183 // appendInt64PackedSliceValue encodes a []int64 value as a packed repeated Int64. 2184 func appendInt64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2185 list := listv.List() 2186 llen := list.Len() 2187 if llen == 0 { 2188 return b, nil 2189 } 2190 b = protowire.AppendVarint(b, wiretag) 2191 n := 0 2192 for i := 0; i < llen; i++ { 2193 v := list.Get(i) 2194 n += protowire.SizeVarint(uint64(v.Int())) 2195 } 2196 b = protowire.AppendVarint(b, uint64(n)) 2197 for i := 0; i < llen; i++ { 2198 v := list.Get(i) 2199 b = protowire.AppendVarint(b, uint64(v.Int())) 2200 } 2201 return b, nil 2202 } 2203 2204 var coderInt64PackedSliceValue = valueCoderFuncs{ 2205 size: sizeInt64PackedSliceValue, 2206 marshal: appendInt64PackedSliceValue, 2207 unmarshal: consumeInt64SliceValue, 2208 merge: mergeListValue, 2209 } 2210 2211 // sizeSint64 returns the size of wire encoding a int64 pointer as a Sint64. 2212 func sizeSint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2213 v := *p.Int64() 2214 return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) 2215 } 2216 2217 // appendSint64 wire encodes a int64 pointer as a Sint64. 2218 func appendSint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2219 v := *p.Int64() 2220 b = protowire.AppendVarint(b, f.wiretag) 2221 b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) 2222 return b, nil 2223 } 2224 2225 // consumeSint64 wire decodes a int64 pointer as a Sint64. 2226 func consumeSint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 2227 if wtyp != protowire.VarintType { 2228 return out, errUnknown 2229 } 2230 var v uint64 2231 var n int 2232 if len(b) >= 1 && b[0] < 0x80 { 2233 v = uint64(b[0]) 2234 n = 1 2235 } else if len(b) >= 2 && b[1] < 128 { 2236 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2237 n = 2 2238 } else { 2239 v, n = protowire.ConsumeVarint(b) 2240 } 2241 if n < 0 { 2242 return out, errDecode 2243 } 2244 *p.Int64() = protowire.DecodeZigZag(v) 2245 out.n = n 2246 return out, nil 2247 } 2248 2249 var coderSint64 = pointerCoderFuncs{ 2250 size: sizeSint64, 2251 marshal: appendSint64, 2252 unmarshal: consumeSint64, 2253 merge: mergeInt64, 2254 } 2255 2256 // sizeSint64NoZero returns the size of wire encoding a int64 pointer as a Sint64. 2257 // The zero value is not encoded. 2258 func sizeSint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2259 v := *p.Int64() 2260 if v == 0 { 2261 return 0 2262 } 2263 return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) 2264 } 2265 2266 // appendSint64NoZero wire encodes a int64 pointer as a Sint64. 2267 // The zero value is not encoded. 2268 func appendSint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2269 v := *p.Int64() 2270 if v == 0 { 2271 return b, nil 2272 } 2273 b = protowire.AppendVarint(b, f.wiretag) 2274 b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) 2275 return b, nil 2276 } 2277 2278 var coderSint64NoZero = pointerCoderFuncs{ 2279 size: sizeSint64NoZero, 2280 marshal: appendSint64NoZero, 2281 unmarshal: consumeSint64, 2282 merge: mergeInt64NoZero, 2283 } 2284 2285 // sizeSint64Ptr returns the size of wire encoding a *int64 pointer as a Sint64. 2286 // It panics if the pointer is nil. 2287 func sizeSint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2288 v := **p.Int64Ptr() 2289 return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) 2290 } 2291 2292 // appendSint64Ptr wire encodes a *int64 pointer as a Sint64. 2293 // It panics if the pointer is nil. 2294 func appendSint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2295 v := **p.Int64Ptr() 2296 b = protowire.AppendVarint(b, f.wiretag) 2297 b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) 2298 return b, nil 2299 } 2300 2301 // consumeSint64Ptr wire decodes a *int64 pointer as a Sint64. 2302 func consumeSint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 2303 if wtyp != protowire.VarintType { 2304 return out, errUnknown 2305 } 2306 var v uint64 2307 var n int 2308 if len(b) >= 1 && b[0] < 0x80 { 2309 v = uint64(b[0]) 2310 n = 1 2311 } else if len(b) >= 2 && b[1] < 128 { 2312 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2313 n = 2 2314 } else { 2315 v, n = protowire.ConsumeVarint(b) 2316 } 2317 if n < 0 { 2318 return out, errDecode 2319 } 2320 vp := p.Int64Ptr() 2321 if *vp == nil { 2322 *vp = new(int64) 2323 } 2324 **vp = protowire.DecodeZigZag(v) 2325 out.n = n 2326 return out, nil 2327 } 2328 2329 var coderSint64Ptr = pointerCoderFuncs{ 2330 size: sizeSint64Ptr, 2331 marshal: appendSint64Ptr, 2332 unmarshal: consumeSint64Ptr, 2333 merge: mergeInt64Ptr, 2334 } 2335 2336 // sizeSint64Slice returns the size of wire encoding a []int64 pointer as a repeated Sint64. 2337 func sizeSint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2338 s := *p.Int64Slice() 2339 for _, v := range s { 2340 size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) 2341 } 2342 return size 2343 } 2344 2345 // appendSint64Slice encodes a []int64 pointer as a repeated Sint64. 2346 func appendSint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2347 s := *p.Int64Slice() 2348 for _, v := range s { 2349 b = protowire.AppendVarint(b, f.wiretag) 2350 b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) 2351 } 2352 return b, nil 2353 } 2354 2355 // consumeSint64Slice wire decodes a []int64 pointer as a repeated Sint64. 2356 func consumeSint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 2357 sp := p.Int64Slice() 2358 if wtyp == protowire.BytesType { 2359 s := *sp 2360 b, n := protowire.ConsumeBytes(b) 2361 if n < 0 { 2362 return out, errDecode 2363 } 2364 for len(b) > 0 { 2365 var v uint64 2366 var n int 2367 if len(b) >= 1 && b[0] < 0x80 { 2368 v = uint64(b[0]) 2369 n = 1 2370 } else if len(b) >= 2 && b[1] < 128 { 2371 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2372 n = 2 2373 } else { 2374 v, n = protowire.ConsumeVarint(b) 2375 } 2376 if n < 0 { 2377 return out, errDecode 2378 } 2379 s = append(s, protowire.DecodeZigZag(v)) 2380 b = b[n:] 2381 } 2382 *sp = s 2383 out.n = n 2384 return out, nil 2385 } 2386 if wtyp != protowire.VarintType { 2387 return out, errUnknown 2388 } 2389 var v uint64 2390 var n int 2391 if len(b) >= 1 && b[0] < 0x80 { 2392 v = uint64(b[0]) 2393 n = 1 2394 } else if len(b) >= 2 && b[1] < 128 { 2395 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2396 n = 2 2397 } else { 2398 v, n = protowire.ConsumeVarint(b) 2399 } 2400 if n < 0 { 2401 return out, errDecode 2402 } 2403 *sp = append(*sp, protowire.DecodeZigZag(v)) 2404 out.n = n 2405 return out, nil 2406 } 2407 2408 var coderSint64Slice = pointerCoderFuncs{ 2409 size: sizeSint64Slice, 2410 marshal: appendSint64Slice, 2411 unmarshal: consumeSint64Slice, 2412 merge: mergeInt64Slice, 2413 } 2414 2415 // sizeSint64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sint64. 2416 func sizeSint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2417 s := *p.Int64Slice() 2418 if len(s) == 0 { 2419 return 0 2420 } 2421 n := 0 2422 for _, v := range s { 2423 n += protowire.SizeVarint(protowire.EncodeZigZag(v)) 2424 } 2425 return f.tagsize + protowire.SizeBytes(n) 2426 } 2427 2428 // appendSint64PackedSlice encodes a []int64 pointer as a packed repeated Sint64. 2429 func appendSint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2430 s := *p.Int64Slice() 2431 if len(s) == 0 { 2432 return b, nil 2433 } 2434 b = protowire.AppendVarint(b, f.wiretag) 2435 n := 0 2436 for _, v := range s { 2437 n += protowire.SizeVarint(protowire.EncodeZigZag(v)) 2438 } 2439 b = protowire.AppendVarint(b, uint64(n)) 2440 for _, v := range s { 2441 b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) 2442 } 2443 return b, nil 2444 } 2445 2446 var coderSint64PackedSlice = pointerCoderFuncs{ 2447 size: sizeSint64PackedSlice, 2448 marshal: appendSint64PackedSlice, 2449 unmarshal: consumeSint64Slice, 2450 merge: mergeInt64Slice, 2451 } 2452 2453 // sizeSint64Value returns the size of wire encoding a int64 value as a Sint64. 2454 func sizeSint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 2455 return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) 2456 } 2457 2458 // appendSint64Value encodes a int64 value as a Sint64. 2459 func appendSint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2460 b = protowire.AppendVarint(b, wiretag) 2461 b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) 2462 return b, nil 2463 } 2464 2465 // consumeSint64Value decodes a int64 value as a Sint64. 2466 func consumeSint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 2467 if wtyp != protowire.VarintType { 2468 return protoreflect.Value{}, out, errUnknown 2469 } 2470 var v uint64 2471 var n int 2472 if len(b) >= 1 && b[0] < 0x80 { 2473 v = uint64(b[0]) 2474 n = 1 2475 } else if len(b) >= 2 && b[1] < 128 { 2476 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2477 n = 2 2478 } else { 2479 v, n = protowire.ConsumeVarint(b) 2480 } 2481 if n < 0 { 2482 return protoreflect.Value{}, out, errDecode 2483 } 2484 out.n = n 2485 return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), out, nil 2486 } 2487 2488 var coderSint64Value = valueCoderFuncs{ 2489 size: sizeSint64Value, 2490 marshal: appendSint64Value, 2491 unmarshal: consumeSint64Value, 2492 merge: mergeScalarValue, 2493 } 2494 2495 // sizeSint64SliceValue returns the size of wire encoding a []int64 value as a repeated Sint64. 2496 func sizeSint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 2497 list := listv.List() 2498 for i, llen := 0, list.Len(); i < llen; i++ { 2499 v := list.Get(i) 2500 size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) 2501 } 2502 return size 2503 } 2504 2505 // appendSint64SliceValue encodes a []int64 value as a repeated Sint64. 2506 func appendSint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2507 list := listv.List() 2508 for i, llen := 0, list.Len(); i < llen; i++ { 2509 v := list.Get(i) 2510 b = protowire.AppendVarint(b, wiretag) 2511 b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) 2512 } 2513 return b, nil 2514 } 2515 2516 // consumeSint64SliceValue wire decodes a []int64 value as a repeated Sint64. 2517 func consumeSint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 2518 list := listv.List() 2519 if wtyp == protowire.BytesType { 2520 b, n := protowire.ConsumeBytes(b) 2521 if n < 0 { 2522 return protoreflect.Value{}, out, errDecode 2523 } 2524 for len(b) > 0 { 2525 var v uint64 2526 var n int 2527 if len(b) >= 1 && b[0] < 0x80 { 2528 v = uint64(b[0]) 2529 n = 1 2530 } else if len(b) >= 2 && b[1] < 128 { 2531 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2532 n = 2 2533 } else { 2534 v, n = protowire.ConsumeVarint(b) 2535 } 2536 if n < 0 { 2537 return protoreflect.Value{}, out, errDecode 2538 } 2539 list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) 2540 b = b[n:] 2541 } 2542 out.n = n 2543 return listv, out, nil 2544 } 2545 if wtyp != protowire.VarintType { 2546 return protoreflect.Value{}, out, errUnknown 2547 } 2548 var v uint64 2549 var n int 2550 if len(b) >= 1 && b[0] < 0x80 { 2551 v = uint64(b[0]) 2552 n = 1 2553 } else if len(b) >= 2 && b[1] < 128 { 2554 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2555 n = 2 2556 } else { 2557 v, n = protowire.ConsumeVarint(b) 2558 } 2559 if n < 0 { 2560 return protoreflect.Value{}, out, errDecode 2561 } 2562 list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) 2563 out.n = n 2564 return listv, out, nil 2565 } 2566 2567 var coderSint64SliceValue = valueCoderFuncs{ 2568 size: sizeSint64SliceValue, 2569 marshal: appendSint64SliceValue, 2570 unmarshal: consumeSint64SliceValue, 2571 merge: mergeListValue, 2572 } 2573 2574 // sizeSint64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sint64. 2575 func sizeSint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 2576 list := listv.List() 2577 llen := list.Len() 2578 if llen == 0 { 2579 return 0 2580 } 2581 n := 0 2582 for i, llen := 0, llen; i < llen; i++ { 2583 v := list.Get(i) 2584 n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) 2585 } 2586 return tagsize + protowire.SizeBytes(n) 2587 } 2588 2589 // appendSint64PackedSliceValue encodes a []int64 value as a packed repeated Sint64. 2590 func appendSint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2591 list := listv.List() 2592 llen := list.Len() 2593 if llen == 0 { 2594 return b, nil 2595 } 2596 b = protowire.AppendVarint(b, wiretag) 2597 n := 0 2598 for i := 0; i < llen; i++ { 2599 v := list.Get(i) 2600 n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) 2601 } 2602 b = protowire.AppendVarint(b, uint64(n)) 2603 for i := 0; i < llen; i++ { 2604 v := list.Get(i) 2605 b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) 2606 } 2607 return b, nil 2608 } 2609 2610 var coderSint64PackedSliceValue = valueCoderFuncs{ 2611 size: sizeSint64PackedSliceValue, 2612 marshal: appendSint64PackedSliceValue, 2613 unmarshal: consumeSint64SliceValue, 2614 merge: mergeListValue, 2615 } 2616 2617 // sizeUint64 returns the size of wire encoding a uint64 pointer as a Uint64. 2618 func sizeUint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2619 v := *p.Uint64() 2620 return f.tagsize + protowire.SizeVarint(v) 2621 } 2622 2623 // appendUint64 wire encodes a uint64 pointer as a Uint64. 2624 func appendUint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2625 v := *p.Uint64() 2626 b = protowire.AppendVarint(b, f.wiretag) 2627 b = protowire.AppendVarint(b, v) 2628 return b, nil 2629 } 2630 2631 // consumeUint64 wire decodes a uint64 pointer as a Uint64. 2632 func consumeUint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 2633 if wtyp != protowire.VarintType { 2634 return out, errUnknown 2635 } 2636 var v uint64 2637 var n int 2638 if len(b) >= 1 && b[0] < 0x80 { 2639 v = uint64(b[0]) 2640 n = 1 2641 } else if len(b) >= 2 && b[1] < 128 { 2642 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2643 n = 2 2644 } else { 2645 v, n = protowire.ConsumeVarint(b) 2646 } 2647 if n < 0 { 2648 return out, errDecode 2649 } 2650 *p.Uint64() = v 2651 out.n = n 2652 return out, nil 2653 } 2654 2655 var coderUint64 = pointerCoderFuncs{ 2656 size: sizeUint64, 2657 marshal: appendUint64, 2658 unmarshal: consumeUint64, 2659 merge: mergeUint64, 2660 } 2661 2662 // sizeUint64NoZero returns the size of wire encoding a uint64 pointer as a Uint64. 2663 // The zero value is not encoded. 2664 func sizeUint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2665 v := *p.Uint64() 2666 if v == 0 { 2667 return 0 2668 } 2669 return f.tagsize + protowire.SizeVarint(v) 2670 } 2671 2672 // appendUint64NoZero wire encodes a uint64 pointer as a Uint64. 2673 // The zero value is not encoded. 2674 func appendUint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2675 v := *p.Uint64() 2676 if v == 0 { 2677 return b, nil 2678 } 2679 b = protowire.AppendVarint(b, f.wiretag) 2680 b = protowire.AppendVarint(b, v) 2681 return b, nil 2682 } 2683 2684 var coderUint64NoZero = pointerCoderFuncs{ 2685 size: sizeUint64NoZero, 2686 marshal: appendUint64NoZero, 2687 unmarshal: consumeUint64, 2688 merge: mergeUint64NoZero, 2689 } 2690 2691 // sizeUint64Ptr returns the size of wire encoding a *uint64 pointer as a Uint64. 2692 // It panics if the pointer is nil. 2693 func sizeUint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2694 v := **p.Uint64Ptr() 2695 return f.tagsize + protowire.SizeVarint(v) 2696 } 2697 2698 // appendUint64Ptr wire encodes a *uint64 pointer as a Uint64. 2699 // It panics if the pointer is nil. 2700 func appendUint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2701 v := **p.Uint64Ptr() 2702 b = protowire.AppendVarint(b, f.wiretag) 2703 b = protowire.AppendVarint(b, v) 2704 return b, nil 2705 } 2706 2707 // consumeUint64Ptr wire decodes a *uint64 pointer as a Uint64. 2708 func consumeUint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 2709 if wtyp != protowire.VarintType { 2710 return out, errUnknown 2711 } 2712 var v uint64 2713 var n int 2714 if len(b) >= 1 && b[0] < 0x80 { 2715 v = uint64(b[0]) 2716 n = 1 2717 } else if len(b) >= 2 && b[1] < 128 { 2718 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2719 n = 2 2720 } else { 2721 v, n = protowire.ConsumeVarint(b) 2722 } 2723 if n < 0 { 2724 return out, errDecode 2725 } 2726 vp := p.Uint64Ptr() 2727 if *vp == nil { 2728 *vp = new(uint64) 2729 } 2730 **vp = v 2731 out.n = n 2732 return out, nil 2733 } 2734 2735 var coderUint64Ptr = pointerCoderFuncs{ 2736 size: sizeUint64Ptr, 2737 marshal: appendUint64Ptr, 2738 unmarshal: consumeUint64Ptr, 2739 merge: mergeUint64Ptr, 2740 } 2741 2742 // sizeUint64Slice returns the size of wire encoding a []uint64 pointer as a repeated Uint64. 2743 func sizeUint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2744 s := *p.Uint64Slice() 2745 for _, v := range s { 2746 size += f.tagsize + protowire.SizeVarint(v) 2747 } 2748 return size 2749 } 2750 2751 // appendUint64Slice encodes a []uint64 pointer as a repeated Uint64. 2752 func appendUint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2753 s := *p.Uint64Slice() 2754 for _, v := range s { 2755 b = protowire.AppendVarint(b, f.wiretag) 2756 b = protowire.AppendVarint(b, v) 2757 } 2758 return b, nil 2759 } 2760 2761 // consumeUint64Slice wire decodes a []uint64 pointer as a repeated Uint64. 2762 func consumeUint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 2763 sp := p.Uint64Slice() 2764 if wtyp == protowire.BytesType { 2765 s := *sp 2766 b, n := protowire.ConsumeBytes(b) 2767 if n < 0 { 2768 return out, errDecode 2769 } 2770 for len(b) > 0 { 2771 var v uint64 2772 var n int 2773 if len(b) >= 1 && b[0] < 0x80 { 2774 v = uint64(b[0]) 2775 n = 1 2776 } else if len(b) >= 2 && b[1] < 128 { 2777 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2778 n = 2 2779 } else { 2780 v, n = protowire.ConsumeVarint(b) 2781 } 2782 if n < 0 { 2783 return out, errDecode 2784 } 2785 s = append(s, v) 2786 b = b[n:] 2787 } 2788 *sp = s 2789 out.n = n 2790 return out, nil 2791 } 2792 if wtyp != protowire.VarintType { 2793 return out, errUnknown 2794 } 2795 var v uint64 2796 var n int 2797 if len(b) >= 1 && b[0] < 0x80 { 2798 v = uint64(b[0]) 2799 n = 1 2800 } else if len(b) >= 2 && b[1] < 128 { 2801 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2802 n = 2 2803 } else { 2804 v, n = protowire.ConsumeVarint(b) 2805 } 2806 if n < 0 { 2807 return out, errDecode 2808 } 2809 *sp = append(*sp, v) 2810 out.n = n 2811 return out, nil 2812 } 2813 2814 var coderUint64Slice = pointerCoderFuncs{ 2815 size: sizeUint64Slice, 2816 marshal: appendUint64Slice, 2817 unmarshal: consumeUint64Slice, 2818 merge: mergeUint64Slice, 2819 } 2820 2821 // sizeUint64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Uint64. 2822 func sizeUint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 2823 s := *p.Uint64Slice() 2824 if len(s) == 0 { 2825 return 0 2826 } 2827 n := 0 2828 for _, v := range s { 2829 n += protowire.SizeVarint(v) 2830 } 2831 return f.tagsize + protowire.SizeBytes(n) 2832 } 2833 2834 // appendUint64PackedSlice encodes a []uint64 pointer as a packed repeated Uint64. 2835 func appendUint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 2836 s := *p.Uint64Slice() 2837 if len(s) == 0 { 2838 return b, nil 2839 } 2840 b = protowire.AppendVarint(b, f.wiretag) 2841 n := 0 2842 for _, v := range s { 2843 n += protowire.SizeVarint(v) 2844 } 2845 b = protowire.AppendVarint(b, uint64(n)) 2846 for _, v := range s { 2847 b = protowire.AppendVarint(b, v) 2848 } 2849 return b, nil 2850 } 2851 2852 var coderUint64PackedSlice = pointerCoderFuncs{ 2853 size: sizeUint64PackedSlice, 2854 marshal: appendUint64PackedSlice, 2855 unmarshal: consumeUint64Slice, 2856 merge: mergeUint64Slice, 2857 } 2858 2859 // sizeUint64Value returns the size of wire encoding a uint64 value as a Uint64. 2860 func sizeUint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 2861 return tagsize + protowire.SizeVarint(v.Uint()) 2862 } 2863 2864 // appendUint64Value encodes a uint64 value as a Uint64. 2865 func appendUint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2866 b = protowire.AppendVarint(b, wiretag) 2867 b = protowire.AppendVarint(b, v.Uint()) 2868 return b, nil 2869 } 2870 2871 // consumeUint64Value decodes a uint64 value as a Uint64. 2872 func consumeUint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 2873 if wtyp != protowire.VarintType { 2874 return protoreflect.Value{}, out, errUnknown 2875 } 2876 var v uint64 2877 var n int 2878 if len(b) >= 1 && b[0] < 0x80 { 2879 v = uint64(b[0]) 2880 n = 1 2881 } else if len(b) >= 2 && b[1] < 128 { 2882 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2883 n = 2 2884 } else { 2885 v, n = protowire.ConsumeVarint(b) 2886 } 2887 if n < 0 { 2888 return protoreflect.Value{}, out, errDecode 2889 } 2890 out.n = n 2891 return protoreflect.ValueOfUint64(v), out, nil 2892 } 2893 2894 var coderUint64Value = valueCoderFuncs{ 2895 size: sizeUint64Value, 2896 marshal: appendUint64Value, 2897 unmarshal: consumeUint64Value, 2898 merge: mergeScalarValue, 2899 } 2900 2901 // sizeUint64SliceValue returns the size of wire encoding a []uint64 value as a repeated Uint64. 2902 func sizeUint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 2903 list := listv.List() 2904 for i, llen := 0, list.Len(); i < llen; i++ { 2905 v := list.Get(i) 2906 size += tagsize + protowire.SizeVarint(v.Uint()) 2907 } 2908 return size 2909 } 2910 2911 // appendUint64SliceValue encodes a []uint64 value as a repeated Uint64. 2912 func appendUint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2913 list := listv.List() 2914 for i, llen := 0, list.Len(); i < llen; i++ { 2915 v := list.Get(i) 2916 b = protowire.AppendVarint(b, wiretag) 2917 b = protowire.AppendVarint(b, v.Uint()) 2918 } 2919 return b, nil 2920 } 2921 2922 // consumeUint64SliceValue wire decodes a []uint64 value as a repeated Uint64. 2923 func consumeUint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 2924 list := listv.List() 2925 if wtyp == protowire.BytesType { 2926 b, n := protowire.ConsumeBytes(b) 2927 if n < 0 { 2928 return protoreflect.Value{}, out, errDecode 2929 } 2930 for len(b) > 0 { 2931 var v uint64 2932 var n int 2933 if len(b) >= 1 && b[0] < 0x80 { 2934 v = uint64(b[0]) 2935 n = 1 2936 } else if len(b) >= 2 && b[1] < 128 { 2937 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2938 n = 2 2939 } else { 2940 v, n = protowire.ConsumeVarint(b) 2941 } 2942 if n < 0 { 2943 return protoreflect.Value{}, out, errDecode 2944 } 2945 list.Append(protoreflect.ValueOfUint64(v)) 2946 b = b[n:] 2947 } 2948 out.n = n 2949 return listv, out, nil 2950 } 2951 if wtyp != protowire.VarintType { 2952 return protoreflect.Value{}, out, errUnknown 2953 } 2954 var v uint64 2955 var n int 2956 if len(b) >= 1 && b[0] < 0x80 { 2957 v = uint64(b[0]) 2958 n = 1 2959 } else if len(b) >= 2 && b[1] < 128 { 2960 v = uint64(b[0]&0x7f) + uint64(b[1])<<7 2961 n = 2 2962 } else { 2963 v, n = protowire.ConsumeVarint(b) 2964 } 2965 if n < 0 { 2966 return protoreflect.Value{}, out, errDecode 2967 } 2968 list.Append(protoreflect.ValueOfUint64(v)) 2969 out.n = n 2970 return listv, out, nil 2971 } 2972 2973 var coderUint64SliceValue = valueCoderFuncs{ 2974 size: sizeUint64SliceValue, 2975 marshal: appendUint64SliceValue, 2976 unmarshal: consumeUint64SliceValue, 2977 merge: mergeListValue, 2978 } 2979 2980 // sizeUint64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Uint64. 2981 func sizeUint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 2982 list := listv.List() 2983 llen := list.Len() 2984 if llen == 0 { 2985 return 0 2986 } 2987 n := 0 2988 for i, llen := 0, llen; i < llen; i++ { 2989 v := list.Get(i) 2990 n += protowire.SizeVarint(v.Uint()) 2991 } 2992 return tagsize + protowire.SizeBytes(n) 2993 } 2994 2995 // appendUint64PackedSliceValue encodes a []uint64 value as a packed repeated Uint64. 2996 func appendUint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 2997 list := listv.List() 2998 llen := list.Len() 2999 if llen == 0 { 3000 return b, nil 3001 } 3002 b = protowire.AppendVarint(b, wiretag) 3003 n := 0 3004 for i := 0; i < llen; i++ { 3005 v := list.Get(i) 3006 n += protowire.SizeVarint(v.Uint()) 3007 } 3008 b = protowire.AppendVarint(b, uint64(n)) 3009 for i := 0; i < llen; i++ { 3010 v := list.Get(i) 3011 b = protowire.AppendVarint(b, v.Uint()) 3012 } 3013 return b, nil 3014 } 3015 3016 var coderUint64PackedSliceValue = valueCoderFuncs{ 3017 size: sizeUint64PackedSliceValue, 3018 marshal: appendUint64PackedSliceValue, 3019 unmarshal: consumeUint64SliceValue, 3020 merge: mergeListValue, 3021 } 3022 3023 // sizeSfixed32 returns the size of wire encoding a int32 pointer as a Sfixed32. 3024 func sizeSfixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3025 3026 return f.tagsize + protowire.SizeFixed32() 3027 } 3028 3029 // appendSfixed32 wire encodes a int32 pointer as a Sfixed32. 3030 func appendSfixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3031 v := *p.Int32() 3032 b = protowire.AppendVarint(b, f.wiretag) 3033 b = protowire.AppendFixed32(b, uint32(v)) 3034 return b, nil 3035 } 3036 3037 // consumeSfixed32 wire decodes a int32 pointer as a Sfixed32. 3038 func consumeSfixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3039 if wtyp != protowire.Fixed32Type { 3040 return out, errUnknown 3041 } 3042 v, n := protowire.ConsumeFixed32(b) 3043 if n < 0 { 3044 return out, errDecode 3045 } 3046 *p.Int32() = int32(v) 3047 out.n = n 3048 return out, nil 3049 } 3050 3051 var coderSfixed32 = pointerCoderFuncs{ 3052 size: sizeSfixed32, 3053 marshal: appendSfixed32, 3054 unmarshal: consumeSfixed32, 3055 merge: mergeInt32, 3056 } 3057 3058 // sizeSfixed32NoZero returns the size of wire encoding a int32 pointer as a Sfixed32. 3059 // The zero value is not encoded. 3060 func sizeSfixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3061 v := *p.Int32() 3062 if v == 0 { 3063 return 0 3064 } 3065 return f.tagsize + protowire.SizeFixed32() 3066 } 3067 3068 // appendSfixed32NoZero wire encodes a int32 pointer as a Sfixed32. 3069 // The zero value is not encoded. 3070 func appendSfixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3071 v := *p.Int32() 3072 if v == 0 { 3073 return b, nil 3074 } 3075 b = protowire.AppendVarint(b, f.wiretag) 3076 b = protowire.AppendFixed32(b, uint32(v)) 3077 return b, nil 3078 } 3079 3080 var coderSfixed32NoZero = pointerCoderFuncs{ 3081 size: sizeSfixed32NoZero, 3082 marshal: appendSfixed32NoZero, 3083 unmarshal: consumeSfixed32, 3084 merge: mergeInt32NoZero, 3085 } 3086 3087 // sizeSfixed32Ptr returns the size of wire encoding a *int32 pointer as a Sfixed32. 3088 // It panics if the pointer is nil. 3089 func sizeSfixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3090 return f.tagsize + protowire.SizeFixed32() 3091 } 3092 3093 // appendSfixed32Ptr wire encodes a *int32 pointer as a Sfixed32. 3094 // It panics if the pointer is nil. 3095 func appendSfixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3096 v := **p.Int32Ptr() 3097 b = protowire.AppendVarint(b, f.wiretag) 3098 b = protowire.AppendFixed32(b, uint32(v)) 3099 return b, nil 3100 } 3101 3102 // consumeSfixed32Ptr wire decodes a *int32 pointer as a Sfixed32. 3103 func consumeSfixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3104 if wtyp != protowire.Fixed32Type { 3105 return out, errUnknown 3106 } 3107 v, n := protowire.ConsumeFixed32(b) 3108 if n < 0 { 3109 return out, errDecode 3110 } 3111 vp := p.Int32Ptr() 3112 if *vp == nil { 3113 *vp = new(int32) 3114 } 3115 **vp = int32(v) 3116 out.n = n 3117 return out, nil 3118 } 3119 3120 var coderSfixed32Ptr = pointerCoderFuncs{ 3121 size: sizeSfixed32Ptr, 3122 marshal: appendSfixed32Ptr, 3123 unmarshal: consumeSfixed32Ptr, 3124 merge: mergeInt32Ptr, 3125 } 3126 3127 // sizeSfixed32Slice returns the size of wire encoding a []int32 pointer as a repeated Sfixed32. 3128 func sizeSfixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3129 s := *p.Int32Slice() 3130 size = len(s) * (f.tagsize + protowire.SizeFixed32()) 3131 return size 3132 } 3133 3134 // appendSfixed32Slice encodes a []int32 pointer as a repeated Sfixed32. 3135 func appendSfixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3136 s := *p.Int32Slice() 3137 for _, v := range s { 3138 b = protowire.AppendVarint(b, f.wiretag) 3139 b = protowire.AppendFixed32(b, uint32(v)) 3140 } 3141 return b, nil 3142 } 3143 3144 // consumeSfixed32Slice wire decodes a []int32 pointer as a repeated Sfixed32. 3145 func consumeSfixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3146 sp := p.Int32Slice() 3147 if wtyp == protowire.BytesType { 3148 s := *sp 3149 b, n := protowire.ConsumeBytes(b) 3150 if n < 0 { 3151 return out, errDecode 3152 } 3153 for len(b) > 0 { 3154 v, n := protowire.ConsumeFixed32(b) 3155 if n < 0 { 3156 return out, errDecode 3157 } 3158 s = append(s, int32(v)) 3159 b = b[n:] 3160 } 3161 *sp = s 3162 out.n = n 3163 return out, nil 3164 } 3165 if wtyp != protowire.Fixed32Type { 3166 return out, errUnknown 3167 } 3168 v, n := protowire.ConsumeFixed32(b) 3169 if n < 0 { 3170 return out, errDecode 3171 } 3172 *sp = append(*sp, int32(v)) 3173 out.n = n 3174 return out, nil 3175 } 3176 3177 var coderSfixed32Slice = pointerCoderFuncs{ 3178 size: sizeSfixed32Slice, 3179 marshal: appendSfixed32Slice, 3180 unmarshal: consumeSfixed32Slice, 3181 merge: mergeInt32Slice, 3182 } 3183 3184 // sizeSfixed32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sfixed32. 3185 func sizeSfixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3186 s := *p.Int32Slice() 3187 if len(s) == 0 { 3188 return 0 3189 } 3190 n := len(s) * protowire.SizeFixed32() 3191 return f.tagsize + protowire.SizeBytes(n) 3192 } 3193 3194 // appendSfixed32PackedSlice encodes a []int32 pointer as a packed repeated Sfixed32. 3195 func appendSfixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3196 s := *p.Int32Slice() 3197 if len(s) == 0 { 3198 return b, nil 3199 } 3200 b = protowire.AppendVarint(b, f.wiretag) 3201 n := len(s) * protowire.SizeFixed32() 3202 b = protowire.AppendVarint(b, uint64(n)) 3203 for _, v := range s { 3204 b = protowire.AppendFixed32(b, uint32(v)) 3205 } 3206 return b, nil 3207 } 3208 3209 var coderSfixed32PackedSlice = pointerCoderFuncs{ 3210 size: sizeSfixed32PackedSlice, 3211 marshal: appendSfixed32PackedSlice, 3212 unmarshal: consumeSfixed32Slice, 3213 merge: mergeInt32Slice, 3214 } 3215 3216 // sizeSfixed32Value returns the size of wire encoding a int32 value as a Sfixed32. 3217 func sizeSfixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 3218 return tagsize + protowire.SizeFixed32() 3219 } 3220 3221 // appendSfixed32Value encodes a int32 value as a Sfixed32. 3222 func appendSfixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3223 b = protowire.AppendVarint(b, wiretag) 3224 b = protowire.AppendFixed32(b, uint32(v.Int())) 3225 return b, nil 3226 } 3227 3228 // consumeSfixed32Value decodes a int32 value as a Sfixed32. 3229 func consumeSfixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 3230 if wtyp != protowire.Fixed32Type { 3231 return protoreflect.Value{}, out, errUnknown 3232 } 3233 v, n := protowire.ConsumeFixed32(b) 3234 if n < 0 { 3235 return protoreflect.Value{}, out, errDecode 3236 } 3237 out.n = n 3238 return protoreflect.ValueOfInt32(int32(v)), out, nil 3239 } 3240 3241 var coderSfixed32Value = valueCoderFuncs{ 3242 size: sizeSfixed32Value, 3243 marshal: appendSfixed32Value, 3244 unmarshal: consumeSfixed32Value, 3245 merge: mergeScalarValue, 3246 } 3247 3248 // sizeSfixed32SliceValue returns the size of wire encoding a []int32 value as a repeated Sfixed32. 3249 func sizeSfixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 3250 list := listv.List() 3251 size = list.Len() * (tagsize + protowire.SizeFixed32()) 3252 return size 3253 } 3254 3255 // appendSfixed32SliceValue encodes a []int32 value as a repeated Sfixed32. 3256 func appendSfixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3257 list := listv.List() 3258 for i, llen := 0, list.Len(); i < llen; i++ { 3259 v := list.Get(i) 3260 b = protowire.AppendVarint(b, wiretag) 3261 b = protowire.AppendFixed32(b, uint32(v.Int())) 3262 } 3263 return b, nil 3264 } 3265 3266 // consumeSfixed32SliceValue wire decodes a []int32 value as a repeated Sfixed32. 3267 func consumeSfixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 3268 list := listv.List() 3269 if wtyp == protowire.BytesType { 3270 b, n := protowire.ConsumeBytes(b) 3271 if n < 0 { 3272 return protoreflect.Value{}, out, errDecode 3273 } 3274 for len(b) > 0 { 3275 v, n := protowire.ConsumeFixed32(b) 3276 if n < 0 { 3277 return protoreflect.Value{}, out, errDecode 3278 } 3279 list.Append(protoreflect.ValueOfInt32(int32(v))) 3280 b = b[n:] 3281 } 3282 out.n = n 3283 return listv, out, nil 3284 } 3285 if wtyp != protowire.Fixed32Type { 3286 return protoreflect.Value{}, out, errUnknown 3287 } 3288 v, n := protowire.ConsumeFixed32(b) 3289 if n < 0 { 3290 return protoreflect.Value{}, out, errDecode 3291 } 3292 list.Append(protoreflect.ValueOfInt32(int32(v))) 3293 out.n = n 3294 return listv, out, nil 3295 } 3296 3297 var coderSfixed32SliceValue = valueCoderFuncs{ 3298 size: sizeSfixed32SliceValue, 3299 marshal: appendSfixed32SliceValue, 3300 unmarshal: consumeSfixed32SliceValue, 3301 merge: mergeListValue, 3302 } 3303 3304 // sizeSfixed32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sfixed32. 3305 func sizeSfixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 3306 list := listv.List() 3307 llen := list.Len() 3308 if llen == 0 { 3309 return 0 3310 } 3311 n := llen * protowire.SizeFixed32() 3312 return tagsize + protowire.SizeBytes(n) 3313 } 3314 3315 // appendSfixed32PackedSliceValue encodes a []int32 value as a packed repeated Sfixed32. 3316 func appendSfixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3317 list := listv.List() 3318 llen := list.Len() 3319 if llen == 0 { 3320 return b, nil 3321 } 3322 b = protowire.AppendVarint(b, wiretag) 3323 n := llen * protowire.SizeFixed32() 3324 b = protowire.AppendVarint(b, uint64(n)) 3325 for i := 0; i < llen; i++ { 3326 v := list.Get(i) 3327 b = protowire.AppendFixed32(b, uint32(v.Int())) 3328 } 3329 return b, nil 3330 } 3331 3332 var coderSfixed32PackedSliceValue = valueCoderFuncs{ 3333 size: sizeSfixed32PackedSliceValue, 3334 marshal: appendSfixed32PackedSliceValue, 3335 unmarshal: consumeSfixed32SliceValue, 3336 merge: mergeListValue, 3337 } 3338 3339 // sizeFixed32 returns the size of wire encoding a uint32 pointer as a Fixed32. 3340 func sizeFixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3341 3342 return f.tagsize + protowire.SizeFixed32() 3343 } 3344 3345 // appendFixed32 wire encodes a uint32 pointer as a Fixed32. 3346 func appendFixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3347 v := *p.Uint32() 3348 b = protowire.AppendVarint(b, f.wiretag) 3349 b = protowire.AppendFixed32(b, v) 3350 return b, nil 3351 } 3352 3353 // consumeFixed32 wire decodes a uint32 pointer as a Fixed32. 3354 func consumeFixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3355 if wtyp != protowire.Fixed32Type { 3356 return out, errUnknown 3357 } 3358 v, n := protowire.ConsumeFixed32(b) 3359 if n < 0 { 3360 return out, errDecode 3361 } 3362 *p.Uint32() = v 3363 out.n = n 3364 return out, nil 3365 } 3366 3367 var coderFixed32 = pointerCoderFuncs{ 3368 size: sizeFixed32, 3369 marshal: appendFixed32, 3370 unmarshal: consumeFixed32, 3371 merge: mergeUint32, 3372 } 3373 3374 // sizeFixed32NoZero returns the size of wire encoding a uint32 pointer as a Fixed32. 3375 // The zero value is not encoded. 3376 func sizeFixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3377 v := *p.Uint32() 3378 if v == 0 { 3379 return 0 3380 } 3381 return f.tagsize + protowire.SizeFixed32() 3382 } 3383 3384 // appendFixed32NoZero wire encodes a uint32 pointer as a Fixed32. 3385 // The zero value is not encoded. 3386 func appendFixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3387 v := *p.Uint32() 3388 if v == 0 { 3389 return b, nil 3390 } 3391 b = protowire.AppendVarint(b, f.wiretag) 3392 b = protowire.AppendFixed32(b, v) 3393 return b, nil 3394 } 3395 3396 var coderFixed32NoZero = pointerCoderFuncs{ 3397 size: sizeFixed32NoZero, 3398 marshal: appendFixed32NoZero, 3399 unmarshal: consumeFixed32, 3400 merge: mergeUint32NoZero, 3401 } 3402 3403 // sizeFixed32Ptr returns the size of wire encoding a *uint32 pointer as a Fixed32. 3404 // It panics if the pointer is nil. 3405 func sizeFixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3406 return f.tagsize + protowire.SizeFixed32() 3407 } 3408 3409 // appendFixed32Ptr wire encodes a *uint32 pointer as a Fixed32. 3410 // It panics if the pointer is nil. 3411 func appendFixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3412 v := **p.Uint32Ptr() 3413 b = protowire.AppendVarint(b, f.wiretag) 3414 b = protowire.AppendFixed32(b, v) 3415 return b, nil 3416 } 3417 3418 // consumeFixed32Ptr wire decodes a *uint32 pointer as a Fixed32. 3419 func consumeFixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3420 if wtyp != protowire.Fixed32Type { 3421 return out, errUnknown 3422 } 3423 v, n := protowire.ConsumeFixed32(b) 3424 if n < 0 { 3425 return out, errDecode 3426 } 3427 vp := p.Uint32Ptr() 3428 if *vp == nil { 3429 *vp = new(uint32) 3430 } 3431 **vp = v 3432 out.n = n 3433 return out, nil 3434 } 3435 3436 var coderFixed32Ptr = pointerCoderFuncs{ 3437 size: sizeFixed32Ptr, 3438 marshal: appendFixed32Ptr, 3439 unmarshal: consumeFixed32Ptr, 3440 merge: mergeUint32Ptr, 3441 } 3442 3443 // sizeFixed32Slice returns the size of wire encoding a []uint32 pointer as a repeated Fixed32. 3444 func sizeFixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3445 s := *p.Uint32Slice() 3446 size = len(s) * (f.tagsize + protowire.SizeFixed32()) 3447 return size 3448 } 3449 3450 // appendFixed32Slice encodes a []uint32 pointer as a repeated Fixed32. 3451 func appendFixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3452 s := *p.Uint32Slice() 3453 for _, v := range s { 3454 b = protowire.AppendVarint(b, f.wiretag) 3455 b = protowire.AppendFixed32(b, v) 3456 } 3457 return b, nil 3458 } 3459 3460 // consumeFixed32Slice wire decodes a []uint32 pointer as a repeated Fixed32. 3461 func consumeFixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3462 sp := p.Uint32Slice() 3463 if wtyp == protowire.BytesType { 3464 s := *sp 3465 b, n := protowire.ConsumeBytes(b) 3466 if n < 0 { 3467 return out, errDecode 3468 } 3469 for len(b) > 0 { 3470 v, n := protowire.ConsumeFixed32(b) 3471 if n < 0 { 3472 return out, errDecode 3473 } 3474 s = append(s, v) 3475 b = b[n:] 3476 } 3477 *sp = s 3478 out.n = n 3479 return out, nil 3480 } 3481 if wtyp != protowire.Fixed32Type { 3482 return out, errUnknown 3483 } 3484 v, n := protowire.ConsumeFixed32(b) 3485 if n < 0 { 3486 return out, errDecode 3487 } 3488 *sp = append(*sp, v) 3489 out.n = n 3490 return out, nil 3491 } 3492 3493 var coderFixed32Slice = pointerCoderFuncs{ 3494 size: sizeFixed32Slice, 3495 marshal: appendFixed32Slice, 3496 unmarshal: consumeFixed32Slice, 3497 merge: mergeUint32Slice, 3498 } 3499 3500 // sizeFixed32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Fixed32. 3501 func sizeFixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3502 s := *p.Uint32Slice() 3503 if len(s) == 0 { 3504 return 0 3505 } 3506 n := len(s) * protowire.SizeFixed32() 3507 return f.tagsize + protowire.SizeBytes(n) 3508 } 3509 3510 // appendFixed32PackedSlice encodes a []uint32 pointer as a packed repeated Fixed32. 3511 func appendFixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3512 s := *p.Uint32Slice() 3513 if len(s) == 0 { 3514 return b, nil 3515 } 3516 b = protowire.AppendVarint(b, f.wiretag) 3517 n := len(s) * protowire.SizeFixed32() 3518 b = protowire.AppendVarint(b, uint64(n)) 3519 for _, v := range s { 3520 b = protowire.AppendFixed32(b, v) 3521 } 3522 return b, nil 3523 } 3524 3525 var coderFixed32PackedSlice = pointerCoderFuncs{ 3526 size: sizeFixed32PackedSlice, 3527 marshal: appendFixed32PackedSlice, 3528 unmarshal: consumeFixed32Slice, 3529 merge: mergeUint32Slice, 3530 } 3531 3532 // sizeFixed32Value returns the size of wire encoding a uint32 value as a Fixed32. 3533 func sizeFixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 3534 return tagsize + protowire.SizeFixed32() 3535 } 3536 3537 // appendFixed32Value encodes a uint32 value as a Fixed32. 3538 func appendFixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3539 b = protowire.AppendVarint(b, wiretag) 3540 b = protowire.AppendFixed32(b, uint32(v.Uint())) 3541 return b, nil 3542 } 3543 3544 // consumeFixed32Value decodes a uint32 value as a Fixed32. 3545 func consumeFixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 3546 if wtyp != protowire.Fixed32Type { 3547 return protoreflect.Value{}, out, errUnknown 3548 } 3549 v, n := protowire.ConsumeFixed32(b) 3550 if n < 0 { 3551 return protoreflect.Value{}, out, errDecode 3552 } 3553 out.n = n 3554 return protoreflect.ValueOfUint32(uint32(v)), out, nil 3555 } 3556 3557 var coderFixed32Value = valueCoderFuncs{ 3558 size: sizeFixed32Value, 3559 marshal: appendFixed32Value, 3560 unmarshal: consumeFixed32Value, 3561 merge: mergeScalarValue, 3562 } 3563 3564 // sizeFixed32SliceValue returns the size of wire encoding a []uint32 value as a repeated Fixed32. 3565 func sizeFixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 3566 list := listv.List() 3567 size = list.Len() * (tagsize + protowire.SizeFixed32()) 3568 return size 3569 } 3570 3571 // appendFixed32SliceValue encodes a []uint32 value as a repeated Fixed32. 3572 func appendFixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3573 list := listv.List() 3574 for i, llen := 0, list.Len(); i < llen; i++ { 3575 v := list.Get(i) 3576 b = protowire.AppendVarint(b, wiretag) 3577 b = protowire.AppendFixed32(b, uint32(v.Uint())) 3578 } 3579 return b, nil 3580 } 3581 3582 // consumeFixed32SliceValue wire decodes a []uint32 value as a repeated Fixed32. 3583 func consumeFixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 3584 list := listv.List() 3585 if wtyp == protowire.BytesType { 3586 b, n := protowire.ConsumeBytes(b) 3587 if n < 0 { 3588 return protoreflect.Value{}, out, errDecode 3589 } 3590 for len(b) > 0 { 3591 v, n := protowire.ConsumeFixed32(b) 3592 if n < 0 { 3593 return protoreflect.Value{}, out, errDecode 3594 } 3595 list.Append(protoreflect.ValueOfUint32(uint32(v))) 3596 b = b[n:] 3597 } 3598 out.n = n 3599 return listv, out, nil 3600 } 3601 if wtyp != protowire.Fixed32Type { 3602 return protoreflect.Value{}, out, errUnknown 3603 } 3604 v, n := protowire.ConsumeFixed32(b) 3605 if n < 0 { 3606 return protoreflect.Value{}, out, errDecode 3607 } 3608 list.Append(protoreflect.ValueOfUint32(uint32(v))) 3609 out.n = n 3610 return listv, out, nil 3611 } 3612 3613 var coderFixed32SliceValue = valueCoderFuncs{ 3614 size: sizeFixed32SliceValue, 3615 marshal: appendFixed32SliceValue, 3616 unmarshal: consumeFixed32SliceValue, 3617 merge: mergeListValue, 3618 } 3619 3620 // sizeFixed32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Fixed32. 3621 func sizeFixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 3622 list := listv.List() 3623 llen := list.Len() 3624 if llen == 0 { 3625 return 0 3626 } 3627 n := llen * protowire.SizeFixed32() 3628 return tagsize + protowire.SizeBytes(n) 3629 } 3630 3631 // appendFixed32PackedSliceValue encodes a []uint32 value as a packed repeated Fixed32. 3632 func appendFixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3633 list := listv.List() 3634 llen := list.Len() 3635 if llen == 0 { 3636 return b, nil 3637 } 3638 b = protowire.AppendVarint(b, wiretag) 3639 n := llen * protowire.SizeFixed32() 3640 b = protowire.AppendVarint(b, uint64(n)) 3641 for i := 0; i < llen; i++ { 3642 v := list.Get(i) 3643 b = protowire.AppendFixed32(b, uint32(v.Uint())) 3644 } 3645 return b, nil 3646 } 3647 3648 var coderFixed32PackedSliceValue = valueCoderFuncs{ 3649 size: sizeFixed32PackedSliceValue, 3650 marshal: appendFixed32PackedSliceValue, 3651 unmarshal: consumeFixed32SliceValue, 3652 merge: mergeListValue, 3653 } 3654 3655 // sizeFloat returns the size of wire encoding a float32 pointer as a Float. 3656 func sizeFloat(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3657 3658 return f.tagsize + protowire.SizeFixed32() 3659 } 3660 3661 // appendFloat wire encodes a float32 pointer as a Float. 3662 func appendFloat(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3663 v := *p.Float32() 3664 b = protowire.AppendVarint(b, f.wiretag) 3665 b = protowire.AppendFixed32(b, math.Float32bits(v)) 3666 return b, nil 3667 } 3668 3669 // consumeFloat wire decodes a float32 pointer as a Float. 3670 func consumeFloat(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3671 if wtyp != protowire.Fixed32Type { 3672 return out, errUnknown 3673 } 3674 v, n := protowire.ConsumeFixed32(b) 3675 if n < 0 { 3676 return out, errDecode 3677 } 3678 *p.Float32() = math.Float32frombits(v) 3679 out.n = n 3680 return out, nil 3681 } 3682 3683 var coderFloat = pointerCoderFuncs{ 3684 size: sizeFloat, 3685 marshal: appendFloat, 3686 unmarshal: consumeFloat, 3687 merge: mergeFloat32, 3688 } 3689 3690 // sizeFloatNoZero returns the size of wire encoding a float32 pointer as a Float. 3691 // The zero value is not encoded. 3692 func sizeFloatNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3693 v := *p.Float32() 3694 if v == 0 && !math.Signbit(float64(v)) { 3695 return 0 3696 } 3697 return f.tagsize + protowire.SizeFixed32() 3698 } 3699 3700 // appendFloatNoZero wire encodes a float32 pointer as a Float. 3701 // The zero value is not encoded. 3702 func appendFloatNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3703 v := *p.Float32() 3704 if v == 0 && !math.Signbit(float64(v)) { 3705 return b, nil 3706 } 3707 b = protowire.AppendVarint(b, f.wiretag) 3708 b = protowire.AppendFixed32(b, math.Float32bits(v)) 3709 return b, nil 3710 } 3711 3712 var coderFloatNoZero = pointerCoderFuncs{ 3713 size: sizeFloatNoZero, 3714 marshal: appendFloatNoZero, 3715 unmarshal: consumeFloat, 3716 merge: mergeFloat32NoZero, 3717 } 3718 3719 // sizeFloatPtr returns the size of wire encoding a *float32 pointer as a Float. 3720 // It panics if the pointer is nil. 3721 func sizeFloatPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3722 return f.tagsize + protowire.SizeFixed32() 3723 } 3724 3725 // appendFloatPtr wire encodes a *float32 pointer as a Float. 3726 // It panics if the pointer is nil. 3727 func appendFloatPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3728 v := **p.Float32Ptr() 3729 b = protowire.AppendVarint(b, f.wiretag) 3730 b = protowire.AppendFixed32(b, math.Float32bits(v)) 3731 return b, nil 3732 } 3733 3734 // consumeFloatPtr wire decodes a *float32 pointer as a Float. 3735 func consumeFloatPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3736 if wtyp != protowire.Fixed32Type { 3737 return out, errUnknown 3738 } 3739 v, n := protowire.ConsumeFixed32(b) 3740 if n < 0 { 3741 return out, errDecode 3742 } 3743 vp := p.Float32Ptr() 3744 if *vp == nil { 3745 *vp = new(float32) 3746 } 3747 **vp = math.Float32frombits(v) 3748 out.n = n 3749 return out, nil 3750 } 3751 3752 var coderFloatPtr = pointerCoderFuncs{ 3753 size: sizeFloatPtr, 3754 marshal: appendFloatPtr, 3755 unmarshal: consumeFloatPtr, 3756 merge: mergeFloat32Ptr, 3757 } 3758 3759 // sizeFloatSlice returns the size of wire encoding a []float32 pointer as a repeated Float. 3760 func sizeFloatSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3761 s := *p.Float32Slice() 3762 size = len(s) * (f.tagsize + protowire.SizeFixed32()) 3763 return size 3764 } 3765 3766 // appendFloatSlice encodes a []float32 pointer as a repeated Float. 3767 func appendFloatSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3768 s := *p.Float32Slice() 3769 for _, v := range s { 3770 b = protowire.AppendVarint(b, f.wiretag) 3771 b = protowire.AppendFixed32(b, math.Float32bits(v)) 3772 } 3773 return b, nil 3774 } 3775 3776 // consumeFloatSlice wire decodes a []float32 pointer as a repeated Float. 3777 func consumeFloatSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3778 sp := p.Float32Slice() 3779 if wtyp == protowire.BytesType { 3780 s := *sp 3781 b, n := protowire.ConsumeBytes(b) 3782 if n < 0 { 3783 return out, errDecode 3784 } 3785 for len(b) > 0 { 3786 v, n := protowire.ConsumeFixed32(b) 3787 if n < 0 { 3788 return out, errDecode 3789 } 3790 s = append(s, math.Float32frombits(v)) 3791 b = b[n:] 3792 } 3793 *sp = s 3794 out.n = n 3795 return out, nil 3796 } 3797 if wtyp != protowire.Fixed32Type { 3798 return out, errUnknown 3799 } 3800 v, n := protowire.ConsumeFixed32(b) 3801 if n < 0 { 3802 return out, errDecode 3803 } 3804 *sp = append(*sp, math.Float32frombits(v)) 3805 out.n = n 3806 return out, nil 3807 } 3808 3809 var coderFloatSlice = pointerCoderFuncs{ 3810 size: sizeFloatSlice, 3811 marshal: appendFloatSlice, 3812 unmarshal: consumeFloatSlice, 3813 merge: mergeFloat32Slice, 3814 } 3815 3816 // sizeFloatPackedSlice returns the size of wire encoding a []float32 pointer as a packed repeated Float. 3817 func sizeFloatPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3818 s := *p.Float32Slice() 3819 if len(s) == 0 { 3820 return 0 3821 } 3822 n := len(s) * protowire.SizeFixed32() 3823 return f.tagsize + protowire.SizeBytes(n) 3824 } 3825 3826 // appendFloatPackedSlice encodes a []float32 pointer as a packed repeated Float. 3827 func appendFloatPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3828 s := *p.Float32Slice() 3829 if len(s) == 0 { 3830 return b, nil 3831 } 3832 b = protowire.AppendVarint(b, f.wiretag) 3833 n := len(s) * protowire.SizeFixed32() 3834 b = protowire.AppendVarint(b, uint64(n)) 3835 for _, v := range s { 3836 b = protowire.AppendFixed32(b, math.Float32bits(v)) 3837 } 3838 return b, nil 3839 } 3840 3841 var coderFloatPackedSlice = pointerCoderFuncs{ 3842 size: sizeFloatPackedSlice, 3843 marshal: appendFloatPackedSlice, 3844 unmarshal: consumeFloatSlice, 3845 merge: mergeFloat32Slice, 3846 } 3847 3848 // sizeFloatValue returns the size of wire encoding a float32 value as a Float. 3849 func sizeFloatValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { 3850 return tagsize + protowire.SizeFixed32() 3851 } 3852 3853 // appendFloatValue encodes a float32 value as a Float. 3854 func appendFloatValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3855 b = protowire.AppendVarint(b, wiretag) 3856 b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) 3857 return b, nil 3858 } 3859 3860 // consumeFloatValue decodes a float32 value as a Float. 3861 func consumeFloatValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 3862 if wtyp != protowire.Fixed32Type { 3863 return protoreflect.Value{}, out, errUnknown 3864 } 3865 v, n := protowire.ConsumeFixed32(b) 3866 if n < 0 { 3867 return protoreflect.Value{}, out, errDecode 3868 } 3869 out.n = n 3870 return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), out, nil 3871 } 3872 3873 var coderFloatValue = valueCoderFuncs{ 3874 size: sizeFloatValue, 3875 marshal: appendFloatValue, 3876 unmarshal: consumeFloatValue, 3877 merge: mergeScalarValue, 3878 } 3879 3880 // sizeFloatSliceValue returns the size of wire encoding a []float32 value as a repeated Float. 3881 func sizeFloatSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 3882 list := listv.List() 3883 size = list.Len() * (tagsize + protowire.SizeFixed32()) 3884 return size 3885 } 3886 3887 // appendFloatSliceValue encodes a []float32 value as a repeated Float. 3888 func appendFloatSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3889 list := listv.List() 3890 for i, llen := 0, list.Len(); i < llen; i++ { 3891 v := list.Get(i) 3892 b = protowire.AppendVarint(b, wiretag) 3893 b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) 3894 } 3895 return b, nil 3896 } 3897 3898 // consumeFloatSliceValue wire decodes a []float32 value as a repeated Float. 3899 func consumeFloatSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 3900 list := listv.List() 3901 if wtyp == protowire.BytesType { 3902 b, n := protowire.ConsumeBytes(b) 3903 if n < 0 { 3904 return protoreflect.Value{}, out, errDecode 3905 } 3906 for len(b) > 0 { 3907 v, n := protowire.ConsumeFixed32(b) 3908 if n < 0 { 3909 return protoreflect.Value{}, out, errDecode 3910 } 3911 list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) 3912 b = b[n:] 3913 } 3914 out.n = n 3915 return listv, out, nil 3916 } 3917 if wtyp != protowire.Fixed32Type { 3918 return protoreflect.Value{}, out, errUnknown 3919 } 3920 v, n := protowire.ConsumeFixed32(b) 3921 if n < 0 { 3922 return protoreflect.Value{}, out, errDecode 3923 } 3924 list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) 3925 out.n = n 3926 return listv, out, nil 3927 } 3928 3929 var coderFloatSliceValue = valueCoderFuncs{ 3930 size: sizeFloatSliceValue, 3931 marshal: appendFloatSliceValue, 3932 unmarshal: consumeFloatSliceValue, 3933 merge: mergeListValue, 3934 } 3935 3936 // sizeFloatPackedSliceValue returns the size of wire encoding a []float32 value as a packed repeated Float. 3937 func sizeFloatPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 3938 list := listv.List() 3939 llen := list.Len() 3940 if llen == 0 { 3941 return 0 3942 } 3943 n := llen * protowire.SizeFixed32() 3944 return tagsize + protowire.SizeBytes(n) 3945 } 3946 3947 // appendFloatPackedSliceValue encodes a []float32 value as a packed repeated Float. 3948 func appendFloatPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 3949 list := listv.List() 3950 llen := list.Len() 3951 if llen == 0 { 3952 return b, nil 3953 } 3954 b = protowire.AppendVarint(b, wiretag) 3955 n := llen * protowire.SizeFixed32() 3956 b = protowire.AppendVarint(b, uint64(n)) 3957 for i := 0; i < llen; i++ { 3958 v := list.Get(i) 3959 b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) 3960 } 3961 return b, nil 3962 } 3963 3964 var coderFloatPackedSliceValue = valueCoderFuncs{ 3965 size: sizeFloatPackedSliceValue, 3966 marshal: appendFloatPackedSliceValue, 3967 unmarshal: consumeFloatSliceValue, 3968 merge: mergeListValue, 3969 } 3970 3971 // sizeSfixed64 returns the size of wire encoding a int64 pointer as a Sfixed64. 3972 func sizeSfixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 3973 3974 return f.tagsize + protowire.SizeFixed64() 3975 } 3976 3977 // appendSfixed64 wire encodes a int64 pointer as a Sfixed64. 3978 func appendSfixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 3979 v := *p.Int64() 3980 b = protowire.AppendVarint(b, f.wiretag) 3981 b = protowire.AppendFixed64(b, uint64(v)) 3982 return b, nil 3983 } 3984 3985 // consumeSfixed64 wire decodes a int64 pointer as a Sfixed64. 3986 func consumeSfixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 3987 if wtyp != protowire.Fixed64Type { 3988 return out, errUnknown 3989 } 3990 v, n := protowire.ConsumeFixed64(b) 3991 if n < 0 { 3992 return out, errDecode 3993 } 3994 *p.Int64() = int64(v) 3995 out.n = n 3996 return out, nil 3997 } 3998 3999 var coderSfixed64 = pointerCoderFuncs{ 4000 size: sizeSfixed64, 4001 marshal: appendSfixed64, 4002 unmarshal: consumeSfixed64, 4003 merge: mergeInt64, 4004 } 4005 4006 // sizeSfixed64NoZero returns the size of wire encoding a int64 pointer as a Sfixed64. 4007 // The zero value is not encoded. 4008 func sizeSfixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4009 v := *p.Int64() 4010 if v == 0 { 4011 return 0 4012 } 4013 return f.tagsize + protowire.SizeFixed64() 4014 } 4015 4016 // appendSfixed64NoZero wire encodes a int64 pointer as a Sfixed64. 4017 // The zero value is not encoded. 4018 func appendSfixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4019 v := *p.Int64() 4020 if v == 0 { 4021 return b, nil 4022 } 4023 b = protowire.AppendVarint(b, f.wiretag) 4024 b = protowire.AppendFixed64(b, uint64(v)) 4025 return b, nil 4026 } 4027 4028 var coderSfixed64NoZero = pointerCoderFuncs{ 4029 size: sizeSfixed64NoZero, 4030 marshal: appendSfixed64NoZero, 4031 unmarshal: consumeSfixed64, 4032 merge: mergeInt64NoZero, 4033 } 4034 4035 // sizeSfixed64Ptr returns the size of wire encoding a *int64 pointer as a Sfixed64. 4036 // It panics if the pointer is nil. 4037 func sizeSfixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4038 return f.tagsize + protowire.SizeFixed64() 4039 } 4040 4041 // appendSfixed64Ptr wire encodes a *int64 pointer as a Sfixed64. 4042 // It panics if the pointer is nil. 4043 func appendSfixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4044 v := **p.Int64Ptr() 4045 b = protowire.AppendVarint(b, f.wiretag) 4046 b = protowire.AppendFixed64(b, uint64(v)) 4047 return b, nil 4048 } 4049 4050 // consumeSfixed64Ptr wire decodes a *int64 pointer as a Sfixed64. 4051 func consumeSfixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4052 if wtyp != protowire.Fixed64Type { 4053 return out, errUnknown 4054 } 4055 v, n := protowire.ConsumeFixed64(b) 4056 if n < 0 { 4057 return out, errDecode 4058 } 4059 vp := p.Int64Ptr() 4060 if *vp == nil { 4061 *vp = new(int64) 4062 } 4063 **vp = int64(v) 4064 out.n = n 4065 return out, nil 4066 } 4067 4068 var coderSfixed64Ptr = pointerCoderFuncs{ 4069 size: sizeSfixed64Ptr, 4070 marshal: appendSfixed64Ptr, 4071 unmarshal: consumeSfixed64Ptr, 4072 merge: mergeInt64Ptr, 4073 } 4074 4075 // sizeSfixed64Slice returns the size of wire encoding a []int64 pointer as a repeated Sfixed64. 4076 func sizeSfixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4077 s := *p.Int64Slice() 4078 size = len(s) * (f.tagsize + protowire.SizeFixed64()) 4079 return size 4080 } 4081 4082 // appendSfixed64Slice encodes a []int64 pointer as a repeated Sfixed64. 4083 func appendSfixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4084 s := *p.Int64Slice() 4085 for _, v := range s { 4086 b = protowire.AppendVarint(b, f.wiretag) 4087 b = protowire.AppendFixed64(b, uint64(v)) 4088 } 4089 return b, nil 4090 } 4091 4092 // consumeSfixed64Slice wire decodes a []int64 pointer as a repeated Sfixed64. 4093 func consumeSfixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4094 sp := p.Int64Slice() 4095 if wtyp == protowire.BytesType { 4096 s := *sp 4097 b, n := protowire.ConsumeBytes(b) 4098 if n < 0 { 4099 return out, errDecode 4100 } 4101 for len(b) > 0 { 4102 v, n := protowire.ConsumeFixed64(b) 4103 if n < 0 { 4104 return out, errDecode 4105 } 4106 s = append(s, int64(v)) 4107 b = b[n:] 4108 } 4109 *sp = s 4110 out.n = n 4111 return out, nil 4112 } 4113 if wtyp != protowire.Fixed64Type { 4114 return out, errUnknown 4115 } 4116 v, n := protowire.ConsumeFixed64(b) 4117 if n < 0 { 4118 return out, errDecode 4119 } 4120 *sp = append(*sp, int64(v)) 4121 out.n = n 4122 return out, nil 4123 } 4124 4125 var coderSfixed64Slice = pointerCoderFuncs{ 4126 size: sizeSfixed64Slice, 4127 marshal: appendSfixed64Slice, 4128 unmarshal: consumeSfixed64Slice, 4129 merge: mergeInt64Slice, 4130 } 4131 4132 // sizeSfixed64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sfixed64. 4133 func sizeSfixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4134 s := *p.Int64Slice() 4135 if len(s) == 0 { 4136 return 0 4137 } 4138 n := len(s) * protowire.SizeFixed64() 4139 return f.tagsize + protowire.SizeBytes(n) 4140 } 4141 4142 // appendSfixed64PackedSlice encodes a []int64 pointer as a packed repeated Sfixed64. 4143 func appendSfixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4144 s := *p.Int64Slice() 4145 if len(s) == 0 { 4146 return b, nil 4147 } 4148 b = protowire.AppendVarint(b, f.wiretag) 4149 n := len(s) * protowire.SizeFixed64() 4150 b = protowire.AppendVarint(b, uint64(n)) 4151 for _, v := range s { 4152 b = protowire.AppendFixed64(b, uint64(v)) 4153 } 4154 return b, nil 4155 } 4156 4157 var coderSfixed64PackedSlice = pointerCoderFuncs{ 4158 size: sizeSfixed64PackedSlice, 4159 marshal: appendSfixed64PackedSlice, 4160 unmarshal: consumeSfixed64Slice, 4161 merge: mergeInt64Slice, 4162 } 4163 4164 // sizeSfixed64Value returns the size of wire encoding a int64 value as a Sfixed64. 4165 func sizeSfixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 4166 return tagsize + protowire.SizeFixed64() 4167 } 4168 4169 // appendSfixed64Value encodes a int64 value as a Sfixed64. 4170 func appendSfixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4171 b = protowire.AppendVarint(b, wiretag) 4172 b = protowire.AppendFixed64(b, uint64(v.Int())) 4173 return b, nil 4174 } 4175 4176 // consumeSfixed64Value decodes a int64 value as a Sfixed64. 4177 func consumeSfixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 4178 if wtyp != protowire.Fixed64Type { 4179 return protoreflect.Value{}, out, errUnknown 4180 } 4181 v, n := protowire.ConsumeFixed64(b) 4182 if n < 0 { 4183 return protoreflect.Value{}, out, errDecode 4184 } 4185 out.n = n 4186 return protoreflect.ValueOfInt64(int64(v)), out, nil 4187 } 4188 4189 var coderSfixed64Value = valueCoderFuncs{ 4190 size: sizeSfixed64Value, 4191 marshal: appendSfixed64Value, 4192 unmarshal: consumeSfixed64Value, 4193 merge: mergeScalarValue, 4194 } 4195 4196 // sizeSfixed64SliceValue returns the size of wire encoding a []int64 value as a repeated Sfixed64. 4197 func sizeSfixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 4198 list := listv.List() 4199 size = list.Len() * (tagsize + protowire.SizeFixed64()) 4200 return size 4201 } 4202 4203 // appendSfixed64SliceValue encodes a []int64 value as a repeated Sfixed64. 4204 func appendSfixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4205 list := listv.List() 4206 for i, llen := 0, list.Len(); i < llen; i++ { 4207 v := list.Get(i) 4208 b = protowire.AppendVarint(b, wiretag) 4209 b = protowire.AppendFixed64(b, uint64(v.Int())) 4210 } 4211 return b, nil 4212 } 4213 4214 // consumeSfixed64SliceValue wire decodes a []int64 value as a repeated Sfixed64. 4215 func consumeSfixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 4216 list := listv.List() 4217 if wtyp == protowire.BytesType { 4218 b, n := protowire.ConsumeBytes(b) 4219 if n < 0 { 4220 return protoreflect.Value{}, out, errDecode 4221 } 4222 for len(b) > 0 { 4223 v, n := protowire.ConsumeFixed64(b) 4224 if n < 0 { 4225 return protoreflect.Value{}, out, errDecode 4226 } 4227 list.Append(protoreflect.ValueOfInt64(int64(v))) 4228 b = b[n:] 4229 } 4230 out.n = n 4231 return listv, out, nil 4232 } 4233 if wtyp != protowire.Fixed64Type { 4234 return protoreflect.Value{}, out, errUnknown 4235 } 4236 v, n := protowire.ConsumeFixed64(b) 4237 if n < 0 { 4238 return protoreflect.Value{}, out, errDecode 4239 } 4240 list.Append(protoreflect.ValueOfInt64(int64(v))) 4241 out.n = n 4242 return listv, out, nil 4243 } 4244 4245 var coderSfixed64SliceValue = valueCoderFuncs{ 4246 size: sizeSfixed64SliceValue, 4247 marshal: appendSfixed64SliceValue, 4248 unmarshal: consumeSfixed64SliceValue, 4249 merge: mergeListValue, 4250 } 4251 4252 // sizeSfixed64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sfixed64. 4253 func sizeSfixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 4254 list := listv.List() 4255 llen := list.Len() 4256 if llen == 0 { 4257 return 0 4258 } 4259 n := llen * protowire.SizeFixed64() 4260 return tagsize + protowire.SizeBytes(n) 4261 } 4262 4263 // appendSfixed64PackedSliceValue encodes a []int64 value as a packed repeated Sfixed64. 4264 func appendSfixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4265 list := listv.List() 4266 llen := list.Len() 4267 if llen == 0 { 4268 return b, nil 4269 } 4270 b = protowire.AppendVarint(b, wiretag) 4271 n := llen * protowire.SizeFixed64() 4272 b = protowire.AppendVarint(b, uint64(n)) 4273 for i := 0; i < llen; i++ { 4274 v := list.Get(i) 4275 b = protowire.AppendFixed64(b, uint64(v.Int())) 4276 } 4277 return b, nil 4278 } 4279 4280 var coderSfixed64PackedSliceValue = valueCoderFuncs{ 4281 size: sizeSfixed64PackedSliceValue, 4282 marshal: appendSfixed64PackedSliceValue, 4283 unmarshal: consumeSfixed64SliceValue, 4284 merge: mergeListValue, 4285 } 4286 4287 // sizeFixed64 returns the size of wire encoding a uint64 pointer as a Fixed64. 4288 func sizeFixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4289 4290 return f.tagsize + protowire.SizeFixed64() 4291 } 4292 4293 // appendFixed64 wire encodes a uint64 pointer as a Fixed64. 4294 func appendFixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4295 v := *p.Uint64() 4296 b = protowire.AppendVarint(b, f.wiretag) 4297 b = protowire.AppendFixed64(b, v) 4298 return b, nil 4299 } 4300 4301 // consumeFixed64 wire decodes a uint64 pointer as a Fixed64. 4302 func consumeFixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4303 if wtyp != protowire.Fixed64Type { 4304 return out, errUnknown 4305 } 4306 v, n := protowire.ConsumeFixed64(b) 4307 if n < 0 { 4308 return out, errDecode 4309 } 4310 *p.Uint64() = v 4311 out.n = n 4312 return out, nil 4313 } 4314 4315 var coderFixed64 = pointerCoderFuncs{ 4316 size: sizeFixed64, 4317 marshal: appendFixed64, 4318 unmarshal: consumeFixed64, 4319 merge: mergeUint64, 4320 } 4321 4322 // sizeFixed64NoZero returns the size of wire encoding a uint64 pointer as a Fixed64. 4323 // The zero value is not encoded. 4324 func sizeFixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4325 v := *p.Uint64() 4326 if v == 0 { 4327 return 0 4328 } 4329 return f.tagsize + protowire.SizeFixed64() 4330 } 4331 4332 // appendFixed64NoZero wire encodes a uint64 pointer as a Fixed64. 4333 // The zero value is not encoded. 4334 func appendFixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4335 v := *p.Uint64() 4336 if v == 0 { 4337 return b, nil 4338 } 4339 b = protowire.AppendVarint(b, f.wiretag) 4340 b = protowire.AppendFixed64(b, v) 4341 return b, nil 4342 } 4343 4344 var coderFixed64NoZero = pointerCoderFuncs{ 4345 size: sizeFixed64NoZero, 4346 marshal: appendFixed64NoZero, 4347 unmarshal: consumeFixed64, 4348 merge: mergeUint64NoZero, 4349 } 4350 4351 // sizeFixed64Ptr returns the size of wire encoding a *uint64 pointer as a Fixed64. 4352 // It panics if the pointer is nil. 4353 func sizeFixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4354 return f.tagsize + protowire.SizeFixed64() 4355 } 4356 4357 // appendFixed64Ptr wire encodes a *uint64 pointer as a Fixed64. 4358 // It panics if the pointer is nil. 4359 func appendFixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4360 v := **p.Uint64Ptr() 4361 b = protowire.AppendVarint(b, f.wiretag) 4362 b = protowire.AppendFixed64(b, v) 4363 return b, nil 4364 } 4365 4366 // consumeFixed64Ptr wire decodes a *uint64 pointer as a Fixed64. 4367 func consumeFixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4368 if wtyp != protowire.Fixed64Type { 4369 return out, errUnknown 4370 } 4371 v, n := protowire.ConsumeFixed64(b) 4372 if n < 0 { 4373 return out, errDecode 4374 } 4375 vp := p.Uint64Ptr() 4376 if *vp == nil { 4377 *vp = new(uint64) 4378 } 4379 **vp = v 4380 out.n = n 4381 return out, nil 4382 } 4383 4384 var coderFixed64Ptr = pointerCoderFuncs{ 4385 size: sizeFixed64Ptr, 4386 marshal: appendFixed64Ptr, 4387 unmarshal: consumeFixed64Ptr, 4388 merge: mergeUint64Ptr, 4389 } 4390 4391 // sizeFixed64Slice returns the size of wire encoding a []uint64 pointer as a repeated Fixed64. 4392 func sizeFixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4393 s := *p.Uint64Slice() 4394 size = len(s) * (f.tagsize + protowire.SizeFixed64()) 4395 return size 4396 } 4397 4398 // appendFixed64Slice encodes a []uint64 pointer as a repeated Fixed64. 4399 func appendFixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4400 s := *p.Uint64Slice() 4401 for _, v := range s { 4402 b = protowire.AppendVarint(b, f.wiretag) 4403 b = protowire.AppendFixed64(b, v) 4404 } 4405 return b, nil 4406 } 4407 4408 // consumeFixed64Slice wire decodes a []uint64 pointer as a repeated Fixed64. 4409 func consumeFixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4410 sp := p.Uint64Slice() 4411 if wtyp == protowire.BytesType { 4412 s := *sp 4413 b, n := protowire.ConsumeBytes(b) 4414 if n < 0 { 4415 return out, errDecode 4416 } 4417 for len(b) > 0 { 4418 v, n := protowire.ConsumeFixed64(b) 4419 if n < 0 { 4420 return out, errDecode 4421 } 4422 s = append(s, v) 4423 b = b[n:] 4424 } 4425 *sp = s 4426 out.n = n 4427 return out, nil 4428 } 4429 if wtyp != protowire.Fixed64Type { 4430 return out, errUnknown 4431 } 4432 v, n := protowire.ConsumeFixed64(b) 4433 if n < 0 { 4434 return out, errDecode 4435 } 4436 *sp = append(*sp, v) 4437 out.n = n 4438 return out, nil 4439 } 4440 4441 var coderFixed64Slice = pointerCoderFuncs{ 4442 size: sizeFixed64Slice, 4443 marshal: appendFixed64Slice, 4444 unmarshal: consumeFixed64Slice, 4445 merge: mergeUint64Slice, 4446 } 4447 4448 // sizeFixed64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Fixed64. 4449 func sizeFixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4450 s := *p.Uint64Slice() 4451 if len(s) == 0 { 4452 return 0 4453 } 4454 n := len(s) * protowire.SizeFixed64() 4455 return f.tagsize + protowire.SizeBytes(n) 4456 } 4457 4458 // appendFixed64PackedSlice encodes a []uint64 pointer as a packed repeated Fixed64. 4459 func appendFixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4460 s := *p.Uint64Slice() 4461 if len(s) == 0 { 4462 return b, nil 4463 } 4464 b = protowire.AppendVarint(b, f.wiretag) 4465 n := len(s) * protowire.SizeFixed64() 4466 b = protowire.AppendVarint(b, uint64(n)) 4467 for _, v := range s { 4468 b = protowire.AppendFixed64(b, v) 4469 } 4470 return b, nil 4471 } 4472 4473 var coderFixed64PackedSlice = pointerCoderFuncs{ 4474 size: sizeFixed64PackedSlice, 4475 marshal: appendFixed64PackedSlice, 4476 unmarshal: consumeFixed64Slice, 4477 merge: mergeUint64Slice, 4478 } 4479 4480 // sizeFixed64Value returns the size of wire encoding a uint64 value as a Fixed64. 4481 func sizeFixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { 4482 return tagsize + protowire.SizeFixed64() 4483 } 4484 4485 // appendFixed64Value encodes a uint64 value as a Fixed64. 4486 func appendFixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4487 b = protowire.AppendVarint(b, wiretag) 4488 b = protowire.AppendFixed64(b, v.Uint()) 4489 return b, nil 4490 } 4491 4492 // consumeFixed64Value decodes a uint64 value as a Fixed64. 4493 func consumeFixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 4494 if wtyp != protowire.Fixed64Type { 4495 return protoreflect.Value{}, out, errUnknown 4496 } 4497 v, n := protowire.ConsumeFixed64(b) 4498 if n < 0 { 4499 return protoreflect.Value{}, out, errDecode 4500 } 4501 out.n = n 4502 return protoreflect.ValueOfUint64(v), out, nil 4503 } 4504 4505 var coderFixed64Value = valueCoderFuncs{ 4506 size: sizeFixed64Value, 4507 marshal: appendFixed64Value, 4508 unmarshal: consumeFixed64Value, 4509 merge: mergeScalarValue, 4510 } 4511 4512 // sizeFixed64SliceValue returns the size of wire encoding a []uint64 value as a repeated Fixed64. 4513 func sizeFixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 4514 list := listv.List() 4515 size = list.Len() * (tagsize + protowire.SizeFixed64()) 4516 return size 4517 } 4518 4519 // appendFixed64SliceValue encodes a []uint64 value as a repeated Fixed64. 4520 func appendFixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4521 list := listv.List() 4522 for i, llen := 0, list.Len(); i < llen; i++ { 4523 v := list.Get(i) 4524 b = protowire.AppendVarint(b, wiretag) 4525 b = protowire.AppendFixed64(b, v.Uint()) 4526 } 4527 return b, nil 4528 } 4529 4530 // consumeFixed64SliceValue wire decodes a []uint64 value as a repeated Fixed64. 4531 func consumeFixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 4532 list := listv.List() 4533 if wtyp == protowire.BytesType { 4534 b, n := protowire.ConsumeBytes(b) 4535 if n < 0 { 4536 return protoreflect.Value{}, out, errDecode 4537 } 4538 for len(b) > 0 { 4539 v, n := protowire.ConsumeFixed64(b) 4540 if n < 0 { 4541 return protoreflect.Value{}, out, errDecode 4542 } 4543 list.Append(protoreflect.ValueOfUint64(v)) 4544 b = b[n:] 4545 } 4546 out.n = n 4547 return listv, out, nil 4548 } 4549 if wtyp != protowire.Fixed64Type { 4550 return protoreflect.Value{}, out, errUnknown 4551 } 4552 v, n := protowire.ConsumeFixed64(b) 4553 if n < 0 { 4554 return protoreflect.Value{}, out, errDecode 4555 } 4556 list.Append(protoreflect.ValueOfUint64(v)) 4557 out.n = n 4558 return listv, out, nil 4559 } 4560 4561 var coderFixed64SliceValue = valueCoderFuncs{ 4562 size: sizeFixed64SliceValue, 4563 marshal: appendFixed64SliceValue, 4564 unmarshal: consumeFixed64SliceValue, 4565 merge: mergeListValue, 4566 } 4567 4568 // sizeFixed64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Fixed64. 4569 func sizeFixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 4570 list := listv.List() 4571 llen := list.Len() 4572 if llen == 0 { 4573 return 0 4574 } 4575 n := llen * protowire.SizeFixed64() 4576 return tagsize + protowire.SizeBytes(n) 4577 } 4578 4579 // appendFixed64PackedSliceValue encodes a []uint64 value as a packed repeated Fixed64. 4580 func appendFixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4581 list := listv.List() 4582 llen := list.Len() 4583 if llen == 0 { 4584 return b, nil 4585 } 4586 b = protowire.AppendVarint(b, wiretag) 4587 n := llen * protowire.SizeFixed64() 4588 b = protowire.AppendVarint(b, uint64(n)) 4589 for i := 0; i < llen; i++ { 4590 v := list.Get(i) 4591 b = protowire.AppendFixed64(b, v.Uint()) 4592 } 4593 return b, nil 4594 } 4595 4596 var coderFixed64PackedSliceValue = valueCoderFuncs{ 4597 size: sizeFixed64PackedSliceValue, 4598 marshal: appendFixed64PackedSliceValue, 4599 unmarshal: consumeFixed64SliceValue, 4600 merge: mergeListValue, 4601 } 4602 4603 // sizeDouble returns the size of wire encoding a float64 pointer as a Double. 4604 func sizeDouble(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4605 4606 return f.tagsize + protowire.SizeFixed64() 4607 } 4608 4609 // appendDouble wire encodes a float64 pointer as a Double. 4610 func appendDouble(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4611 v := *p.Float64() 4612 b = protowire.AppendVarint(b, f.wiretag) 4613 b = protowire.AppendFixed64(b, math.Float64bits(v)) 4614 return b, nil 4615 } 4616 4617 // consumeDouble wire decodes a float64 pointer as a Double. 4618 func consumeDouble(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4619 if wtyp != protowire.Fixed64Type { 4620 return out, errUnknown 4621 } 4622 v, n := protowire.ConsumeFixed64(b) 4623 if n < 0 { 4624 return out, errDecode 4625 } 4626 *p.Float64() = math.Float64frombits(v) 4627 out.n = n 4628 return out, nil 4629 } 4630 4631 var coderDouble = pointerCoderFuncs{ 4632 size: sizeDouble, 4633 marshal: appendDouble, 4634 unmarshal: consumeDouble, 4635 merge: mergeFloat64, 4636 } 4637 4638 // sizeDoubleNoZero returns the size of wire encoding a float64 pointer as a Double. 4639 // The zero value is not encoded. 4640 func sizeDoubleNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4641 v := *p.Float64() 4642 if v == 0 && !math.Signbit(float64(v)) { 4643 return 0 4644 } 4645 return f.tagsize + protowire.SizeFixed64() 4646 } 4647 4648 // appendDoubleNoZero wire encodes a float64 pointer as a Double. 4649 // The zero value is not encoded. 4650 func appendDoubleNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4651 v := *p.Float64() 4652 if v == 0 && !math.Signbit(float64(v)) { 4653 return b, nil 4654 } 4655 b = protowire.AppendVarint(b, f.wiretag) 4656 b = protowire.AppendFixed64(b, math.Float64bits(v)) 4657 return b, nil 4658 } 4659 4660 var coderDoubleNoZero = pointerCoderFuncs{ 4661 size: sizeDoubleNoZero, 4662 marshal: appendDoubleNoZero, 4663 unmarshal: consumeDouble, 4664 merge: mergeFloat64NoZero, 4665 } 4666 4667 // sizeDoublePtr returns the size of wire encoding a *float64 pointer as a Double. 4668 // It panics if the pointer is nil. 4669 func sizeDoublePtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4670 return f.tagsize + protowire.SizeFixed64() 4671 } 4672 4673 // appendDoublePtr wire encodes a *float64 pointer as a Double. 4674 // It panics if the pointer is nil. 4675 func appendDoublePtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4676 v := **p.Float64Ptr() 4677 b = protowire.AppendVarint(b, f.wiretag) 4678 b = protowire.AppendFixed64(b, math.Float64bits(v)) 4679 return b, nil 4680 } 4681 4682 // consumeDoublePtr wire decodes a *float64 pointer as a Double. 4683 func consumeDoublePtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4684 if wtyp != protowire.Fixed64Type { 4685 return out, errUnknown 4686 } 4687 v, n := protowire.ConsumeFixed64(b) 4688 if n < 0 { 4689 return out, errDecode 4690 } 4691 vp := p.Float64Ptr() 4692 if *vp == nil { 4693 *vp = new(float64) 4694 } 4695 **vp = math.Float64frombits(v) 4696 out.n = n 4697 return out, nil 4698 } 4699 4700 var coderDoublePtr = pointerCoderFuncs{ 4701 size: sizeDoublePtr, 4702 marshal: appendDoublePtr, 4703 unmarshal: consumeDoublePtr, 4704 merge: mergeFloat64Ptr, 4705 } 4706 4707 // sizeDoubleSlice returns the size of wire encoding a []float64 pointer as a repeated Double. 4708 func sizeDoubleSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4709 s := *p.Float64Slice() 4710 size = len(s) * (f.tagsize + protowire.SizeFixed64()) 4711 return size 4712 } 4713 4714 // appendDoubleSlice encodes a []float64 pointer as a repeated Double. 4715 func appendDoubleSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4716 s := *p.Float64Slice() 4717 for _, v := range s { 4718 b = protowire.AppendVarint(b, f.wiretag) 4719 b = protowire.AppendFixed64(b, math.Float64bits(v)) 4720 } 4721 return b, nil 4722 } 4723 4724 // consumeDoubleSlice wire decodes a []float64 pointer as a repeated Double. 4725 func consumeDoubleSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4726 sp := p.Float64Slice() 4727 if wtyp == protowire.BytesType { 4728 s := *sp 4729 b, n := protowire.ConsumeBytes(b) 4730 if n < 0 { 4731 return out, errDecode 4732 } 4733 for len(b) > 0 { 4734 v, n := protowire.ConsumeFixed64(b) 4735 if n < 0 { 4736 return out, errDecode 4737 } 4738 s = append(s, math.Float64frombits(v)) 4739 b = b[n:] 4740 } 4741 *sp = s 4742 out.n = n 4743 return out, nil 4744 } 4745 if wtyp != protowire.Fixed64Type { 4746 return out, errUnknown 4747 } 4748 v, n := protowire.ConsumeFixed64(b) 4749 if n < 0 { 4750 return out, errDecode 4751 } 4752 *sp = append(*sp, math.Float64frombits(v)) 4753 out.n = n 4754 return out, nil 4755 } 4756 4757 var coderDoubleSlice = pointerCoderFuncs{ 4758 size: sizeDoubleSlice, 4759 marshal: appendDoubleSlice, 4760 unmarshal: consumeDoubleSlice, 4761 merge: mergeFloat64Slice, 4762 } 4763 4764 // sizeDoublePackedSlice returns the size of wire encoding a []float64 pointer as a packed repeated Double. 4765 func sizeDoublePackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4766 s := *p.Float64Slice() 4767 if len(s) == 0 { 4768 return 0 4769 } 4770 n := len(s) * protowire.SizeFixed64() 4771 return f.tagsize + protowire.SizeBytes(n) 4772 } 4773 4774 // appendDoublePackedSlice encodes a []float64 pointer as a packed repeated Double. 4775 func appendDoublePackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4776 s := *p.Float64Slice() 4777 if len(s) == 0 { 4778 return b, nil 4779 } 4780 b = protowire.AppendVarint(b, f.wiretag) 4781 n := len(s) * protowire.SizeFixed64() 4782 b = protowire.AppendVarint(b, uint64(n)) 4783 for _, v := range s { 4784 b = protowire.AppendFixed64(b, math.Float64bits(v)) 4785 } 4786 return b, nil 4787 } 4788 4789 var coderDoublePackedSlice = pointerCoderFuncs{ 4790 size: sizeDoublePackedSlice, 4791 marshal: appendDoublePackedSlice, 4792 unmarshal: consumeDoubleSlice, 4793 merge: mergeFloat64Slice, 4794 } 4795 4796 // sizeDoubleValue returns the size of wire encoding a float64 value as a Double. 4797 func sizeDoubleValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { 4798 return tagsize + protowire.SizeFixed64() 4799 } 4800 4801 // appendDoubleValue encodes a float64 value as a Double. 4802 func appendDoubleValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4803 b = protowire.AppendVarint(b, wiretag) 4804 b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) 4805 return b, nil 4806 } 4807 4808 // consumeDoubleValue decodes a float64 value as a Double. 4809 func consumeDoubleValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 4810 if wtyp != protowire.Fixed64Type { 4811 return protoreflect.Value{}, out, errUnknown 4812 } 4813 v, n := protowire.ConsumeFixed64(b) 4814 if n < 0 { 4815 return protoreflect.Value{}, out, errDecode 4816 } 4817 out.n = n 4818 return protoreflect.ValueOfFloat64(math.Float64frombits(v)), out, nil 4819 } 4820 4821 var coderDoubleValue = valueCoderFuncs{ 4822 size: sizeDoubleValue, 4823 marshal: appendDoubleValue, 4824 unmarshal: consumeDoubleValue, 4825 merge: mergeScalarValue, 4826 } 4827 4828 // sizeDoubleSliceValue returns the size of wire encoding a []float64 value as a repeated Double. 4829 func sizeDoubleSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 4830 list := listv.List() 4831 size = list.Len() * (tagsize + protowire.SizeFixed64()) 4832 return size 4833 } 4834 4835 // appendDoubleSliceValue encodes a []float64 value as a repeated Double. 4836 func appendDoubleSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4837 list := listv.List() 4838 for i, llen := 0, list.Len(); i < llen; i++ { 4839 v := list.Get(i) 4840 b = protowire.AppendVarint(b, wiretag) 4841 b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) 4842 } 4843 return b, nil 4844 } 4845 4846 // consumeDoubleSliceValue wire decodes a []float64 value as a repeated Double. 4847 func consumeDoubleSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 4848 list := listv.List() 4849 if wtyp == protowire.BytesType { 4850 b, n := protowire.ConsumeBytes(b) 4851 if n < 0 { 4852 return protoreflect.Value{}, out, errDecode 4853 } 4854 for len(b) > 0 { 4855 v, n := protowire.ConsumeFixed64(b) 4856 if n < 0 { 4857 return protoreflect.Value{}, out, errDecode 4858 } 4859 list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) 4860 b = b[n:] 4861 } 4862 out.n = n 4863 return listv, out, nil 4864 } 4865 if wtyp != protowire.Fixed64Type { 4866 return protoreflect.Value{}, out, errUnknown 4867 } 4868 v, n := protowire.ConsumeFixed64(b) 4869 if n < 0 { 4870 return protoreflect.Value{}, out, errDecode 4871 } 4872 list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) 4873 out.n = n 4874 return listv, out, nil 4875 } 4876 4877 var coderDoubleSliceValue = valueCoderFuncs{ 4878 size: sizeDoubleSliceValue, 4879 marshal: appendDoubleSliceValue, 4880 unmarshal: consumeDoubleSliceValue, 4881 merge: mergeListValue, 4882 } 4883 4884 // sizeDoublePackedSliceValue returns the size of wire encoding a []float64 value as a packed repeated Double. 4885 func sizeDoublePackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 4886 list := listv.List() 4887 llen := list.Len() 4888 if llen == 0 { 4889 return 0 4890 } 4891 n := llen * protowire.SizeFixed64() 4892 return tagsize + protowire.SizeBytes(n) 4893 } 4894 4895 // appendDoublePackedSliceValue encodes a []float64 value as a packed repeated Double. 4896 func appendDoublePackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 4897 list := listv.List() 4898 llen := list.Len() 4899 if llen == 0 { 4900 return b, nil 4901 } 4902 b = protowire.AppendVarint(b, wiretag) 4903 n := llen * protowire.SizeFixed64() 4904 b = protowire.AppendVarint(b, uint64(n)) 4905 for i := 0; i < llen; i++ { 4906 v := list.Get(i) 4907 b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) 4908 } 4909 return b, nil 4910 } 4911 4912 var coderDoublePackedSliceValue = valueCoderFuncs{ 4913 size: sizeDoublePackedSliceValue, 4914 marshal: appendDoublePackedSliceValue, 4915 unmarshal: consumeDoubleSliceValue, 4916 merge: mergeListValue, 4917 } 4918 4919 // sizeString returns the size of wire encoding a string pointer as a String. 4920 func sizeString(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4921 v := *p.String() 4922 return f.tagsize + protowire.SizeBytes(len(v)) 4923 } 4924 4925 // appendString wire encodes a string pointer as a String. 4926 func appendString(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4927 v := *p.String() 4928 b = protowire.AppendVarint(b, f.wiretag) 4929 b = protowire.AppendString(b, v) 4930 return b, nil 4931 } 4932 4933 // consumeString wire decodes a string pointer as a String. 4934 func consumeString(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4935 if wtyp != protowire.BytesType { 4936 return out, errUnknown 4937 } 4938 v, n := protowire.ConsumeBytes(b) 4939 if n < 0 { 4940 return out, errDecode 4941 } 4942 *p.String() = string(v) 4943 out.n = n 4944 return out, nil 4945 } 4946 4947 var coderString = pointerCoderFuncs{ 4948 size: sizeString, 4949 marshal: appendString, 4950 unmarshal: consumeString, 4951 merge: mergeString, 4952 } 4953 4954 // appendStringValidateUTF8 wire encodes a string pointer as a String. 4955 func appendStringValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 4956 v := *p.String() 4957 b = protowire.AppendVarint(b, f.wiretag) 4958 b = protowire.AppendString(b, v) 4959 if !utf8.ValidString(v) { 4960 return b, errInvalidUTF8{} 4961 } 4962 return b, nil 4963 } 4964 4965 // consumeStringValidateUTF8 wire decodes a string pointer as a String. 4966 func consumeStringValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 4967 if wtyp != protowire.BytesType { 4968 return out, errUnknown 4969 } 4970 v, n := protowire.ConsumeBytes(b) 4971 if n < 0 { 4972 return out, errDecode 4973 } 4974 if !utf8.Valid(v) { 4975 return out, errInvalidUTF8{} 4976 } 4977 *p.String() = string(v) 4978 out.n = n 4979 return out, nil 4980 } 4981 4982 var coderStringValidateUTF8 = pointerCoderFuncs{ 4983 size: sizeString, 4984 marshal: appendStringValidateUTF8, 4985 unmarshal: consumeStringValidateUTF8, 4986 merge: mergeString, 4987 } 4988 4989 // sizeStringNoZero returns the size of wire encoding a string pointer as a String. 4990 // The zero value is not encoded. 4991 func sizeStringNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 4992 v := *p.String() 4993 if len(v) == 0 { 4994 return 0 4995 } 4996 return f.tagsize + protowire.SizeBytes(len(v)) 4997 } 4998 4999 // appendStringNoZero wire encodes a string pointer as a String. 5000 // The zero value is not encoded. 5001 func appendStringNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5002 v := *p.String() 5003 if len(v) == 0 { 5004 return b, nil 5005 } 5006 b = protowire.AppendVarint(b, f.wiretag) 5007 b = protowire.AppendString(b, v) 5008 return b, nil 5009 } 5010 5011 var coderStringNoZero = pointerCoderFuncs{ 5012 size: sizeStringNoZero, 5013 marshal: appendStringNoZero, 5014 unmarshal: consumeString, 5015 merge: mergeStringNoZero, 5016 } 5017 5018 // appendStringNoZeroValidateUTF8 wire encodes a string pointer as a String. 5019 // The zero value is not encoded. 5020 func appendStringNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5021 v := *p.String() 5022 if len(v) == 0 { 5023 return b, nil 5024 } 5025 b = protowire.AppendVarint(b, f.wiretag) 5026 b = protowire.AppendString(b, v) 5027 if !utf8.ValidString(v) { 5028 return b, errInvalidUTF8{} 5029 } 5030 return b, nil 5031 } 5032 5033 var coderStringNoZeroValidateUTF8 = pointerCoderFuncs{ 5034 size: sizeStringNoZero, 5035 marshal: appendStringNoZeroValidateUTF8, 5036 unmarshal: consumeStringValidateUTF8, 5037 merge: mergeStringNoZero, 5038 } 5039 5040 // sizeStringPtr returns the size of wire encoding a *string pointer as a String. 5041 // It panics if the pointer is nil. 5042 func sizeStringPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 5043 v := **p.StringPtr() 5044 return f.tagsize + protowire.SizeBytes(len(v)) 5045 } 5046 5047 // appendStringPtr wire encodes a *string pointer as a String. 5048 // It panics if the pointer is nil. 5049 func appendStringPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5050 v := **p.StringPtr() 5051 b = protowire.AppendVarint(b, f.wiretag) 5052 b = protowire.AppendString(b, v) 5053 return b, nil 5054 } 5055 5056 // consumeStringPtr wire decodes a *string pointer as a String. 5057 func consumeStringPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5058 if wtyp != protowire.BytesType { 5059 return out, errUnknown 5060 } 5061 v, n := protowire.ConsumeBytes(b) 5062 if n < 0 { 5063 return out, errDecode 5064 } 5065 vp := p.StringPtr() 5066 if *vp == nil { 5067 *vp = new(string) 5068 } 5069 **vp = string(v) 5070 out.n = n 5071 return out, nil 5072 } 5073 5074 var coderStringPtr = pointerCoderFuncs{ 5075 size: sizeStringPtr, 5076 marshal: appendStringPtr, 5077 unmarshal: consumeStringPtr, 5078 merge: mergeStringPtr, 5079 } 5080 5081 // appendStringPtrValidateUTF8 wire encodes a *string pointer as a String. 5082 // It panics if the pointer is nil. 5083 func appendStringPtrValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5084 v := **p.StringPtr() 5085 b = protowire.AppendVarint(b, f.wiretag) 5086 b = protowire.AppendString(b, v) 5087 if !utf8.ValidString(v) { 5088 return b, errInvalidUTF8{} 5089 } 5090 return b, nil 5091 } 5092 5093 // consumeStringPtrValidateUTF8 wire decodes a *string pointer as a String. 5094 func consumeStringPtrValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5095 if wtyp != protowire.BytesType { 5096 return out, errUnknown 5097 } 5098 v, n := protowire.ConsumeBytes(b) 5099 if n < 0 { 5100 return out, errDecode 5101 } 5102 if !utf8.Valid(v) { 5103 return out, errInvalidUTF8{} 5104 } 5105 vp := p.StringPtr() 5106 if *vp == nil { 5107 *vp = new(string) 5108 } 5109 **vp = string(v) 5110 out.n = n 5111 return out, nil 5112 } 5113 5114 var coderStringPtrValidateUTF8 = pointerCoderFuncs{ 5115 size: sizeStringPtr, 5116 marshal: appendStringPtrValidateUTF8, 5117 unmarshal: consumeStringPtrValidateUTF8, 5118 merge: mergeStringPtr, 5119 } 5120 5121 // sizeStringSlice returns the size of wire encoding a []string pointer as a repeated String. 5122 func sizeStringSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 5123 s := *p.StringSlice() 5124 for _, v := range s { 5125 size += f.tagsize + protowire.SizeBytes(len(v)) 5126 } 5127 return size 5128 } 5129 5130 // appendStringSlice encodes a []string pointer as a repeated String. 5131 func appendStringSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5132 s := *p.StringSlice() 5133 for _, v := range s { 5134 b = protowire.AppendVarint(b, f.wiretag) 5135 b = protowire.AppendString(b, v) 5136 } 5137 return b, nil 5138 } 5139 5140 // consumeStringSlice wire decodes a []string pointer as a repeated String. 5141 func consumeStringSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5142 sp := p.StringSlice() 5143 if wtyp != protowire.BytesType { 5144 return out, errUnknown 5145 } 5146 v, n := protowire.ConsumeBytes(b) 5147 if n < 0 { 5148 return out, errDecode 5149 } 5150 *sp = append(*sp, string(v)) 5151 out.n = n 5152 return out, nil 5153 } 5154 5155 var coderStringSlice = pointerCoderFuncs{ 5156 size: sizeStringSlice, 5157 marshal: appendStringSlice, 5158 unmarshal: consumeStringSlice, 5159 merge: mergeStringSlice, 5160 } 5161 5162 // appendStringSliceValidateUTF8 encodes a []string pointer as a repeated String. 5163 func appendStringSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5164 s := *p.StringSlice() 5165 for _, v := range s { 5166 b = protowire.AppendVarint(b, f.wiretag) 5167 b = protowire.AppendString(b, v) 5168 if !utf8.ValidString(v) { 5169 return b, errInvalidUTF8{} 5170 } 5171 } 5172 return b, nil 5173 } 5174 5175 // consumeStringSliceValidateUTF8 wire decodes a []string pointer as a repeated String. 5176 func consumeStringSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5177 if wtyp != protowire.BytesType { 5178 return out, errUnknown 5179 } 5180 v, n := protowire.ConsumeBytes(b) 5181 if n < 0 { 5182 return out, errDecode 5183 } 5184 if !utf8.Valid(v) { 5185 return out, errInvalidUTF8{} 5186 } 5187 sp := p.StringSlice() 5188 *sp = append(*sp, string(v)) 5189 out.n = n 5190 return out, nil 5191 } 5192 5193 var coderStringSliceValidateUTF8 = pointerCoderFuncs{ 5194 size: sizeStringSlice, 5195 marshal: appendStringSliceValidateUTF8, 5196 unmarshal: consumeStringSliceValidateUTF8, 5197 merge: mergeStringSlice, 5198 } 5199 5200 // sizeStringValue returns the size of wire encoding a string value as a String. 5201 func sizeStringValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { 5202 return tagsize + protowire.SizeBytes(len(v.String())) 5203 } 5204 5205 // appendStringValue encodes a string value as a String. 5206 func appendStringValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 5207 b = protowire.AppendVarint(b, wiretag) 5208 b = protowire.AppendString(b, v.String()) 5209 return b, nil 5210 } 5211 5212 // consumeStringValue decodes a string value as a String. 5213 func consumeStringValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 5214 if wtyp != protowire.BytesType { 5215 return protoreflect.Value{}, out, errUnknown 5216 } 5217 v, n := protowire.ConsumeBytes(b) 5218 if n < 0 { 5219 return protoreflect.Value{}, out, errDecode 5220 } 5221 out.n = n 5222 return protoreflect.ValueOfString(string(v)), out, nil 5223 } 5224 5225 var coderStringValue = valueCoderFuncs{ 5226 size: sizeStringValue, 5227 marshal: appendStringValue, 5228 unmarshal: consumeStringValue, 5229 merge: mergeScalarValue, 5230 } 5231 5232 // appendStringValueValidateUTF8 encodes a string value as a String. 5233 func appendStringValueValidateUTF8(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 5234 b = protowire.AppendVarint(b, wiretag) 5235 b = protowire.AppendString(b, v.String()) 5236 if !utf8.ValidString(v.String()) { 5237 return b, errInvalidUTF8{} 5238 } 5239 return b, nil 5240 } 5241 5242 // consumeStringValueValidateUTF8 decodes a string value as a String. 5243 func consumeStringValueValidateUTF8(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 5244 if wtyp != protowire.BytesType { 5245 return protoreflect.Value{}, out, errUnknown 5246 } 5247 v, n := protowire.ConsumeBytes(b) 5248 if n < 0 { 5249 return protoreflect.Value{}, out, errDecode 5250 } 5251 if !utf8.Valid(v) { 5252 return protoreflect.Value{}, out, errInvalidUTF8{} 5253 } 5254 out.n = n 5255 return protoreflect.ValueOfString(string(v)), out, nil 5256 } 5257 5258 var coderStringValueValidateUTF8 = valueCoderFuncs{ 5259 size: sizeStringValue, 5260 marshal: appendStringValueValidateUTF8, 5261 unmarshal: consumeStringValueValidateUTF8, 5262 merge: mergeScalarValue, 5263 } 5264 5265 // sizeStringSliceValue returns the size of wire encoding a []string value as a repeated String. 5266 func sizeStringSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 5267 list := listv.List() 5268 for i, llen := 0, list.Len(); i < llen; i++ { 5269 v := list.Get(i) 5270 size += tagsize + protowire.SizeBytes(len(v.String())) 5271 } 5272 return size 5273 } 5274 5275 // appendStringSliceValue encodes a []string value as a repeated String. 5276 func appendStringSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 5277 list := listv.List() 5278 for i, llen := 0, list.Len(); i < llen; i++ { 5279 v := list.Get(i) 5280 b = protowire.AppendVarint(b, wiretag) 5281 b = protowire.AppendString(b, v.String()) 5282 } 5283 return b, nil 5284 } 5285 5286 // consumeStringSliceValue wire decodes a []string value as a repeated String. 5287 func consumeStringSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 5288 list := listv.List() 5289 if wtyp != protowire.BytesType { 5290 return protoreflect.Value{}, out, errUnknown 5291 } 5292 v, n := protowire.ConsumeBytes(b) 5293 if n < 0 { 5294 return protoreflect.Value{}, out, errDecode 5295 } 5296 list.Append(protoreflect.ValueOfString(string(v))) 5297 out.n = n 5298 return listv, out, nil 5299 } 5300 5301 var coderStringSliceValue = valueCoderFuncs{ 5302 size: sizeStringSliceValue, 5303 marshal: appendStringSliceValue, 5304 unmarshal: consumeStringSliceValue, 5305 merge: mergeListValue, 5306 } 5307 5308 // sizeBytes returns the size of wire encoding a []byte pointer as a Bytes. 5309 func sizeBytes(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 5310 v := *p.Bytes() 5311 return f.tagsize + protowire.SizeBytes(len(v)) 5312 } 5313 5314 // appendBytes wire encodes a []byte pointer as a Bytes. 5315 func appendBytes(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5316 v := *p.Bytes() 5317 b = protowire.AppendVarint(b, f.wiretag) 5318 b = protowire.AppendBytes(b, v) 5319 return b, nil 5320 } 5321 5322 // consumeBytes wire decodes a []byte pointer as a Bytes. 5323 func consumeBytes(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5324 if wtyp != protowire.BytesType { 5325 return out, errUnknown 5326 } 5327 v, n := protowire.ConsumeBytes(b) 5328 if n < 0 { 5329 return out, errDecode 5330 } 5331 *p.Bytes() = append(emptyBuf[:], v...) 5332 out.n = n 5333 return out, nil 5334 } 5335 5336 var coderBytes = pointerCoderFuncs{ 5337 size: sizeBytes, 5338 marshal: appendBytes, 5339 unmarshal: consumeBytes, 5340 merge: mergeBytes, 5341 } 5342 5343 // appendBytesValidateUTF8 wire encodes a []byte pointer as a Bytes. 5344 func appendBytesValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5345 v := *p.Bytes() 5346 b = protowire.AppendVarint(b, f.wiretag) 5347 b = protowire.AppendBytes(b, v) 5348 if !utf8.Valid(v) { 5349 return b, errInvalidUTF8{} 5350 } 5351 return b, nil 5352 } 5353 5354 // consumeBytesValidateUTF8 wire decodes a []byte pointer as a Bytes. 5355 func consumeBytesValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5356 if wtyp != protowire.BytesType { 5357 return out, errUnknown 5358 } 5359 v, n := protowire.ConsumeBytes(b) 5360 if n < 0 { 5361 return out, errDecode 5362 } 5363 if !utf8.Valid(v) { 5364 return out, errInvalidUTF8{} 5365 } 5366 *p.Bytes() = append(emptyBuf[:], v...) 5367 out.n = n 5368 return out, nil 5369 } 5370 5371 var coderBytesValidateUTF8 = pointerCoderFuncs{ 5372 size: sizeBytes, 5373 marshal: appendBytesValidateUTF8, 5374 unmarshal: consumeBytesValidateUTF8, 5375 merge: mergeBytes, 5376 } 5377 5378 // sizeBytesNoZero returns the size of wire encoding a []byte pointer as a Bytes. 5379 // The zero value is not encoded. 5380 func sizeBytesNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 5381 v := *p.Bytes() 5382 if len(v) == 0 { 5383 return 0 5384 } 5385 return f.tagsize + protowire.SizeBytes(len(v)) 5386 } 5387 5388 // appendBytesNoZero wire encodes a []byte pointer as a Bytes. 5389 // The zero value is not encoded. 5390 func appendBytesNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5391 v := *p.Bytes() 5392 if len(v) == 0 { 5393 return b, nil 5394 } 5395 b = protowire.AppendVarint(b, f.wiretag) 5396 b = protowire.AppendBytes(b, v) 5397 return b, nil 5398 } 5399 5400 // consumeBytesNoZero wire decodes a []byte pointer as a Bytes. 5401 // The zero value is not decoded. 5402 func consumeBytesNoZero(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5403 if wtyp != protowire.BytesType { 5404 return out, errUnknown 5405 } 5406 v, n := protowire.ConsumeBytes(b) 5407 if n < 0 { 5408 return out, errDecode 5409 } 5410 *p.Bytes() = append(([]byte)(nil), v...) 5411 out.n = n 5412 return out, nil 5413 } 5414 5415 var coderBytesNoZero = pointerCoderFuncs{ 5416 size: sizeBytesNoZero, 5417 marshal: appendBytesNoZero, 5418 unmarshal: consumeBytesNoZero, 5419 merge: mergeBytesNoZero, 5420 } 5421 5422 // appendBytesNoZeroValidateUTF8 wire encodes a []byte pointer as a Bytes. 5423 // The zero value is not encoded. 5424 func appendBytesNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5425 v := *p.Bytes() 5426 if len(v) == 0 { 5427 return b, nil 5428 } 5429 b = protowire.AppendVarint(b, f.wiretag) 5430 b = protowire.AppendBytes(b, v) 5431 if !utf8.Valid(v) { 5432 return b, errInvalidUTF8{} 5433 } 5434 return b, nil 5435 } 5436 5437 // consumeBytesNoZeroValidateUTF8 wire decodes a []byte pointer as a Bytes. 5438 func consumeBytesNoZeroValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5439 if wtyp != protowire.BytesType { 5440 return out, errUnknown 5441 } 5442 v, n := protowire.ConsumeBytes(b) 5443 if n < 0 { 5444 return out, errDecode 5445 } 5446 if !utf8.Valid(v) { 5447 return out, errInvalidUTF8{} 5448 } 5449 *p.Bytes() = append(([]byte)(nil), v...) 5450 out.n = n 5451 return out, nil 5452 } 5453 5454 var coderBytesNoZeroValidateUTF8 = pointerCoderFuncs{ 5455 size: sizeBytesNoZero, 5456 marshal: appendBytesNoZeroValidateUTF8, 5457 unmarshal: consumeBytesNoZeroValidateUTF8, 5458 merge: mergeBytesNoZero, 5459 } 5460 5461 // sizeBytesSlice returns the size of wire encoding a [][]byte pointer as a repeated Bytes. 5462 func sizeBytesSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { 5463 s := *p.BytesSlice() 5464 for _, v := range s { 5465 size += f.tagsize + protowire.SizeBytes(len(v)) 5466 } 5467 return size 5468 } 5469 5470 // appendBytesSlice encodes a [][]byte pointer as a repeated Bytes. 5471 func appendBytesSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5472 s := *p.BytesSlice() 5473 for _, v := range s { 5474 b = protowire.AppendVarint(b, f.wiretag) 5475 b = protowire.AppendBytes(b, v) 5476 } 5477 return b, nil 5478 } 5479 5480 // consumeBytesSlice wire decodes a [][]byte pointer as a repeated Bytes. 5481 func consumeBytesSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5482 sp := p.BytesSlice() 5483 if wtyp != protowire.BytesType { 5484 return out, errUnknown 5485 } 5486 v, n := protowire.ConsumeBytes(b) 5487 if n < 0 { 5488 return out, errDecode 5489 } 5490 *sp = append(*sp, append(emptyBuf[:], v...)) 5491 out.n = n 5492 return out, nil 5493 } 5494 5495 var coderBytesSlice = pointerCoderFuncs{ 5496 size: sizeBytesSlice, 5497 marshal: appendBytesSlice, 5498 unmarshal: consumeBytesSlice, 5499 merge: mergeBytesSlice, 5500 } 5501 5502 // appendBytesSliceValidateUTF8 encodes a [][]byte pointer as a repeated Bytes. 5503 func appendBytesSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { 5504 s := *p.BytesSlice() 5505 for _, v := range s { 5506 b = protowire.AppendVarint(b, f.wiretag) 5507 b = protowire.AppendBytes(b, v) 5508 if !utf8.Valid(v) { 5509 return b, errInvalidUTF8{} 5510 } 5511 } 5512 return b, nil 5513 } 5514 5515 // consumeBytesSliceValidateUTF8 wire decodes a [][]byte pointer as a repeated Bytes. 5516 func consumeBytesSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { 5517 if wtyp != protowire.BytesType { 5518 return out, errUnknown 5519 } 5520 v, n := protowire.ConsumeBytes(b) 5521 if n < 0 { 5522 return out, errDecode 5523 } 5524 if !utf8.Valid(v) { 5525 return out, errInvalidUTF8{} 5526 } 5527 sp := p.BytesSlice() 5528 *sp = append(*sp, append(emptyBuf[:], v...)) 5529 out.n = n 5530 return out, nil 5531 } 5532 5533 var coderBytesSliceValidateUTF8 = pointerCoderFuncs{ 5534 size: sizeBytesSlice, 5535 marshal: appendBytesSliceValidateUTF8, 5536 unmarshal: consumeBytesSliceValidateUTF8, 5537 merge: mergeBytesSlice, 5538 } 5539 5540 // sizeBytesValue returns the size of wire encoding a []byte value as a Bytes. 5541 func sizeBytesValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { 5542 return tagsize + protowire.SizeBytes(len(v.Bytes())) 5543 } 5544 5545 // appendBytesValue encodes a []byte value as a Bytes. 5546 func appendBytesValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 5547 b = protowire.AppendVarint(b, wiretag) 5548 b = protowire.AppendBytes(b, v.Bytes()) 5549 return b, nil 5550 } 5551 5552 // consumeBytesValue decodes a []byte value as a Bytes. 5553 func consumeBytesValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 5554 if wtyp != protowire.BytesType { 5555 return protoreflect.Value{}, out, errUnknown 5556 } 5557 v, n := protowire.ConsumeBytes(b) 5558 if n < 0 { 5559 return protoreflect.Value{}, out, errDecode 5560 } 5561 out.n = n 5562 return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), out, nil 5563 } 5564 5565 var coderBytesValue = valueCoderFuncs{ 5566 size: sizeBytesValue, 5567 marshal: appendBytesValue, 5568 unmarshal: consumeBytesValue, 5569 merge: mergeBytesValue, 5570 } 5571 5572 // sizeBytesSliceValue returns the size of wire encoding a [][]byte value as a repeated Bytes. 5573 func sizeBytesSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { 5574 list := listv.List() 5575 for i, llen := 0, list.Len(); i < llen; i++ { 5576 v := list.Get(i) 5577 size += tagsize + protowire.SizeBytes(len(v.Bytes())) 5578 } 5579 return size 5580 } 5581 5582 // appendBytesSliceValue encodes a [][]byte value as a repeated Bytes. 5583 func appendBytesSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { 5584 list := listv.List() 5585 for i, llen := 0, list.Len(); i < llen; i++ { 5586 v := list.Get(i) 5587 b = protowire.AppendVarint(b, wiretag) 5588 b = protowire.AppendBytes(b, v.Bytes()) 5589 } 5590 return b, nil 5591 } 5592 5593 // consumeBytesSliceValue wire decodes a [][]byte value as a repeated Bytes. 5594 func consumeBytesSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { 5595 list := listv.List() 5596 if wtyp != protowire.BytesType { 5597 return protoreflect.Value{}, out, errUnknown 5598 } 5599 v, n := protowire.ConsumeBytes(b) 5600 if n < 0 { 5601 return protoreflect.Value{}, out, errDecode 5602 } 5603 list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...))) 5604 out.n = n 5605 return listv, out, nil 5606 } 5607 5608 var coderBytesSliceValue = valueCoderFuncs{ 5609 size: sizeBytesSliceValue, 5610 marshal: appendBytesSliceValue, 5611 unmarshal: consumeBytesSliceValue, 5612 merge: mergeBytesListValue, 5613 } 5614 5615 // We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices. 5616 var emptyBuf [0]byte 5617 5618 var wireTypes = map[protoreflect.Kind]protowire.Type{ 5619 protoreflect.BoolKind: protowire.VarintType, 5620 protoreflect.EnumKind: protowire.VarintType, 5621 protoreflect.Int32Kind: protowire.VarintType, 5622 protoreflect.Sint32Kind: protowire.VarintType, 5623 protoreflect.Uint32Kind: protowire.VarintType, 5624 protoreflect.Int64Kind: protowire.VarintType, 5625 protoreflect.Sint64Kind: protowire.VarintType, 5626 protoreflect.Uint64Kind: protowire.VarintType, 5627 protoreflect.Sfixed32Kind: protowire.Fixed32Type, 5628 protoreflect.Fixed32Kind: protowire.Fixed32Type, 5629 protoreflect.FloatKind: protowire.Fixed32Type, 5630 protoreflect.Sfixed64Kind: protowire.Fixed64Type, 5631 protoreflect.Fixed64Kind: protowire.Fixed64Type, 5632 protoreflect.DoubleKind: protowire.Fixed64Type, 5633 protoreflect.StringKind: protowire.BytesType, 5634 protoreflect.BytesKind: protowire.BytesType, 5635 protoreflect.MessageKind: protowire.BytesType, 5636 protoreflect.GroupKind: protowire.StartGroupType, 5637 }