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