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