1*1c12ee1eSDan Willemsen// Copyright 2019 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 Willemsenpackage proto_test 6*1c12ee1eSDan Willemsen 7*1c12ee1eSDan Willemsenimport ( 8*1c12ee1eSDan Willemsen "google.golang.org/protobuf/encoding/protowire" 9*1c12ee1eSDan Willemsen "google.golang.org/protobuf/internal/impl" 10*1c12ee1eSDan Willemsen "google.golang.org/protobuf/internal/protobuild" 11*1c12ee1eSDan Willemsen "google.golang.org/protobuf/proto" 12*1c12ee1eSDan Willemsen "google.golang.org/protobuf/reflect/protoreflect" 13*1c12ee1eSDan Willemsen "google.golang.org/protobuf/reflect/protoregistry" 14*1c12ee1eSDan Willemsen "google.golang.org/protobuf/testing/protopack" 15*1c12ee1eSDan Willemsen 16*1c12ee1eSDan Willemsen legacypb "google.golang.org/protobuf/internal/testprotos/legacy" 17*1c12ee1eSDan Willemsen requiredpb "google.golang.org/protobuf/internal/testprotos/required" 18*1c12ee1eSDan Willemsen testpb "google.golang.org/protobuf/internal/testprotos/test" 19*1c12ee1eSDan Willemsen test3pb "google.golang.org/protobuf/internal/testprotos/test3" 20*1c12ee1eSDan Willemsen) 21*1c12ee1eSDan Willemsen 22*1c12ee1eSDan Willemsentype testProto struct { 23*1c12ee1eSDan Willemsen desc string 24*1c12ee1eSDan Willemsen decodeTo []proto.Message 25*1c12ee1eSDan Willemsen wire []byte 26*1c12ee1eSDan Willemsen partial bool 27*1c12ee1eSDan Willemsen noEncode bool 28*1c12ee1eSDan Willemsen checkFastInit bool 29*1c12ee1eSDan Willemsen unmarshalOptions proto.UnmarshalOptions 30*1c12ee1eSDan Willemsen validationStatus impl.ValidationStatus 31*1c12ee1eSDan Willemsen nocheckValidInit bool 32*1c12ee1eSDan Willemsen} 33*1c12ee1eSDan Willemsen 34*1c12ee1eSDan Willemsenfunc makeMessages(in protobuild.Message, messages ...proto.Message) []proto.Message { 35*1c12ee1eSDan Willemsen if len(messages) == 0 { 36*1c12ee1eSDan Willemsen messages = []proto.Message{ 37*1c12ee1eSDan Willemsen &testpb.TestAllTypes{}, 38*1c12ee1eSDan Willemsen &test3pb.TestAllTypes{}, 39*1c12ee1eSDan Willemsen &testpb.TestAllExtensions{}, 40*1c12ee1eSDan Willemsen } 41*1c12ee1eSDan Willemsen } 42*1c12ee1eSDan Willemsen for _, m := range messages { 43*1c12ee1eSDan Willemsen in.Build(m.ProtoReflect()) 44*1c12ee1eSDan Willemsen } 45*1c12ee1eSDan Willemsen return messages 46*1c12ee1eSDan Willemsen} 47*1c12ee1eSDan Willemsen 48*1c12ee1eSDan Willemsenfunc templateMessages(messages ...proto.Message) []protoreflect.MessageType { 49*1c12ee1eSDan Willemsen if len(messages) == 0 { 50*1c12ee1eSDan Willemsen messages = []proto.Message{ 51*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 52*1c12ee1eSDan Willemsen (*test3pb.TestAllTypes)(nil), 53*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 54*1c12ee1eSDan Willemsen } 55*1c12ee1eSDan Willemsen } 56*1c12ee1eSDan Willemsen var out []protoreflect.MessageType 57*1c12ee1eSDan Willemsen for _, m := range messages { 58*1c12ee1eSDan Willemsen out = append(out, m.ProtoReflect().Type()) 59*1c12ee1eSDan Willemsen } 60*1c12ee1eSDan Willemsen return out 61*1c12ee1eSDan Willemsen 62*1c12ee1eSDan Willemsen} 63*1c12ee1eSDan Willemsen 64*1c12ee1eSDan Willemsenvar testValidMessages = []testProto{ 65*1c12ee1eSDan Willemsen { 66*1c12ee1eSDan Willemsen desc: "basic scalar types", 67*1c12ee1eSDan Willemsen checkFastInit: true, 68*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 69*1c12ee1eSDan Willemsen "optional_int32": 1001, 70*1c12ee1eSDan Willemsen "optional_int64": 1002, 71*1c12ee1eSDan Willemsen "optional_uint32": 1003, 72*1c12ee1eSDan Willemsen "optional_uint64": 1004, 73*1c12ee1eSDan Willemsen "optional_sint32": 1005, 74*1c12ee1eSDan Willemsen "optional_sint64": 1006, 75*1c12ee1eSDan Willemsen "optional_fixed32": 1007, 76*1c12ee1eSDan Willemsen "optional_fixed64": 1008, 77*1c12ee1eSDan Willemsen "optional_sfixed32": 1009, 78*1c12ee1eSDan Willemsen "optional_sfixed64": 1010, 79*1c12ee1eSDan Willemsen "optional_float": 1011.5, 80*1c12ee1eSDan Willemsen "optional_double": 1012.5, 81*1c12ee1eSDan Willemsen "optional_bool": true, 82*1c12ee1eSDan Willemsen "optional_string": "string", 83*1c12ee1eSDan Willemsen "optional_bytes": []byte("bytes"), 84*1c12ee1eSDan Willemsen "optional_nested_enum": "BAR", 85*1c12ee1eSDan Willemsen }), 86*1c12ee1eSDan Willemsen wire: protopack.Message{ 87*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1001), 88*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1002), 89*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.VarintType}, protopack.Uvarint(1003), 90*1c12ee1eSDan Willemsen protopack.Tag{4, protopack.VarintType}, protopack.Uvarint(1004), 91*1c12ee1eSDan Willemsen protopack.Tag{5, protopack.VarintType}, protopack.Svarint(1005), 92*1c12ee1eSDan Willemsen protopack.Tag{6, protopack.VarintType}, protopack.Svarint(1006), 93*1c12ee1eSDan Willemsen protopack.Tag{7, protopack.Fixed32Type}, protopack.Uint32(1007), 94*1c12ee1eSDan Willemsen protopack.Tag{8, protopack.Fixed64Type}, protopack.Uint64(1008), 95*1c12ee1eSDan Willemsen protopack.Tag{9, protopack.Fixed32Type}, protopack.Int32(1009), 96*1c12ee1eSDan Willemsen protopack.Tag{10, protopack.Fixed64Type}, protopack.Int64(1010), 97*1c12ee1eSDan Willemsen protopack.Tag{11, protopack.Fixed32Type}, protopack.Float32(1011.5), 98*1c12ee1eSDan Willemsen protopack.Tag{12, protopack.Fixed64Type}, protopack.Float64(1012.5), 99*1c12ee1eSDan Willemsen protopack.Tag{13, protopack.VarintType}, protopack.Bool(true), 100*1c12ee1eSDan Willemsen protopack.Tag{14, protopack.BytesType}, protopack.String("string"), 101*1c12ee1eSDan Willemsen protopack.Tag{15, protopack.BytesType}, protopack.Bytes([]byte("bytes")), 102*1c12ee1eSDan Willemsen protopack.Tag{21, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR)), 103*1c12ee1eSDan Willemsen }.Marshal(), 104*1c12ee1eSDan Willemsen }, 105*1c12ee1eSDan Willemsen { 106*1c12ee1eSDan Willemsen desc: "zero values", 107*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 108*1c12ee1eSDan Willemsen "optional_int32": 0, 109*1c12ee1eSDan Willemsen "optional_int64": 0, 110*1c12ee1eSDan Willemsen "optional_uint32": 0, 111*1c12ee1eSDan Willemsen "optional_uint64": 0, 112*1c12ee1eSDan Willemsen "optional_sint32": 0, 113*1c12ee1eSDan Willemsen "optional_sint64": 0, 114*1c12ee1eSDan Willemsen "optional_fixed32": 0, 115*1c12ee1eSDan Willemsen "optional_fixed64": 0, 116*1c12ee1eSDan Willemsen "optional_sfixed32": 0, 117*1c12ee1eSDan Willemsen "optional_sfixed64": 0, 118*1c12ee1eSDan Willemsen "optional_float": 0, 119*1c12ee1eSDan Willemsen "optional_double": 0, 120*1c12ee1eSDan Willemsen "optional_bool": false, 121*1c12ee1eSDan Willemsen "optional_string": "", 122*1c12ee1eSDan Willemsen "optional_bytes": []byte{}, 123*1c12ee1eSDan Willemsen }), 124*1c12ee1eSDan Willemsen wire: protopack.Message{ 125*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(0), 126*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(0), 127*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.VarintType}, protopack.Uvarint(0), 128*1c12ee1eSDan Willemsen protopack.Tag{4, protopack.VarintType}, protopack.Uvarint(0), 129*1c12ee1eSDan Willemsen protopack.Tag{5, protopack.VarintType}, protopack.Svarint(0), 130*1c12ee1eSDan Willemsen protopack.Tag{6, protopack.VarintType}, protopack.Svarint(0), 131*1c12ee1eSDan Willemsen protopack.Tag{7, protopack.Fixed32Type}, protopack.Uint32(0), 132*1c12ee1eSDan Willemsen protopack.Tag{8, protopack.Fixed64Type}, protopack.Uint64(0), 133*1c12ee1eSDan Willemsen protopack.Tag{9, protopack.Fixed32Type}, protopack.Int32(0), 134*1c12ee1eSDan Willemsen protopack.Tag{10, protopack.Fixed64Type}, protopack.Int64(0), 135*1c12ee1eSDan Willemsen protopack.Tag{11, protopack.Fixed32Type}, protopack.Float32(0), 136*1c12ee1eSDan Willemsen protopack.Tag{12, protopack.Fixed64Type}, protopack.Float64(0), 137*1c12ee1eSDan Willemsen protopack.Tag{13, protopack.VarintType}, protopack.Bool(false), 138*1c12ee1eSDan Willemsen protopack.Tag{14, protopack.BytesType}, protopack.String(""), 139*1c12ee1eSDan Willemsen protopack.Tag{15, protopack.BytesType}, protopack.Bytes(nil), 140*1c12ee1eSDan Willemsen }.Marshal(), 141*1c12ee1eSDan Willemsen }, 142*1c12ee1eSDan Willemsen { 143*1c12ee1eSDan Willemsen desc: "proto3 zero values", 144*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 145*1c12ee1eSDan Willemsen "singular_int32": 0, 146*1c12ee1eSDan Willemsen "singular_int64": 0, 147*1c12ee1eSDan Willemsen "singular_uint32": 0, 148*1c12ee1eSDan Willemsen "singular_uint64": 0, 149*1c12ee1eSDan Willemsen "singular_sint32": 0, 150*1c12ee1eSDan Willemsen "singular_sint64": 0, 151*1c12ee1eSDan Willemsen "singular_fixed32": 0, 152*1c12ee1eSDan Willemsen "singular_fixed64": 0, 153*1c12ee1eSDan Willemsen "singular_sfixed32": 0, 154*1c12ee1eSDan Willemsen "singular_sfixed64": 0, 155*1c12ee1eSDan Willemsen "singular_float": 0, 156*1c12ee1eSDan Willemsen "singular_double": 0, 157*1c12ee1eSDan Willemsen "singular_bool": false, 158*1c12ee1eSDan Willemsen "singular_string": "", 159*1c12ee1eSDan Willemsen "singular_bytes": []byte{}, 160*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{}), 161*1c12ee1eSDan Willemsen wire: protopack.Message{ 162*1c12ee1eSDan Willemsen protopack.Tag{81, protopack.VarintType}, protopack.Varint(0), 163*1c12ee1eSDan Willemsen protopack.Tag{82, protopack.VarintType}, protopack.Varint(0), 164*1c12ee1eSDan Willemsen protopack.Tag{83, protopack.VarintType}, protopack.Uvarint(0), 165*1c12ee1eSDan Willemsen protopack.Tag{84, protopack.VarintType}, protopack.Uvarint(0), 166*1c12ee1eSDan Willemsen protopack.Tag{85, protopack.VarintType}, protopack.Svarint(0), 167*1c12ee1eSDan Willemsen protopack.Tag{86, protopack.VarintType}, protopack.Svarint(0), 168*1c12ee1eSDan Willemsen protopack.Tag{87, protopack.Fixed32Type}, protopack.Uint32(0), 169*1c12ee1eSDan Willemsen protopack.Tag{88, protopack.Fixed64Type}, protopack.Uint64(0), 170*1c12ee1eSDan Willemsen protopack.Tag{89, protopack.Fixed32Type}, protopack.Int32(0), 171*1c12ee1eSDan Willemsen protopack.Tag{90, protopack.Fixed64Type}, protopack.Int64(0), 172*1c12ee1eSDan Willemsen protopack.Tag{91, protopack.Fixed32Type}, protopack.Float32(0), 173*1c12ee1eSDan Willemsen protopack.Tag{92, protopack.Fixed64Type}, protopack.Float64(0), 174*1c12ee1eSDan Willemsen protopack.Tag{93, protopack.VarintType}, protopack.Bool(false), 175*1c12ee1eSDan Willemsen protopack.Tag{94, protopack.BytesType}, protopack.String(""), 176*1c12ee1eSDan Willemsen protopack.Tag{95, protopack.BytesType}, protopack.Bytes(nil), 177*1c12ee1eSDan Willemsen }.Marshal(), 178*1c12ee1eSDan Willemsen }, 179*1c12ee1eSDan Willemsen { 180*1c12ee1eSDan Willemsen desc: "groups", 181*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 182*1c12ee1eSDan Willemsen "optionalgroup": protobuild.Message{ 183*1c12ee1eSDan Willemsen "a": 1017, 184*1c12ee1eSDan Willemsen "same_field_number": 1016, 185*1c12ee1eSDan Willemsen }, 186*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}), 187*1c12ee1eSDan Willemsen wire: protopack.Message{ 188*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.StartGroupType}, 189*1c12ee1eSDan Willemsen protopack.Tag{17, protopack.VarintType}, protopack.Varint(1017), 190*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.VarintType}, protopack.Varint(1016), 191*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.EndGroupType}, 192*1c12ee1eSDan Willemsen }.Marshal(), 193*1c12ee1eSDan Willemsen }, 194*1c12ee1eSDan Willemsen { 195*1c12ee1eSDan Willemsen desc: "groups (field overridden)", 196*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 197*1c12ee1eSDan Willemsen "optionalgroup": protobuild.Message{ 198*1c12ee1eSDan Willemsen "a": 2, 199*1c12ee1eSDan Willemsen }, 200*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}), 201*1c12ee1eSDan Willemsen wire: protopack.Message{ 202*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.StartGroupType}, 203*1c12ee1eSDan Willemsen protopack.Tag{17, protopack.VarintType}, protopack.Varint(1), 204*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.EndGroupType}, 205*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.StartGroupType}, 206*1c12ee1eSDan Willemsen protopack.Tag{17, protopack.VarintType}, protopack.Varint(2), 207*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.EndGroupType}, 208*1c12ee1eSDan Willemsen }.Marshal(), 209*1c12ee1eSDan Willemsen }, 210*1c12ee1eSDan Willemsen { 211*1c12ee1eSDan Willemsen desc: "messages", 212*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 213*1c12ee1eSDan Willemsen "optional_nested_message": protobuild.Message{ 214*1c12ee1eSDan Willemsen "a": 42, 215*1c12ee1eSDan Willemsen "corecursive": protobuild.Message{ 216*1c12ee1eSDan Willemsen "optional_int32": 43, 217*1c12ee1eSDan Willemsen }, 218*1c12ee1eSDan Willemsen }, 219*1c12ee1eSDan Willemsen }), 220*1c12ee1eSDan Willemsen wire: protopack.Message{ 221*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 222*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(42), 223*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 224*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(43), 225*1c12ee1eSDan Willemsen }), 226*1c12ee1eSDan Willemsen }), 227*1c12ee1eSDan Willemsen }.Marshal(), 228*1c12ee1eSDan Willemsen }, 229*1c12ee1eSDan Willemsen { 230*1c12ee1eSDan Willemsen desc: "messages (split across multiple tags)", 231*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 232*1c12ee1eSDan Willemsen "optional_nested_message": protobuild.Message{ 233*1c12ee1eSDan Willemsen "a": 42, 234*1c12ee1eSDan Willemsen "corecursive": protobuild.Message{ 235*1c12ee1eSDan Willemsen "optional_int32": 43, 236*1c12ee1eSDan Willemsen }, 237*1c12ee1eSDan Willemsen }, 238*1c12ee1eSDan Willemsen }), 239*1c12ee1eSDan Willemsen wire: protopack.Message{ 240*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 241*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(42), 242*1c12ee1eSDan Willemsen }), 243*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 244*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 245*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(43), 246*1c12ee1eSDan Willemsen }), 247*1c12ee1eSDan Willemsen }), 248*1c12ee1eSDan Willemsen }.Marshal(), 249*1c12ee1eSDan Willemsen }, 250*1c12ee1eSDan Willemsen { 251*1c12ee1eSDan Willemsen desc: "messages (field overridden)", 252*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 253*1c12ee1eSDan Willemsen "optional_nested_message": protobuild.Message{ 254*1c12ee1eSDan Willemsen "a": 2, 255*1c12ee1eSDan Willemsen }, 256*1c12ee1eSDan Willemsen }), 257*1c12ee1eSDan Willemsen wire: protopack.Message{ 258*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 259*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 260*1c12ee1eSDan Willemsen }), 261*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 262*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 263*1c12ee1eSDan Willemsen }), 264*1c12ee1eSDan Willemsen }.Marshal(), 265*1c12ee1eSDan Willemsen }, 266*1c12ee1eSDan Willemsen { 267*1c12ee1eSDan Willemsen desc: "basic repeated types", 268*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 269*1c12ee1eSDan Willemsen "repeated_int32": []int32{1001, 2001}, 270*1c12ee1eSDan Willemsen "repeated_int64": []int64{1002, 2002}, 271*1c12ee1eSDan Willemsen "repeated_uint32": []uint32{1003, 2003}, 272*1c12ee1eSDan Willemsen "repeated_uint64": []uint64{1004, 2004}, 273*1c12ee1eSDan Willemsen "repeated_sint32": []int32{1005, 2005}, 274*1c12ee1eSDan Willemsen "repeated_sint64": []int64{1006, 2006}, 275*1c12ee1eSDan Willemsen "repeated_fixed32": []uint32{1007, 2007}, 276*1c12ee1eSDan Willemsen "repeated_fixed64": []uint64{1008, 2008}, 277*1c12ee1eSDan Willemsen "repeated_sfixed32": []int32{1009, 2009}, 278*1c12ee1eSDan Willemsen "repeated_sfixed64": []int64{1010, 2010}, 279*1c12ee1eSDan Willemsen "repeated_float": []float32{1011.5, 2011.5}, 280*1c12ee1eSDan Willemsen "repeated_double": []float64{1012.5, 2012.5}, 281*1c12ee1eSDan Willemsen "repeated_bool": []bool{true, false}, 282*1c12ee1eSDan Willemsen "repeated_string": []string{"foo", "bar"}, 283*1c12ee1eSDan Willemsen "repeated_bytes": []string{"FOO", "BAR"}, 284*1c12ee1eSDan Willemsen "repeated_nested_enum": []string{"FOO", "BAR"}, 285*1c12ee1eSDan Willemsen }), 286*1c12ee1eSDan Willemsen wire: protopack.Message{ 287*1c12ee1eSDan Willemsen protopack.Tag{31, protopack.VarintType}, protopack.Varint(1001), 288*1c12ee1eSDan Willemsen protopack.Tag{31, protopack.VarintType}, protopack.Varint(2001), 289*1c12ee1eSDan Willemsen protopack.Tag{32, protopack.VarintType}, protopack.Varint(1002), 290*1c12ee1eSDan Willemsen protopack.Tag{32, protopack.VarintType}, protopack.Varint(2002), 291*1c12ee1eSDan Willemsen protopack.Tag{33, protopack.VarintType}, protopack.Uvarint(1003), 292*1c12ee1eSDan Willemsen protopack.Tag{33, protopack.VarintType}, protopack.Uvarint(2003), 293*1c12ee1eSDan Willemsen protopack.Tag{34, protopack.VarintType}, protopack.Uvarint(1004), 294*1c12ee1eSDan Willemsen protopack.Tag{34, protopack.VarintType}, protopack.Uvarint(2004), 295*1c12ee1eSDan Willemsen protopack.Tag{35, protopack.VarintType}, protopack.Svarint(1005), 296*1c12ee1eSDan Willemsen protopack.Tag{35, protopack.VarintType}, protopack.Svarint(2005), 297*1c12ee1eSDan Willemsen protopack.Tag{36, protopack.VarintType}, protopack.Svarint(1006), 298*1c12ee1eSDan Willemsen protopack.Tag{36, protopack.VarintType}, protopack.Svarint(2006), 299*1c12ee1eSDan Willemsen protopack.Tag{37, protopack.Fixed32Type}, protopack.Uint32(1007), 300*1c12ee1eSDan Willemsen protopack.Tag{37, protopack.Fixed32Type}, protopack.Uint32(2007), 301*1c12ee1eSDan Willemsen protopack.Tag{38, protopack.Fixed64Type}, protopack.Uint64(1008), 302*1c12ee1eSDan Willemsen protopack.Tag{38, protopack.Fixed64Type}, protopack.Uint64(2008), 303*1c12ee1eSDan Willemsen protopack.Tag{39, protopack.Fixed32Type}, protopack.Int32(1009), 304*1c12ee1eSDan Willemsen protopack.Tag{39, protopack.Fixed32Type}, protopack.Int32(2009), 305*1c12ee1eSDan Willemsen protopack.Tag{40, protopack.Fixed64Type}, protopack.Int64(1010), 306*1c12ee1eSDan Willemsen protopack.Tag{40, protopack.Fixed64Type}, protopack.Int64(2010), 307*1c12ee1eSDan Willemsen protopack.Tag{41, protopack.Fixed32Type}, protopack.Float32(1011.5), 308*1c12ee1eSDan Willemsen protopack.Tag{41, protopack.Fixed32Type}, protopack.Float32(2011.5), 309*1c12ee1eSDan Willemsen protopack.Tag{42, protopack.Fixed64Type}, protopack.Float64(1012.5), 310*1c12ee1eSDan Willemsen protopack.Tag{42, protopack.Fixed64Type}, protopack.Float64(2012.5), 311*1c12ee1eSDan Willemsen protopack.Tag{43, protopack.VarintType}, protopack.Bool(true), 312*1c12ee1eSDan Willemsen protopack.Tag{43, protopack.VarintType}, protopack.Bool(false), 313*1c12ee1eSDan Willemsen protopack.Tag{44, protopack.BytesType}, protopack.String("foo"), 314*1c12ee1eSDan Willemsen protopack.Tag{44, protopack.BytesType}, protopack.String("bar"), 315*1c12ee1eSDan Willemsen protopack.Tag{45, protopack.BytesType}, protopack.Bytes([]byte("FOO")), 316*1c12ee1eSDan Willemsen protopack.Tag{45, protopack.BytesType}, protopack.Bytes([]byte("BAR")), 317*1c12ee1eSDan Willemsen protopack.Tag{51, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_FOO)), 318*1c12ee1eSDan Willemsen protopack.Tag{51, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR)), 319*1c12ee1eSDan Willemsen }.Marshal(), 320*1c12ee1eSDan Willemsen }, 321*1c12ee1eSDan Willemsen { 322*1c12ee1eSDan Willemsen desc: "basic repeated types (packed encoding)", 323*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 324*1c12ee1eSDan Willemsen "repeated_int32": []int32{1001, 2001}, 325*1c12ee1eSDan Willemsen "repeated_int64": []int64{1002, 2002}, 326*1c12ee1eSDan Willemsen "repeated_uint32": []uint32{1003, 2003}, 327*1c12ee1eSDan Willemsen "repeated_uint64": []uint64{1004, 2004}, 328*1c12ee1eSDan Willemsen "repeated_sint32": []int32{1005, 2005}, 329*1c12ee1eSDan Willemsen "repeated_sint64": []int64{1006, 2006}, 330*1c12ee1eSDan Willemsen "repeated_fixed32": []uint32{1007, 2007}, 331*1c12ee1eSDan Willemsen "repeated_fixed64": []uint64{1008, 2008}, 332*1c12ee1eSDan Willemsen "repeated_sfixed32": []int32{1009, 2009}, 333*1c12ee1eSDan Willemsen "repeated_sfixed64": []int64{1010, 2010}, 334*1c12ee1eSDan Willemsen "repeated_float": []float32{1011.5, 2011.5}, 335*1c12ee1eSDan Willemsen "repeated_double": []float64{1012.5, 2012.5}, 336*1c12ee1eSDan Willemsen "repeated_bool": []bool{true, false}, 337*1c12ee1eSDan Willemsen "repeated_nested_enum": []string{"FOO", "BAR"}, 338*1c12ee1eSDan Willemsen }), 339*1c12ee1eSDan Willemsen wire: protopack.Message{ 340*1c12ee1eSDan Willemsen protopack.Tag{31, protopack.BytesType}, protopack.LengthPrefix{ 341*1c12ee1eSDan Willemsen protopack.Varint(1001), protopack.Varint(2001), 342*1c12ee1eSDan Willemsen }, 343*1c12ee1eSDan Willemsen protopack.Tag{32, protopack.BytesType}, protopack.LengthPrefix{ 344*1c12ee1eSDan Willemsen protopack.Varint(1002), protopack.Varint(2002), 345*1c12ee1eSDan Willemsen }, 346*1c12ee1eSDan Willemsen protopack.Tag{33, protopack.BytesType}, protopack.LengthPrefix{ 347*1c12ee1eSDan Willemsen protopack.Uvarint(1003), protopack.Uvarint(2003), 348*1c12ee1eSDan Willemsen }, 349*1c12ee1eSDan Willemsen protopack.Tag{34, protopack.BytesType}, protopack.LengthPrefix{ 350*1c12ee1eSDan Willemsen protopack.Uvarint(1004), protopack.Uvarint(2004), 351*1c12ee1eSDan Willemsen }, 352*1c12ee1eSDan Willemsen protopack.Tag{35, protopack.BytesType}, protopack.LengthPrefix{ 353*1c12ee1eSDan Willemsen protopack.Svarint(1005), protopack.Svarint(2005), 354*1c12ee1eSDan Willemsen }, 355*1c12ee1eSDan Willemsen protopack.Tag{36, protopack.BytesType}, protopack.LengthPrefix{ 356*1c12ee1eSDan Willemsen protopack.Svarint(1006), protopack.Svarint(2006), 357*1c12ee1eSDan Willemsen }, 358*1c12ee1eSDan Willemsen protopack.Tag{37, protopack.BytesType}, protopack.LengthPrefix{ 359*1c12ee1eSDan Willemsen protopack.Uint32(1007), protopack.Uint32(2007), 360*1c12ee1eSDan Willemsen }, 361*1c12ee1eSDan Willemsen protopack.Tag{38, protopack.BytesType}, protopack.LengthPrefix{ 362*1c12ee1eSDan Willemsen protopack.Uint64(1008), protopack.Uint64(2008), 363*1c12ee1eSDan Willemsen }, 364*1c12ee1eSDan Willemsen protopack.Tag{39, protopack.BytesType}, protopack.LengthPrefix{ 365*1c12ee1eSDan Willemsen protopack.Int32(1009), protopack.Int32(2009), 366*1c12ee1eSDan Willemsen }, 367*1c12ee1eSDan Willemsen protopack.Tag{40, protopack.BytesType}, protopack.LengthPrefix{ 368*1c12ee1eSDan Willemsen protopack.Int64(1010), protopack.Int64(2010), 369*1c12ee1eSDan Willemsen }, 370*1c12ee1eSDan Willemsen protopack.Tag{41, protopack.BytesType}, protopack.LengthPrefix{ 371*1c12ee1eSDan Willemsen protopack.Float32(1011.5), protopack.Float32(2011.5), 372*1c12ee1eSDan Willemsen }, 373*1c12ee1eSDan Willemsen protopack.Tag{42, protopack.BytesType}, protopack.LengthPrefix{ 374*1c12ee1eSDan Willemsen protopack.Float64(1012.5), protopack.Float64(2012.5), 375*1c12ee1eSDan Willemsen }, 376*1c12ee1eSDan Willemsen protopack.Tag{43, protopack.BytesType}, protopack.LengthPrefix{ 377*1c12ee1eSDan Willemsen protopack.Bool(true), protopack.Bool(false), 378*1c12ee1eSDan Willemsen }, 379*1c12ee1eSDan Willemsen protopack.Tag{51, protopack.BytesType}, protopack.LengthPrefix{ 380*1c12ee1eSDan Willemsen protopack.Varint(int(testpb.TestAllTypes_FOO)), 381*1c12ee1eSDan Willemsen protopack.Varint(int(testpb.TestAllTypes_BAR)), 382*1c12ee1eSDan Willemsen }, 383*1c12ee1eSDan Willemsen }.Marshal(), 384*1c12ee1eSDan Willemsen }, 385*1c12ee1eSDan Willemsen { 386*1c12ee1eSDan Willemsen desc: "basic repeated types (zero-length packed encoding)", 387*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 388*1c12ee1eSDan Willemsen "repeated_int32": []int32{}, 389*1c12ee1eSDan Willemsen "repeated_int64": []int64{}, 390*1c12ee1eSDan Willemsen "repeated_uint32": []uint32{}, 391*1c12ee1eSDan Willemsen "repeated_uint64": []uint64{}, 392*1c12ee1eSDan Willemsen "repeated_sint32": []int32{}, 393*1c12ee1eSDan Willemsen "repeated_sint64": []int64{}, 394*1c12ee1eSDan Willemsen "repeated_fixed32": []uint32{}, 395*1c12ee1eSDan Willemsen "repeated_fixed64": []uint64{}, 396*1c12ee1eSDan Willemsen "repeated_sfixed32": []int32{}, 397*1c12ee1eSDan Willemsen "repeated_sfixed64": []int64{}, 398*1c12ee1eSDan Willemsen "repeated_float": []float32{}, 399*1c12ee1eSDan Willemsen "repeated_double": []float64{}, 400*1c12ee1eSDan Willemsen "repeated_bool": []bool{}, 401*1c12ee1eSDan Willemsen "repeated_nested_enum": []string{}, 402*1c12ee1eSDan Willemsen }), 403*1c12ee1eSDan Willemsen wire: protopack.Message{ 404*1c12ee1eSDan Willemsen protopack.Tag{31, protopack.BytesType}, protopack.LengthPrefix{}, 405*1c12ee1eSDan Willemsen protopack.Tag{32, protopack.BytesType}, protopack.LengthPrefix{}, 406*1c12ee1eSDan Willemsen protopack.Tag{33, protopack.BytesType}, protopack.LengthPrefix{}, 407*1c12ee1eSDan Willemsen protopack.Tag{34, protopack.BytesType}, protopack.LengthPrefix{}, 408*1c12ee1eSDan Willemsen protopack.Tag{35, protopack.BytesType}, protopack.LengthPrefix{}, 409*1c12ee1eSDan Willemsen protopack.Tag{36, protopack.BytesType}, protopack.LengthPrefix{}, 410*1c12ee1eSDan Willemsen protopack.Tag{37, protopack.BytesType}, protopack.LengthPrefix{}, 411*1c12ee1eSDan Willemsen protopack.Tag{38, protopack.BytesType}, protopack.LengthPrefix{}, 412*1c12ee1eSDan Willemsen protopack.Tag{39, protopack.BytesType}, protopack.LengthPrefix{}, 413*1c12ee1eSDan Willemsen protopack.Tag{40, protopack.BytesType}, protopack.LengthPrefix{}, 414*1c12ee1eSDan Willemsen protopack.Tag{41, protopack.BytesType}, protopack.LengthPrefix{}, 415*1c12ee1eSDan Willemsen protopack.Tag{42, protopack.BytesType}, protopack.LengthPrefix{}, 416*1c12ee1eSDan Willemsen protopack.Tag{43, protopack.BytesType}, protopack.LengthPrefix{}, 417*1c12ee1eSDan Willemsen protopack.Tag{51, protopack.BytesType}, protopack.LengthPrefix{}, 418*1c12ee1eSDan Willemsen }.Marshal(), 419*1c12ee1eSDan Willemsen }, 420*1c12ee1eSDan Willemsen { 421*1c12ee1eSDan Willemsen desc: "packed repeated types", 422*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 423*1c12ee1eSDan Willemsen "packed_int32": []int32{1001, 2001}, 424*1c12ee1eSDan Willemsen "packed_int64": []int64{1002, 2002}, 425*1c12ee1eSDan Willemsen "packed_uint32": []uint32{1003, 2003}, 426*1c12ee1eSDan Willemsen "packed_uint64": []uint64{1004, 2004}, 427*1c12ee1eSDan Willemsen "packed_sint32": []int32{1005, 2005}, 428*1c12ee1eSDan Willemsen "packed_sint64": []int64{1006, 2006}, 429*1c12ee1eSDan Willemsen "packed_fixed32": []uint32{1007, 2007}, 430*1c12ee1eSDan Willemsen "packed_fixed64": []uint64{1008, 2008}, 431*1c12ee1eSDan Willemsen "packed_sfixed32": []int32{1009, 2009}, 432*1c12ee1eSDan Willemsen "packed_sfixed64": []int64{1010, 2010}, 433*1c12ee1eSDan Willemsen "packed_float": []float32{1011.5, 2011.5}, 434*1c12ee1eSDan Willemsen "packed_double": []float64{1012.5, 2012.5}, 435*1c12ee1eSDan Willemsen "packed_bool": []bool{true, false}, 436*1c12ee1eSDan Willemsen "packed_enum": []string{"FOREIGN_FOO", "FOREIGN_BAR"}, 437*1c12ee1eSDan Willemsen }, &testpb.TestPackedTypes{}, &testpb.TestPackedExtensions{}), 438*1c12ee1eSDan Willemsen wire: protopack.Message{ 439*1c12ee1eSDan Willemsen protopack.Tag{90, protopack.BytesType}, protopack.LengthPrefix{ 440*1c12ee1eSDan Willemsen protopack.Varint(1001), protopack.Varint(2001), 441*1c12ee1eSDan Willemsen }, 442*1c12ee1eSDan Willemsen protopack.Tag{91, protopack.BytesType}, protopack.LengthPrefix{ 443*1c12ee1eSDan Willemsen protopack.Varint(1002), protopack.Varint(2002), 444*1c12ee1eSDan Willemsen }, 445*1c12ee1eSDan Willemsen protopack.Tag{92, protopack.BytesType}, protopack.LengthPrefix{ 446*1c12ee1eSDan Willemsen protopack.Uvarint(1003), protopack.Uvarint(2003), 447*1c12ee1eSDan Willemsen }, 448*1c12ee1eSDan Willemsen protopack.Tag{93, protopack.BytesType}, protopack.LengthPrefix{ 449*1c12ee1eSDan Willemsen protopack.Uvarint(1004), protopack.Uvarint(2004), 450*1c12ee1eSDan Willemsen }, 451*1c12ee1eSDan Willemsen protopack.Tag{94, protopack.BytesType}, protopack.LengthPrefix{ 452*1c12ee1eSDan Willemsen protopack.Svarint(1005), protopack.Svarint(2005), 453*1c12ee1eSDan Willemsen }, 454*1c12ee1eSDan Willemsen protopack.Tag{95, protopack.BytesType}, protopack.LengthPrefix{ 455*1c12ee1eSDan Willemsen protopack.Svarint(1006), protopack.Svarint(2006), 456*1c12ee1eSDan Willemsen }, 457*1c12ee1eSDan Willemsen protopack.Tag{96, protopack.BytesType}, protopack.LengthPrefix{ 458*1c12ee1eSDan Willemsen protopack.Uint32(1007), protopack.Uint32(2007), 459*1c12ee1eSDan Willemsen }, 460*1c12ee1eSDan Willemsen protopack.Tag{97, protopack.BytesType}, protopack.LengthPrefix{ 461*1c12ee1eSDan Willemsen protopack.Uint64(1008), protopack.Uint64(2008), 462*1c12ee1eSDan Willemsen }, 463*1c12ee1eSDan Willemsen protopack.Tag{98, protopack.BytesType}, protopack.LengthPrefix{ 464*1c12ee1eSDan Willemsen protopack.Int32(1009), protopack.Int32(2009), 465*1c12ee1eSDan Willemsen }, 466*1c12ee1eSDan Willemsen protopack.Tag{99, protopack.BytesType}, protopack.LengthPrefix{ 467*1c12ee1eSDan Willemsen protopack.Int64(1010), protopack.Int64(2010), 468*1c12ee1eSDan Willemsen }, 469*1c12ee1eSDan Willemsen protopack.Tag{100, protopack.BytesType}, protopack.LengthPrefix{ 470*1c12ee1eSDan Willemsen protopack.Float32(1011.5), protopack.Float32(2011.5), 471*1c12ee1eSDan Willemsen }, 472*1c12ee1eSDan Willemsen protopack.Tag{101, protopack.BytesType}, protopack.LengthPrefix{ 473*1c12ee1eSDan Willemsen protopack.Float64(1012.5), protopack.Float64(2012.5), 474*1c12ee1eSDan Willemsen }, 475*1c12ee1eSDan Willemsen protopack.Tag{102, protopack.BytesType}, protopack.LengthPrefix{ 476*1c12ee1eSDan Willemsen protopack.Bool(true), protopack.Bool(false), 477*1c12ee1eSDan Willemsen }, 478*1c12ee1eSDan Willemsen protopack.Tag{103, protopack.BytesType}, protopack.LengthPrefix{ 479*1c12ee1eSDan Willemsen protopack.Varint(int(testpb.ForeignEnum_FOREIGN_FOO)), 480*1c12ee1eSDan Willemsen protopack.Varint(int(testpb.ForeignEnum_FOREIGN_BAR)), 481*1c12ee1eSDan Willemsen }, 482*1c12ee1eSDan Willemsen }.Marshal(), 483*1c12ee1eSDan Willemsen }, 484*1c12ee1eSDan Willemsen { 485*1c12ee1eSDan Willemsen desc: "packed repeated types (zero length)", 486*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 487*1c12ee1eSDan Willemsen "packed_int32": []int32{}, 488*1c12ee1eSDan Willemsen "packed_int64": []int64{}, 489*1c12ee1eSDan Willemsen "packed_uint32": []uint32{}, 490*1c12ee1eSDan Willemsen "packed_uint64": []uint64{}, 491*1c12ee1eSDan Willemsen "packed_sint32": []int32{}, 492*1c12ee1eSDan Willemsen "packed_sint64": []int64{}, 493*1c12ee1eSDan Willemsen "packed_fixed32": []uint32{}, 494*1c12ee1eSDan Willemsen "packed_fixed64": []uint64{}, 495*1c12ee1eSDan Willemsen "packed_sfixed32": []int32{}, 496*1c12ee1eSDan Willemsen "packed_sfixed64": []int64{}, 497*1c12ee1eSDan Willemsen "packed_float": []float32{}, 498*1c12ee1eSDan Willemsen "packed_double": []float64{}, 499*1c12ee1eSDan Willemsen "packed_bool": []bool{}, 500*1c12ee1eSDan Willemsen "packed_enum": []string{}, 501*1c12ee1eSDan Willemsen }, &testpb.TestPackedTypes{}, &testpb.TestPackedExtensions{}), 502*1c12ee1eSDan Willemsen wire: protopack.Message{ 503*1c12ee1eSDan Willemsen protopack.Tag{90, protopack.BytesType}, protopack.LengthPrefix{}, 504*1c12ee1eSDan Willemsen protopack.Tag{91, protopack.BytesType}, protopack.LengthPrefix{}, 505*1c12ee1eSDan Willemsen protopack.Tag{92, protopack.BytesType}, protopack.LengthPrefix{}, 506*1c12ee1eSDan Willemsen protopack.Tag{93, protopack.BytesType}, protopack.LengthPrefix{}, 507*1c12ee1eSDan Willemsen protopack.Tag{94, protopack.BytesType}, protopack.LengthPrefix{}, 508*1c12ee1eSDan Willemsen protopack.Tag{95, protopack.BytesType}, protopack.LengthPrefix{}, 509*1c12ee1eSDan Willemsen protopack.Tag{96, protopack.BytesType}, protopack.LengthPrefix{}, 510*1c12ee1eSDan Willemsen protopack.Tag{97, protopack.BytesType}, protopack.LengthPrefix{}, 511*1c12ee1eSDan Willemsen protopack.Tag{98, protopack.BytesType}, protopack.LengthPrefix{}, 512*1c12ee1eSDan Willemsen protopack.Tag{99, protopack.BytesType}, protopack.LengthPrefix{}, 513*1c12ee1eSDan Willemsen protopack.Tag{100, protopack.BytesType}, protopack.LengthPrefix{}, 514*1c12ee1eSDan Willemsen protopack.Tag{101, protopack.BytesType}, protopack.LengthPrefix{}, 515*1c12ee1eSDan Willemsen protopack.Tag{102, protopack.BytesType}, protopack.LengthPrefix{}, 516*1c12ee1eSDan Willemsen protopack.Tag{103, protopack.BytesType}, protopack.LengthPrefix{}, 517*1c12ee1eSDan Willemsen }.Marshal(), 518*1c12ee1eSDan Willemsen }, 519*1c12ee1eSDan Willemsen { 520*1c12ee1eSDan Willemsen desc: "repeated messages", 521*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 522*1c12ee1eSDan Willemsen "repeated_nested_message": []protobuild.Message{ 523*1c12ee1eSDan Willemsen {"a": 1}, 524*1c12ee1eSDan Willemsen {}, 525*1c12ee1eSDan Willemsen {"a": 2}, 526*1c12ee1eSDan Willemsen }, 527*1c12ee1eSDan Willemsen }), 528*1c12ee1eSDan Willemsen wire: protopack.Message{ 529*1c12ee1eSDan Willemsen protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 530*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 531*1c12ee1eSDan Willemsen }), 532*1c12ee1eSDan Willemsen protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 533*1c12ee1eSDan Willemsen protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 534*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 535*1c12ee1eSDan Willemsen }), 536*1c12ee1eSDan Willemsen }.Marshal(), 537*1c12ee1eSDan Willemsen }, 538*1c12ee1eSDan Willemsen { 539*1c12ee1eSDan Willemsen desc: "repeated nil messages", 540*1c12ee1eSDan Willemsen decodeTo: []proto.Message{&testpb.TestAllTypes{ 541*1c12ee1eSDan Willemsen RepeatedNestedMessage: []*testpb.TestAllTypes_NestedMessage{ 542*1c12ee1eSDan Willemsen {A: proto.Int32(1)}, 543*1c12ee1eSDan Willemsen nil, 544*1c12ee1eSDan Willemsen {A: proto.Int32(2)}, 545*1c12ee1eSDan Willemsen }, 546*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{ 547*1c12ee1eSDan Willemsen RepeatedNestedMessage: []*test3pb.TestAllTypes_NestedMessage{ 548*1c12ee1eSDan Willemsen {A: 1}, 549*1c12ee1eSDan Willemsen nil, 550*1c12ee1eSDan Willemsen {A: 2}, 551*1c12ee1eSDan Willemsen }, 552*1c12ee1eSDan Willemsen }, build( 553*1c12ee1eSDan Willemsen &testpb.TestAllExtensions{}, 554*1c12ee1eSDan Willemsen extend(testpb.E_RepeatedNestedMessage, []*testpb.TestAllExtensions_NestedMessage{ 555*1c12ee1eSDan Willemsen {A: proto.Int32(1)}, 556*1c12ee1eSDan Willemsen nil, 557*1c12ee1eSDan Willemsen {A: proto.Int32(2)}, 558*1c12ee1eSDan Willemsen }), 559*1c12ee1eSDan Willemsen )}, 560*1c12ee1eSDan Willemsen wire: protopack.Message{ 561*1c12ee1eSDan Willemsen protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 562*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 563*1c12ee1eSDan Willemsen }), 564*1c12ee1eSDan Willemsen protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 565*1c12ee1eSDan Willemsen protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 566*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 567*1c12ee1eSDan Willemsen }), 568*1c12ee1eSDan Willemsen }.Marshal(), 569*1c12ee1eSDan Willemsen }, 570*1c12ee1eSDan Willemsen { 571*1c12ee1eSDan Willemsen desc: "repeated groups", 572*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 573*1c12ee1eSDan Willemsen "repeatedgroup": []protobuild.Message{ 574*1c12ee1eSDan Willemsen {"a": 1017}, 575*1c12ee1eSDan Willemsen {}, 576*1c12ee1eSDan Willemsen {"a": 2017}, 577*1c12ee1eSDan Willemsen }, 578*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}), 579*1c12ee1eSDan Willemsen wire: protopack.Message{ 580*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.StartGroupType}, 581*1c12ee1eSDan Willemsen protopack.Tag{47, protopack.VarintType}, protopack.Varint(1017), 582*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.EndGroupType}, 583*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.StartGroupType}, 584*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.EndGroupType}, 585*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.StartGroupType}, 586*1c12ee1eSDan Willemsen protopack.Tag{47, protopack.VarintType}, protopack.Varint(2017), 587*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.EndGroupType}, 588*1c12ee1eSDan Willemsen }.Marshal(), 589*1c12ee1eSDan Willemsen }, 590*1c12ee1eSDan Willemsen { 591*1c12ee1eSDan Willemsen desc: "repeated nil groups", 592*1c12ee1eSDan Willemsen decodeTo: []proto.Message{&testpb.TestAllTypes{ 593*1c12ee1eSDan Willemsen Repeatedgroup: []*testpb.TestAllTypes_RepeatedGroup{ 594*1c12ee1eSDan Willemsen {A: proto.Int32(1017)}, 595*1c12ee1eSDan Willemsen nil, 596*1c12ee1eSDan Willemsen {A: proto.Int32(2017)}, 597*1c12ee1eSDan Willemsen }, 598*1c12ee1eSDan Willemsen }, build( 599*1c12ee1eSDan Willemsen &testpb.TestAllExtensions{}, 600*1c12ee1eSDan Willemsen extend(testpb.E_Repeatedgroup, []*testpb.RepeatedGroup{ 601*1c12ee1eSDan Willemsen {A: proto.Int32(1017)}, 602*1c12ee1eSDan Willemsen nil, 603*1c12ee1eSDan Willemsen {A: proto.Int32(2017)}, 604*1c12ee1eSDan Willemsen }), 605*1c12ee1eSDan Willemsen )}, 606*1c12ee1eSDan Willemsen wire: protopack.Message{ 607*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.StartGroupType}, 608*1c12ee1eSDan Willemsen protopack.Tag{47, protopack.VarintType}, protopack.Varint(1017), 609*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.EndGroupType}, 610*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.StartGroupType}, 611*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.EndGroupType}, 612*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.StartGroupType}, 613*1c12ee1eSDan Willemsen protopack.Tag{47, protopack.VarintType}, protopack.Varint(2017), 614*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.EndGroupType}, 615*1c12ee1eSDan Willemsen }.Marshal(), 616*1c12ee1eSDan Willemsen }, 617*1c12ee1eSDan Willemsen { 618*1c12ee1eSDan Willemsen desc: "maps", 619*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 620*1c12ee1eSDan Willemsen "map_int32_int32": map[int32]int32{1056: 1156, 2056: 2156}, 621*1c12ee1eSDan Willemsen "map_int64_int64": map[int64]int64{1057: 1157, 2057: 2157}, 622*1c12ee1eSDan Willemsen "map_uint32_uint32": map[uint32]uint32{1058: 1158, 2058: 2158}, 623*1c12ee1eSDan Willemsen "map_uint64_uint64": map[uint64]uint64{1059: 1159, 2059: 2159}, 624*1c12ee1eSDan Willemsen "map_sint32_sint32": map[int32]int32{1060: 1160, 2060: 2160}, 625*1c12ee1eSDan Willemsen "map_sint64_sint64": map[int64]int64{1061: 1161, 2061: 2161}, 626*1c12ee1eSDan Willemsen "map_fixed32_fixed32": map[uint32]uint32{1062: 1162, 2062: 2162}, 627*1c12ee1eSDan Willemsen "map_fixed64_fixed64": map[uint64]uint64{1063: 1163, 2063: 2163}, 628*1c12ee1eSDan Willemsen "map_sfixed32_sfixed32": map[int32]int32{1064: 1164, 2064: 2164}, 629*1c12ee1eSDan Willemsen "map_sfixed64_sfixed64": map[int64]int64{1065: 1165, 2065: 2165}, 630*1c12ee1eSDan Willemsen "map_int32_float": map[int32]float32{1066: 1166.5, 2066: 2166.5}, 631*1c12ee1eSDan Willemsen "map_int32_double": map[int32]float64{1067: 1167.5, 2067: 2167.5}, 632*1c12ee1eSDan Willemsen "map_bool_bool": map[bool]bool{true: false, false: true}, 633*1c12ee1eSDan Willemsen "map_string_string": map[string]string{"69.1.key": "69.1.val", "69.2.key": "69.2.val"}, 634*1c12ee1eSDan Willemsen "map_string_bytes": map[string][]byte{"70.1.key": []byte("70.1.val"), "70.2.key": []byte("70.2.val")}, 635*1c12ee1eSDan Willemsen "map_string_nested_message": map[string]protobuild.Message{ 636*1c12ee1eSDan Willemsen "71.1.key": {"a": 1171}, 637*1c12ee1eSDan Willemsen "71.2.key": {"a": 2171}, 638*1c12ee1eSDan Willemsen }, 639*1c12ee1eSDan Willemsen "map_string_nested_enum": map[string]string{"73.1.key": "FOO", "73.2.key": "BAR"}, 640*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 641*1c12ee1eSDan Willemsen wire: protopack.Message{ 642*1c12ee1eSDan Willemsen protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 643*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1056), 644*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1156), 645*1c12ee1eSDan Willemsen }), 646*1c12ee1eSDan Willemsen protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 647*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2056), 648*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(2156), 649*1c12ee1eSDan Willemsen }), 650*1c12ee1eSDan Willemsen protopack.Tag{57, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 651*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1057), 652*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1157), 653*1c12ee1eSDan Willemsen }), 654*1c12ee1eSDan Willemsen protopack.Tag{57, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 655*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2057), 656*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(2157), 657*1c12ee1eSDan Willemsen }), 658*1c12ee1eSDan Willemsen protopack.Tag{58, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 659*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1058), 660*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1158), 661*1c12ee1eSDan Willemsen }), 662*1c12ee1eSDan Willemsen protopack.Tag{58, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 663*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2058), 664*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(2158), 665*1c12ee1eSDan Willemsen }), 666*1c12ee1eSDan Willemsen protopack.Tag{59, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 667*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1059), 668*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1159), 669*1c12ee1eSDan Willemsen }), 670*1c12ee1eSDan Willemsen protopack.Tag{59, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 671*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2059), 672*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(2159), 673*1c12ee1eSDan Willemsen }), 674*1c12ee1eSDan Willemsen protopack.Tag{60, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 675*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Svarint(1060), 676*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Svarint(1160), 677*1c12ee1eSDan Willemsen }), 678*1c12ee1eSDan Willemsen protopack.Tag{60, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 679*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Svarint(2060), 680*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Svarint(2160), 681*1c12ee1eSDan Willemsen }), 682*1c12ee1eSDan Willemsen protopack.Tag{61, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 683*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Svarint(1061), 684*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Svarint(1161), 685*1c12ee1eSDan Willemsen }), 686*1c12ee1eSDan Willemsen protopack.Tag{61, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 687*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Svarint(2061), 688*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Svarint(2161), 689*1c12ee1eSDan Willemsen }), 690*1c12ee1eSDan Willemsen protopack.Tag{62, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 691*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(1062), 692*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed32Type}, protopack.Int32(1162), 693*1c12ee1eSDan Willemsen }), 694*1c12ee1eSDan Willemsen protopack.Tag{62, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 695*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2062), 696*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed32Type}, protopack.Int32(2162), 697*1c12ee1eSDan Willemsen }), 698*1c12ee1eSDan Willemsen protopack.Tag{63, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 699*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(1063), 700*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed64Type}, protopack.Int64(1163), 701*1c12ee1eSDan Willemsen }), 702*1c12ee1eSDan Willemsen protopack.Tag{63, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 703*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(2063), 704*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed64Type}, protopack.Int64(2163), 705*1c12ee1eSDan Willemsen }), 706*1c12ee1eSDan Willemsen protopack.Tag{64, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 707*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(1064), 708*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed32Type}, protopack.Int32(1164), 709*1c12ee1eSDan Willemsen }), 710*1c12ee1eSDan Willemsen protopack.Tag{64, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 711*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2064), 712*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed32Type}, protopack.Int32(2164), 713*1c12ee1eSDan Willemsen }), 714*1c12ee1eSDan Willemsen protopack.Tag{65, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 715*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(1065), 716*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed64Type}, protopack.Int64(1165), 717*1c12ee1eSDan Willemsen }), 718*1c12ee1eSDan Willemsen protopack.Tag{65, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 719*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(2065), 720*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed64Type}, protopack.Int64(2165), 721*1c12ee1eSDan Willemsen }), 722*1c12ee1eSDan Willemsen protopack.Tag{66, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 723*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1066), 724*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed32Type}, protopack.Float32(1166.5), 725*1c12ee1eSDan Willemsen }), 726*1c12ee1eSDan Willemsen protopack.Tag{66, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 727*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2066), 728*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed32Type}, protopack.Float32(2166.5), 729*1c12ee1eSDan Willemsen }), 730*1c12ee1eSDan Willemsen protopack.Tag{67, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 731*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1067), 732*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed64Type}, protopack.Float64(1167.5), 733*1c12ee1eSDan Willemsen }), 734*1c12ee1eSDan Willemsen protopack.Tag{67, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 735*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2067), 736*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.Fixed64Type}, protopack.Float64(2167.5), 737*1c12ee1eSDan Willemsen }), 738*1c12ee1eSDan Willemsen protopack.Tag{68, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 739*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Bool(true), 740*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Bool(false), 741*1c12ee1eSDan Willemsen }), 742*1c12ee1eSDan Willemsen protopack.Tag{68, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 743*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Bool(false), 744*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Bool(true), 745*1c12ee1eSDan Willemsen }), 746*1c12ee1eSDan Willemsen protopack.Tag{69, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 747*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("69.1.key"), 748*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.String("69.1.val"), 749*1c12ee1eSDan Willemsen }), 750*1c12ee1eSDan Willemsen protopack.Tag{69, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 751*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("69.2.key"), 752*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.String("69.2.val"), 753*1c12ee1eSDan Willemsen }), 754*1c12ee1eSDan Willemsen protopack.Tag{70, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 755*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("70.1.key"), 756*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.String("70.1.val"), 757*1c12ee1eSDan Willemsen }), 758*1c12ee1eSDan Willemsen protopack.Tag{70, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 759*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("70.2.key"), 760*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.String("70.2.val"), 761*1c12ee1eSDan Willemsen }), 762*1c12ee1eSDan Willemsen protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 763*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("71.1.key"), 764*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 765*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1171), 766*1c12ee1eSDan Willemsen }), 767*1c12ee1eSDan Willemsen }), 768*1c12ee1eSDan Willemsen protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 769*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("71.2.key"), 770*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 771*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2171), 772*1c12ee1eSDan Willemsen }), 773*1c12ee1eSDan Willemsen }), 774*1c12ee1eSDan Willemsen protopack.Tag{73, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 775*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("73.1.key"), 776*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_FOO)), 777*1c12ee1eSDan Willemsen }), 778*1c12ee1eSDan Willemsen protopack.Tag{73, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 779*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("73.2.key"), 780*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR)), 781*1c12ee1eSDan Willemsen }), 782*1c12ee1eSDan Willemsen }.Marshal(), 783*1c12ee1eSDan Willemsen }, 784*1c12ee1eSDan Willemsen { 785*1c12ee1eSDan Willemsen desc: "map with value before key", 786*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 787*1c12ee1eSDan Willemsen "map_int32_int32": map[int32]int32{1056: 1156}, 788*1c12ee1eSDan Willemsen "map_string_nested_message": map[string]protobuild.Message{ 789*1c12ee1eSDan Willemsen "71.1.key": {"a": 1171}, 790*1c12ee1eSDan Willemsen }, 791*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 792*1c12ee1eSDan Willemsen wire: protopack.Message{ 793*1c12ee1eSDan Willemsen protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 794*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1156), 795*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1056), 796*1c12ee1eSDan Willemsen }), 797*1c12ee1eSDan Willemsen protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 798*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 799*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1171), 800*1c12ee1eSDan Willemsen }), 801*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("71.1.key"), 802*1c12ee1eSDan Willemsen }), 803*1c12ee1eSDan Willemsen }.Marshal(), 804*1c12ee1eSDan Willemsen }, 805*1c12ee1eSDan Willemsen { 806*1c12ee1eSDan Willemsen desc: "map with repeated key and value", 807*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 808*1c12ee1eSDan Willemsen "map_int32_int32": map[int32]int32{1056: 1156}, 809*1c12ee1eSDan Willemsen "map_string_nested_message": map[string]protobuild.Message{ 810*1c12ee1eSDan Willemsen "71.1.key": {"a": 1171}, 811*1c12ee1eSDan Willemsen }, 812*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 813*1c12ee1eSDan Willemsen wire: protopack.Message{ 814*1c12ee1eSDan Willemsen protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 815*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(0), 816*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(0), 817*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1056), 818*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1156), 819*1c12ee1eSDan Willemsen }), 820*1c12ee1eSDan Willemsen protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 821*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String(""), 822*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 823*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("71.1.key"), 824*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 825*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1171), 826*1c12ee1eSDan Willemsen }), 827*1c12ee1eSDan Willemsen }), 828*1c12ee1eSDan Willemsen }.Marshal(), 829*1c12ee1eSDan Willemsen }, 830*1c12ee1eSDan Willemsen { 831*1c12ee1eSDan Willemsen desc: "oneof (uint32)", 832*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 833*1c12ee1eSDan Willemsen "oneof_uint32": 1111, 834*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 835*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{111, protopack.VarintType}, protopack.Varint(1111)}.Marshal(), 836*1c12ee1eSDan Willemsen }, 837*1c12ee1eSDan Willemsen { 838*1c12ee1eSDan Willemsen desc: "oneof (message)", 839*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 840*1c12ee1eSDan Willemsen "oneof_nested_message": protobuild.Message{ 841*1c12ee1eSDan Willemsen "a": 1112, 842*1c12ee1eSDan Willemsen }, 843*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 844*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 845*1c12ee1eSDan Willemsen protopack.Message{protopack.Tag{1, protopack.VarintType}, protopack.Varint(1112)}, 846*1c12ee1eSDan Willemsen })}.Marshal(), 847*1c12ee1eSDan Willemsen }, 848*1c12ee1eSDan Willemsen { 849*1c12ee1eSDan Willemsen desc: "oneof (empty message)", 850*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 851*1c12ee1eSDan Willemsen "oneof_nested_message": protobuild.Message{}, 852*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 853*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{})}.Marshal(), 854*1c12ee1eSDan Willemsen }, 855*1c12ee1eSDan Willemsen { 856*1c12ee1eSDan Willemsen desc: "oneof (merged message)", 857*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 858*1c12ee1eSDan Willemsen "oneof_nested_message": protobuild.Message{ 859*1c12ee1eSDan Willemsen "a": 1, 860*1c12ee1eSDan Willemsen "corecursive": protobuild.Message{ 861*1c12ee1eSDan Willemsen "optional_int32": 43, 862*1c12ee1eSDan Willemsen }, 863*1c12ee1eSDan Willemsen }, 864*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 865*1c12ee1eSDan Willemsen wire: protopack.Message{ 866*1c12ee1eSDan Willemsen protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 867*1c12ee1eSDan Willemsen protopack.Message{protopack.Tag{1, protopack.VarintType}, protopack.Varint(1)}, 868*1c12ee1eSDan Willemsen }), 869*1c12ee1eSDan Willemsen protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 870*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 871*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(43), 872*1c12ee1eSDan Willemsen }), 873*1c12ee1eSDan Willemsen }), 874*1c12ee1eSDan Willemsen }.Marshal(), 875*1c12ee1eSDan Willemsen }, 876*1c12ee1eSDan Willemsen { 877*1c12ee1eSDan Willemsen desc: "oneof (group)", 878*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 879*1c12ee1eSDan Willemsen "oneofgroup": protobuild.Message{ 880*1c12ee1eSDan Willemsen "a": 1, 881*1c12ee1eSDan Willemsen }, 882*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}), 883*1c12ee1eSDan Willemsen wire: protopack.Message{ 884*1c12ee1eSDan Willemsen protopack.Tag{121, protopack.StartGroupType}, 885*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 886*1c12ee1eSDan Willemsen protopack.Tag{121, protopack.EndGroupType}, 887*1c12ee1eSDan Willemsen }.Marshal(), 888*1c12ee1eSDan Willemsen }, 889*1c12ee1eSDan Willemsen { 890*1c12ee1eSDan Willemsen desc: "oneof (empty group)", 891*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 892*1c12ee1eSDan Willemsen "oneofgroup": protobuild.Message{}, 893*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}), 894*1c12ee1eSDan Willemsen wire: protopack.Message{ 895*1c12ee1eSDan Willemsen protopack.Tag{121, protopack.StartGroupType}, 896*1c12ee1eSDan Willemsen protopack.Tag{121, protopack.EndGroupType}, 897*1c12ee1eSDan Willemsen }.Marshal(), 898*1c12ee1eSDan Willemsen }, 899*1c12ee1eSDan Willemsen { 900*1c12ee1eSDan Willemsen desc: "oneof (merged group)", 901*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 902*1c12ee1eSDan Willemsen "oneofgroup": protobuild.Message{ 903*1c12ee1eSDan Willemsen "a": 1, 904*1c12ee1eSDan Willemsen "b": 2, 905*1c12ee1eSDan Willemsen }, 906*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}), 907*1c12ee1eSDan Willemsen wire: protopack.Message{ 908*1c12ee1eSDan Willemsen protopack.Tag{121, protopack.StartGroupType}, 909*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 910*1c12ee1eSDan Willemsen protopack.Tag{121, protopack.EndGroupType}, 911*1c12ee1eSDan Willemsen protopack.Tag{121, protopack.StartGroupType}, 912*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(2), 913*1c12ee1eSDan Willemsen protopack.Tag{121, protopack.EndGroupType}, 914*1c12ee1eSDan Willemsen }.Marshal(), 915*1c12ee1eSDan Willemsen }, 916*1c12ee1eSDan Willemsen { 917*1c12ee1eSDan Willemsen desc: "oneof (string)", 918*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 919*1c12ee1eSDan Willemsen "oneof_string": "1113", 920*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 921*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{113, protopack.BytesType}, protopack.String("1113")}.Marshal(), 922*1c12ee1eSDan Willemsen }, 923*1c12ee1eSDan Willemsen { 924*1c12ee1eSDan Willemsen desc: "oneof (bytes)", 925*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 926*1c12ee1eSDan Willemsen "oneof_bytes": "1114", 927*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 928*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{114, protopack.BytesType}, protopack.String("1114")}.Marshal(), 929*1c12ee1eSDan Willemsen }, 930*1c12ee1eSDan Willemsen { 931*1c12ee1eSDan Willemsen desc: "oneof (bool)", 932*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 933*1c12ee1eSDan Willemsen "oneof_bool": true, 934*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 935*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{115, protopack.VarintType}, protopack.Bool(true)}.Marshal(), 936*1c12ee1eSDan Willemsen }, 937*1c12ee1eSDan Willemsen { 938*1c12ee1eSDan Willemsen desc: "oneof (uint64)", 939*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 940*1c12ee1eSDan Willemsen "oneof_uint64": 116, 941*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 942*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{116, protopack.VarintType}, protopack.Varint(116)}.Marshal(), 943*1c12ee1eSDan Willemsen }, 944*1c12ee1eSDan Willemsen { 945*1c12ee1eSDan Willemsen desc: "oneof (float)", 946*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 947*1c12ee1eSDan Willemsen "oneof_float": 117.5, 948*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 949*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{117, protopack.Fixed32Type}, protopack.Float32(117.5)}.Marshal(), 950*1c12ee1eSDan Willemsen }, 951*1c12ee1eSDan Willemsen { 952*1c12ee1eSDan Willemsen desc: "oneof (double)", 953*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 954*1c12ee1eSDan Willemsen "oneof_double": 118.5, 955*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 956*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{118, protopack.Fixed64Type}, protopack.Float64(118.5)}.Marshal(), 957*1c12ee1eSDan Willemsen }, 958*1c12ee1eSDan Willemsen { 959*1c12ee1eSDan Willemsen desc: "oneof (enum)", 960*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 961*1c12ee1eSDan Willemsen "oneof_enum": "BAR", 962*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 963*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{119, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR))}.Marshal(), 964*1c12ee1eSDan Willemsen }, 965*1c12ee1eSDan Willemsen { 966*1c12ee1eSDan Willemsen desc: "oneof (zero)", 967*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 968*1c12ee1eSDan Willemsen "oneof_uint64": 0, 969*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 970*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{116, protopack.VarintType}, protopack.Varint(0)}.Marshal(), 971*1c12ee1eSDan Willemsen }, 972*1c12ee1eSDan Willemsen { 973*1c12ee1eSDan Willemsen desc: "oneof (overridden value)", 974*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 975*1c12ee1eSDan Willemsen "oneof_uint64": 2, 976*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 977*1c12ee1eSDan Willemsen wire: protopack.Message{ 978*1c12ee1eSDan Willemsen protopack.Tag{111, protopack.VarintType}, protopack.Varint(1), 979*1c12ee1eSDan Willemsen protopack.Tag{116, protopack.VarintType}, protopack.Varint(2), 980*1c12ee1eSDan Willemsen }.Marshal(), 981*1c12ee1eSDan Willemsen }, 982*1c12ee1eSDan Willemsen // TODO: More unknown field tests for ordering, repeated fields, etc. 983*1c12ee1eSDan Willemsen // 984*1c12ee1eSDan Willemsen // It is currently impossible to produce results that the v1 Equal 985*1c12ee1eSDan Willemsen // considers equivalent to those of the v1 decoder. Figure out if 986*1c12ee1eSDan Willemsen // that's a problem or not. 987*1c12ee1eSDan Willemsen { 988*1c12ee1eSDan Willemsen desc: "unknown fields", 989*1c12ee1eSDan Willemsen checkFastInit: true, 990*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 991*1c12ee1eSDan Willemsen protobuild.Unknown: protopack.Message{ 992*1c12ee1eSDan Willemsen protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1), 993*1c12ee1eSDan Willemsen }.Marshal(), 994*1c12ee1eSDan Willemsen }), 995*1c12ee1eSDan Willemsen wire: protopack.Message{ 996*1c12ee1eSDan Willemsen protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1), 997*1c12ee1eSDan Willemsen }.Marshal(), 998*1c12ee1eSDan Willemsen }, 999*1c12ee1eSDan Willemsen { 1000*1c12ee1eSDan Willemsen desc: "discarded unknown fields", 1001*1c12ee1eSDan Willemsen unmarshalOptions: proto.UnmarshalOptions{ 1002*1c12ee1eSDan Willemsen DiscardUnknown: true, 1003*1c12ee1eSDan Willemsen }, 1004*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{}), 1005*1c12ee1eSDan Willemsen wire: protopack.Message{ 1006*1c12ee1eSDan Willemsen protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1), 1007*1c12ee1eSDan Willemsen }.Marshal(), 1008*1c12ee1eSDan Willemsen }, 1009*1c12ee1eSDan Willemsen { 1010*1c12ee1eSDan Willemsen desc: "field type mismatch", 1011*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1012*1c12ee1eSDan Willemsen protobuild.Unknown: protopack.Message{ 1013*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("string"), 1014*1c12ee1eSDan Willemsen }.Marshal(), 1015*1c12ee1eSDan Willemsen }), 1016*1c12ee1eSDan Willemsen wire: protopack.Message{ 1017*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("string"), 1018*1c12ee1eSDan Willemsen }.Marshal(), 1019*1c12ee1eSDan Willemsen }, 1020*1c12ee1eSDan Willemsen { 1021*1c12ee1eSDan Willemsen desc: "map field element mismatch", 1022*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1023*1c12ee1eSDan Willemsen "map_int32_int32": map[int32]int32{1: 0}, 1024*1c12ee1eSDan Willemsen }, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}), 1025*1c12ee1eSDan Willemsen wire: protopack.Message{ 1026*1c12ee1eSDan Willemsen protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1027*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1028*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.String("string"), 1029*1c12ee1eSDan Willemsen }), 1030*1c12ee1eSDan Willemsen }.Marshal(), 1031*1c12ee1eSDan Willemsen }, 1032*1c12ee1eSDan Willemsen { 1033*1c12ee1eSDan Willemsen desc: "required field in nil message unset", 1034*1c12ee1eSDan Willemsen checkFastInit: true, 1035*1c12ee1eSDan Willemsen partial: true, 1036*1c12ee1eSDan Willemsen decodeTo: []proto.Message{(*testpb.TestRequired)(nil)}, 1037*1c12ee1eSDan Willemsen }, 1038*1c12ee1eSDan Willemsen { 1039*1c12ee1eSDan Willemsen desc: "required int32 unset", 1040*1c12ee1eSDan Willemsen checkFastInit: true, 1041*1c12ee1eSDan Willemsen partial: true, 1042*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Int32{}), 1043*1c12ee1eSDan Willemsen }, 1044*1c12ee1eSDan Willemsen { 1045*1c12ee1eSDan Willemsen desc: "required int32 set", 1046*1c12ee1eSDan Willemsen checkFastInit: true, 1047*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1048*1c12ee1eSDan Willemsen "v": 1, 1049*1c12ee1eSDan Willemsen }, &requiredpb.Int32{}), 1050*1c12ee1eSDan Willemsen wire: protopack.Message{ 1051*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1052*1c12ee1eSDan Willemsen }.Marshal(), 1053*1c12ee1eSDan Willemsen }, 1054*1c12ee1eSDan Willemsen { 1055*1c12ee1eSDan Willemsen desc: "required fixed32 unset", 1056*1c12ee1eSDan Willemsen checkFastInit: true, 1057*1c12ee1eSDan Willemsen partial: true, 1058*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Fixed32{}), 1059*1c12ee1eSDan Willemsen }, 1060*1c12ee1eSDan Willemsen { 1061*1c12ee1eSDan Willemsen desc: "required fixed32 set", 1062*1c12ee1eSDan Willemsen checkFastInit: true, 1063*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1064*1c12ee1eSDan Willemsen "v": 1, 1065*1c12ee1eSDan Willemsen }, &requiredpb.Fixed32{}), 1066*1c12ee1eSDan Willemsen wire: protopack.Message{ 1067*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(1), 1068*1c12ee1eSDan Willemsen }.Marshal(), 1069*1c12ee1eSDan Willemsen }, 1070*1c12ee1eSDan Willemsen { 1071*1c12ee1eSDan Willemsen desc: "required fixed64 unset", 1072*1c12ee1eSDan Willemsen checkFastInit: true, 1073*1c12ee1eSDan Willemsen partial: true, 1074*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Fixed64{}), 1075*1c12ee1eSDan Willemsen }, 1076*1c12ee1eSDan Willemsen { 1077*1c12ee1eSDan Willemsen desc: "required fixed64 set", 1078*1c12ee1eSDan Willemsen checkFastInit: true, 1079*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1080*1c12ee1eSDan Willemsen "v": 1, 1081*1c12ee1eSDan Willemsen }, &requiredpb.Fixed64{}), 1082*1c12ee1eSDan Willemsen wire: protopack.Message{ 1083*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(1), 1084*1c12ee1eSDan Willemsen }.Marshal(), 1085*1c12ee1eSDan Willemsen }, 1086*1c12ee1eSDan Willemsen { 1087*1c12ee1eSDan Willemsen desc: "required bytes unset", 1088*1c12ee1eSDan Willemsen checkFastInit: true, 1089*1c12ee1eSDan Willemsen partial: true, 1090*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Bytes{}), 1091*1c12ee1eSDan Willemsen }, 1092*1c12ee1eSDan Willemsen { 1093*1c12ee1eSDan Willemsen desc: "required bytes set", 1094*1c12ee1eSDan Willemsen checkFastInit: true, 1095*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1096*1c12ee1eSDan Willemsen "v": "", 1097*1c12ee1eSDan Willemsen }, &requiredpb.Bytes{}), 1098*1c12ee1eSDan Willemsen wire: protopack.Message{ 1099*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.Bytes(nil), 1100*1c12ee1eSDan Willemsen }.Marshal(), 1101*1c12ee1eSDan Willemsen }, 1102*1c12ee1eSDan Willemsen { 1103*1c12ee1eSDan Willemsen desc: "required message unset", 1104*1c12ee1eSDan Willemsen checkFastInit: true, 1105*1c12ee1eSDan Willemsen partial: true, 1106*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Message{}), 1107*1c12ee1eSDan Willemsen }, 1108*1c12ee1eSDan Willemsen { 1109*1c12ee1eSDan Willemsen desc: "required message set", 1110*1c12ee1eSDan Willemsen checkFastInit: true, 1111*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1112*1c12ee1eSDan Willemsen "v": protobuild.Message{}, 1113*1c12ee1eSDan Willemsen }, &requiredpb.Message{}), 1114*1c12ee1eSDan Willemsen wire: protopack.Message{ 1115*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 1116*1c12ee1eSDan Willemsen }.Marshal(), 1117*1c12ee1eSDan Willemsen }, 1118*1c12ee1eSDan Willemsen { 1119*1c12ee1eSDan Willemsen desc: "required group unset", 1120*1c12ee1eSDan Willemsen checkFastInit: true, 1121*1c12ee1eSDan Willemsen partial: true, 1122*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{}, &requiredpb.Group{}), 1123*1c12ee1eSDan Willemsen }, 1124*1c12ee1eSDan Willemsen { 1125*1c12ee1eSDan Willemsen desc: "required group set", 1126*1c12ee1eSDan Willemsen checkFastInit: true, 1127*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1128*1c12ee1eSDan Willemsen "group": protobuild.Message{}, 1129*1c12ee1eSDan Willemsen }, &requiredpb.Group{}), 1130*1c12ee1eSDan Willemsen wire: protopack.Message{ 1131*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 1132*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 1133*1c12ee1eSDan Willemsen }.Marshal(), 1134*1c12ee1eSDan Willemsen }, 1135*1c12ee1eSDan Willemsen { 1136*1c12ee1eSDan Willemsen desc: "required field with incompatible wire type", 1137*1c12ee1eSDan Willemsen checkFastInit: true, 1138*1c12ee1eSDan Willemsen partial: true, 1139*1c12ee1eSDan Willemsen decodeTo: []proto.Message{build( 1140*1c12ee1eSDan Willemsen &testpb.TestRequired{}, 1141*1c12ee1eSDan Willemsen unknown(protopack.Message{ 1142*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2), 1143*1c12ee1eSDan Willemsen }.Marshal()), 1144*1c12ee1eSDan Willemsen )}, 1145*1c12ee1eSDan Willemsen wire: protopack.Message{ 1146*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2), 1147*1c12ee1eSDan Willemsen }.Marshal(), 1148*1c12ee1eSDan Willemsen }, 1149*1c12ee1eSDan Willemsen { 1150*1c12ee1eSDan Willemsen desc: "required field in optional message unset", 1151*1c12ee1eSDan Willemsen checkFastInit: true, 1152*1c12ee1eSDan Willemsen partial: true, 1153*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1154*1c12ee1eSDan Willemsen "optional_message": protobuild.Message{}, 1155*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1156*1c12ee1eSDan Willemsen wire: protopack.Message{ 1157*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 1158*1c12ee1eSDan Willemsen }.Marshal(), 1159*1c12ee1eSDan Willemsen }, 1160*1c12ee1eSDan Willemsen { 1161*1c12ee1eSDan Willemsen desc: "required field in optional message set", 1162*1c12ee1eSDan Willemsen checkFastInit: true, 1163*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1164*1c12ee1eSDan Willemsen "optional_message": protobuild.Message{ 1165*1c12ee1eSDan Willemsen "required_field": 1, 1166*1c12ee1eSDan Willemsen }, 1167*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1168*1c12ee1eSDan Willemsen wire: protopack.Message{ 1169*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1170*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1171*1c12ee1eSDan Willemsen }), 1172*1c12ee1eSDan Willemsen }.Marshal(), 1173*1c12ee1eSDan Willemsen }, 1174*1c12ee1eSDan Willemsen { 1175*1c12ee1eSDan Willemsen desc: "required field in optional message set (split across multiple tags)", 1176*1c12ee1eSDan Willemsen checkFastInit: false, // fast init checks don't handle split messages 1177*1c12ee1eSDan Willemsen nocheckValidInit: true, // validation doesn't either 1178*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1179*1c12ee1eSDan Willemsen "optional_message": protobuild.Message{ 1180*1c12ee1eSDan Willemsen "required_field": 1, 1181*1c12ee1eSDan Willemsen }, 1182*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1183*1c12ee1eSDan Willemsen wire: protopack.Message{ 1184*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 1185*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1186*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1187*1c12ee1eSDan Willemsen }), 1188*1c12ee1eSDan Willemsen }.Marshal(), 1189*1c12ee1eSDan Willemsen }, 1190*1c12ee1eSDan Willemsen { 1191*1c12ee1eSDan Willemsen desc: "required field in repeated message unset", 1192*1c12ee1eSDan Willemsen checkFastInit: true, 1193*1c12ee1eSDan Willemsen partial: true, 1194*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1195*1c12ee1eSDan Willemsen "repeated_message": []protobuild.Message{ 1196*1c12ee1eSDan Willemsen {"required_field": 1}, 1197*1c12ee1eSDan Willemsen {}, 1198*1c12ee1eSDan Willemsen }, 1199*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1200*1c12ee1eSDan Willemsen wire: protopack.Message{ 1201*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1202*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1203*1c12ee1eSDan Willemsen }), 1204*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 1205*1c12ee1eSDan Willemsen }.Marshal(), 1206*1c12ee1eSDan Willemsen }, 1207*1c12ee1eSDan Willemsen { 1208*1c12ee1eSDan Willemsen desc: "required field in repeated message set", 1209*1c12ee1eSDan Willemsen checkFastInit: true, 1210*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1211*1c12ee1eSDan Willemsen "repeated_message": []protobuild.Message{ 1212*1c12ee1eSDan Willemsen {"required_field": 1}, 1213*1c12ee1eSDan Willemsen {"required_field": 2}, 1214*1c12ee1eSDan Willemsen }, 1215*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1216*1c12ee1eSDan Willemsen wire: protopack.Message{ 1217*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1218*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1219*1c12ee1eSDan Willemsen }), 1220*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1221*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 1222*1c12ee1eSDan Willemsen }), 1223*1c12ee1eSDan Willemsen }.Marshal(), 1224*1c12ee1eSDan Willemsen }, 1225*1c12ee1eSDan Willemsen { 1226*1c12ee1eSDan Willemsen desc: "required field in map message unset", 1227*1c12ee1eSDan Willemsen checkFastInit: true, 1228*1c12ee1eSDan Willemsen partial: true, 1229*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1230*1c12ee1eSDan Willemsen "map_message": map[int32]protobuild.Message{ 1231*1c12ee1eSDan Willemsen 1: {"required_field": 1}, 1232*1c12ee1eSDan Willemsen 2: {}, 1233*1c12ee1eSDan Willemsen }, 1234*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1235*1c12ee1eSDan Willemsen wire: protopack.Message{ 1236*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1237*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1238*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1239*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1240*1c12ee1eSDan Willemsen }), 1241*1c12ee1eSDan Willemsen }), 1242*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1243*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 1244*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 1245*1c12ee1eSDan Willemsen }), 1246*1c12ee1eSDan Willemsen }.Marshal(), 1247*1c12ee1eSDan Willemsen }, 1248*1c12ee1eSDan Willemsen { 1249*1c12ee1eSDan Willemsen desc: "required field in absent map message value", 1250*1c12ee1eSDan Willemsen checkFastInit: true, 1251*1c12ee1eSDan Willemsen partial: true, 1252*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1253*1c12ee1eSDan Willemsen "map_message": map[int32]protobuild.Message{ 1254*1c12ee1eSDan Willemsen 2: {}, 1255*1c12ee1eSDan Willemsen }, 1256*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1257*1c12ee1eSDan Willemsen wire: protopack.Message{ 1258*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1259*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 1260*1c12ee1eSDan Willemsen }), 1261*1c12ee1eSDan Willemsen }.Marshal(), 1262*1c12ee1eSDan Willemsen }, 1263*1c12ee1eSDan Willemsen { 1264*1c12ee1eSDan Willemsen desc: "required field in map message set", 1265*1c12ee1eSDan Willemsen checkFastInit: true, 1266*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1267*1c12ee1eSDan Willemsen "map_message": map[int32]protobuild.Message{ 1268*1c12ee1eSDan Willemsen 1: {"required_field": 1}, 1269*1c12ee1eSDan Willemsen 2: {"required_field": 2}, 1270*1c12ee1eSDan Willemsen }, 1271*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1272*1c12ee1eSDan Willemsen wire: protopack.Message{ 1273*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1274*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1275*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1276*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1277*1c12ee1eSDan Willemsen }), 1278*1c12ee1eSDan Willemsen }), 1279*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1280*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 1281*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1282*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 1283*1c12ee1eSDan Willemsen }), 1284*1c12ee1eSDan Willemsen }), 1285*1c12ee1eSDan Willemsen }.Marshal(), 1286*1c12ee1eSDan Willemsen }, 1287*1c12ee1eSDan Willemsen { 1288*1c12ee1eSDan Willemsen desc: "required field in optional group unset", 1289*1c12ee1eSDan Willemsen checkFastInit: true, 1290*1c12ee1eSDan Willemsen partial: true, 1291*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1292*1c12ee1eSDan Willemsen "optionalgroup": protobuild.Message{}, 1293*1c12ee1eSDan Willemsen }, &testpb.TestRequiredGroupFields{}), 1294*1c12ee1eSDan Willemsen wire: protopack.Message{ 1295*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 1296*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 1297*1c12ee1eSDan Willemsen }.Marshal(), 1298*1c12ee1eSDan Willemsen }, 1299*1c12ee1eSDan Willemsen { 1300*1c12ee1eSDan Willemsen desc: "required field in optional group set", 1301*1c12ee1eSDan Willemsen checkFastInit: true, 1302*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1303*1c12ee1eSDan Willemsen "optionalgroup": protobuild.Message{ 1304*1c12ee1eSDan Willemsen "a": 1, 1305*1c12ee1eSDan Willemsen }, 1306*1c12ee1eSDan Willemsen }, &testpb.TestRequiredGroupFields{}), 1307*1c12ee1eSDan Willemsen wire: protopack.Message{ 1308*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 1309*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1), 1310*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 1311*1c12ee1eSDan Willemsen }.Marshal(), 1312*1c12ee1eSDan Willemsen }, 1313*1c12ee1eSDan Willemsen { 1314*1c12ee1eSDan Willemsen desc: "required field in repeated group unset", 1315*1c12ee1eSDan Willemsen checkFastInit: true, 1316*1c12ee1eSDan Willemsen partial: true, 1317*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1318*1c12ee1eSDan Willemsen "repeatedgroup": []protobuild.Message{ 1319*1c12ee1eSDan Willemsen {"a": 1}, 1320*1c12ee1eSDan Willemsen {}, 1321*1c12ee1eSDan Willemsen }, 1322*1c12ee1eSDan Willemsen }, &testpb.TestRequiredGroupFields{}), 1323*1c12ee1eSDan Willemsen wire: protopack.Message{ 1324*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.StartGroupType}, 1325*1c12ee1eSDan Willemsen protopack.Tag{4, protopack.VarintType}, protopack.Varint(1), 1326*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.EndGroupType}, 1327*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.StartGroupType}, 1328*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.EndGroupType}, 1329*1c12ee1eSDan Willemsen }.Marshal(), 1330*1c12ee1eSDan Willemsen }, 1331*1c12ee1eSDan Willemsen { 1332*1c12ee1eSDan Willemsen desc: "required field in repeated group set", 1333*1c12ee1eSDan Willemsen checkFastInit: true, 1334*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1335*1c12ee1eSDan Willemsen "repeatedgroup": []protobuild.Message{ 1336*1c12ee1eSDan Willemsen {"a": 1}, 1337*1c12ee1eSDan Willemsen {"a": 2}, 1338*1c12ee1eSDan Willemsen }, 1339*1c12ee1eSDan Willemsen }, &testpb.TestRequiredGroupFields{}), 1340*1c12ee1eSDan Willemsen wire: protopack.Message{ 1341*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.StartGroupType}, 1342*1c12ee1eSDan Willemsen protopack.Tag{4, protopack.VarintType}, protopack.Varint(1), 1343*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.EndGroupType}, 1344*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.StartGroupType}, 1345*1c12ee1eSDan Willemsen protopack.Tag{4, protopack.VarintType}, protopack.Varint(2), 1346*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.EndGroupType}, 1347*1c12ee1eSDan Willemsen }.Marshal(), 1348*1c12ee1eSDan Willemsen }, 1349*1c12ee1eSDan Willemsen { 1350*1c12ee1eSDan Willemsen desc: "required field in oneof message unset", 1351*1c12ee1eSDan Willemsen checkFastInit: true, 1352*1c12ee1eSDan Willemsen partial: true, 1353*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1354*1c12ee1eSDan Willemsen "oneof_message": protobuild.Message{}, 1355*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1356*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{4, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{})}.Marshal(), 1357*1c12ee1eSDan Willemsen }, 1358*1c12ee1eSDan Willemsen { 1359*1c12ee1eSDan Willemsen desc: "required field in oneof message set", 1360*1c12ee1eSDan Willemsen checkFastInit: true, 1361*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1362*1c12ee1eSDan Willemsen "oneof_message": protobuild.Message{ 1363*1c12ee1eSDan Willemsen "required_field": 1, 1364*1c12ee1eSDan Willemsen }, 1365*1c12ee1eSDan Willemsen }, &testpb.TestRequiredForeign{}), 1366*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{4, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1367*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1368*1c12ee1eSDan Willemsen })}.Marshal(), 1369*1c12ee1eSDan Willemsen }, 1370*1c12ee1eSDan Willemsen { 1371*1c12ee1eSDan Willemsen desc: "required field in extension message unset", 1372*1c12ee1eSDan Willemsen checkFastInit: true, 1373*1c12ee1eSDan Willemsen partial: true, 1374*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1375*1c12ee1eSDan Willemsen "single": protobuild.Message{}, 1376*1c12ee1eSDan Willemsen }, &testpb.TestAllExtensions{}), 1377*1c12ee1eSDan Willemsen wire: protopack.Message{ 1378*1c12ee1eSDan Willemsen protopack.Tag{1000, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 1379*1c12ee1eSDan Willemsen }.Marshal(), 1380*1c12ee1eSDan Willemsen }, 1381*1c12ee1eSDan Willemsen { 1382*1c12ee1eSDan Willemsen desc: "required field in extension message set", 1383*1c12ee1eSDan Willemsen checkFastInit: true, 1384*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1385*1c12ee1eSDan Willemsen "single": protobuild.Message{ 1386*1c12ee1eSDan Willemsen "required_field": 1, 1387*1c12ee1eSDan Willemsen }, 1388*1c12ee1eSDan Willemsen }, &testpb.TestAllExtensions{}), 1389*1c12ee1eSDan Willemsen wire: protopack.Message{ 1390*1c12ee1eSDan Willemsen protopack.Tag{1000, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1391*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1392*1c12ee1eSDan Willemsen }), 1393*1c12ee1eSDan Willemsen }.Marshal(), 1394*1c12ee1eSDan Willemsen }, 1395*1c12ee1eSDan Willemsen { 1396*1c12ee1eSDan Willemsen desc: "required field in repeated extension message unset", 1397*1c12ee1eSDan Willemsen checkFastInit: true, 1398*1c12ee1eSDan Willemsen partial: true, 1399*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1400*1c12ee1eSDan Willemsen "multi": []protobuild.Message{ 1401*1c12ee1eSDan Willemsen {"required_field": 1}, 1402*1c12ee1eSDan Willemsen {}, 1403*1c12ee1eSDan Willemsen }, 1404*1c12ee1eSDan Willemsen }, &testpb.TestAllExtensions{}), 1405*1c12ee1eSDan Willemsen wire: protopack.Message{ 1406*1c12ee1eSDan Willemsen protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1407*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1408*1c12ee1eSDan Willemsen }), 1409*1c12ee1eSDan Willemsen protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 1410*1c12ee1eSDan Willemsen }.Marshal(), 1411*1c12ee1eSDan Willemsen }, 1412*1c12ee1eSDan Willemsen { 1413*1c12ee1eSDan Willemsen desc: "required field in repeated extension message set", 1414*1c12ee1eSDan Willemsen checkFastInit: true, 1415*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1416*1c12ee1eSDan Willemsen "multi": []protobuild.Message{ 1417*1c12ee1eSDan Willemsen {"required_field": 1}, 1418*1c12ee1eSDan Willemsen {"required_field": 2}, 1419*1c12ee1eSDan Willemsen }, 1420*1c12ee1eSDan Willemsen }, &testpb.TestAllExtensions{}), 1421*1c12ee1eSDan Willemsen wire: protopack.Message{ 1422*1c12ee1eSDan Willemsen protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1423*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1424*1c12ee1eSDan Willemsen }), 1425*1c12ee1eSDan Willemsen protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1426*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(2), 1427*1c12ee1eSDan Willemsen }), 1428*1c12ee1eSDan Willemsen }.Marshal(), 1429*1c12ee1eSDan Willemsen }, 1430*1c12ee1eSDan Willemsen { 1431*1c12ee1eSDan Willemsen desc: "nil messages", 1432*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1433*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1434*1c12ee1eSDan Willemsen (*test3pb.TestAllTypes)(nil), 1435*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1436*1c12ee1eSDan Willemsen }, 1437*1c12ee1eSDan Willemsen }, 1438*1c12ee1eSDan Willemsen { 1439*1c12ee1eSDan Willemsen desc: "legacy", 1440*1c12ee1eSDan Willemsen partial: true, 1441*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1442*1c12ee1eSDan Willemsen "f1": protobuild.Message{ 1443*1c12ee1eSDan Willemsen "optional_int32": 1, 1444*1c12ee1eSDan Willemsen "optional_child_enum": "ALPHA", 1445*1c12ee1eSDan Willemsen "optional_child_message": protobuild.Message{ 1446*1c12ee1eSDan Willemsen "f1": "x", 1447*1c12ee1eSDan Willemsen }, 1448*1c12ee1eSDan Willemsen "optionalgroup": protobuild.Message{ 1449*1c12ee1eSDan Willemsen "f1": "x", 1450*1c12ee1eSDan Willemsen }, 1451*1c12ee1eSDan Willemsen "repeated_child_message": []protobuild.Message{ 1452*1c12ee1eSDan Willemsen {"f1": "x"}, 1453*1c12ee1eSDan Willemsen }, 1454*1c12ee1eSDan Willemsen "repeatedgroup": []protobuild.Message{ 1455*1c12ee1eSDan Willemsen {"f1": "x"}, 1456*1c12ee1eSDan Willemsen }, 1457*1c12ee1eSDan Willemsen "map_bool_child_message": map[bool]protobuild.Message{ 1458*1c12ee1eSDan Willemsen true: {"f1": "x"}, 1459*1c12ee1eSDan Willemsen }, 1460*1c12ee1eSDan Willemsen "oneof_child_message": protobuild.Message{ 1461*1c12ee1eSDan Willemsen "f1": "x", 1462*1c12ee1eSDan Willemsen }, 1463*1c12ee1eSDan Willemsen }, 1464*1c12ee1eSDan Willemsen }, &legacypb.Legacy{}), 1465*1c12ee1eSDan Willemsen wire: protopack.Message{ 1466*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1467*1c12ee1eSDan Willemsen protopack.Tag{101, protopack.VarintType}, protopack.Varint(1), 1468*1c12ee1eSDan Willemsen protopack.Tag{115, protopack.VarintType}, protopack.Varint(0), 1469*1c12ee1eSDan Willemsen protopack.Tag{116, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1470*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("x"), 1471*1c12ee1eSDan Willemsen }), 1472*1c12ee1eSDan Willemsen protopack.Tag{120, protopack.StartGroupType}, 1473*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("x"), 1474*1c12ee1eSDan Willemsen protopack.Tag{120, protopack.EndGroupType}, 1475*1c12ee1eSDan Willemsen protopack.Tag{516, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1476*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("x"), 1477*1c12ee1eSDan Willemsen }), 1478*1c12ee1eSDan Willemsen protopack.Tag{520, protopack.StartGroupType}, 1479*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("x"), 1480*1c12ee1eSDan Willemsen protopack.Tag{520, protopack.EndGroupType}, 1481*1c12ee1eSDan Willemsen protopack.Tag{616, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1482*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 1483*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1484*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("x"), 1485*1c12ee1eSDan Willemsen }), 1486*1c12ee1eSDan Willemsen }), 1487*1c12ee1eSDan Willemsen protopack.Tag{716, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1488*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("x"), 1489*1c12ee1eSDan Willemsen }), 1490*1c12ee1eSDan Willemsen }), 1491*1c12ee1eSDan Willemsen }.Marshal(), 1492*1c12ee1eSDan Willemsen validationStatus: impl.ValidationUnknown, 1493*1c12ee1eSDan Willemsen }, 1494*1c12ee1eSDan Willemsen { 1495*1c12ee1eSDan Willemsen desc: "first reserved field number", 1496*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1497*1c12ee1eSDan Willemsen protobuild.Unknown: protopack.Message{ 1498*1c12ee1eSDan Willemsen protopack.Tag{protopack.FirstReservedNumber, protopack.VarintType}, protopack.Varint(1004), 1499*1c12ee1eSDan Willemsen }.Marshal(), 1500*1c12ee1eSDan Willemsen }), 1501*1c12ee1eSDan Willemsen wire: protopack.Message{ 1502*1c12ee1eSDan Willemsen protopack.Tag{protopack.FirstReservedNumber, protopack.VarintType}, protopack.Varint(1004), 1503*1c12ee1eSDan Willemsen }.Marshal(), 1504*1c12ee1eSDan Willemsen }, 1505*1c12ee1eSDan Willemsen { 1506*1c12ee1eSDan Willemsen desc: "last reserved field number", 1507*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1508*1c12ee1eSDan Willemsen protobuild.Unknown: protopack.Message{ 1509*1c12ee1eSDan Willemsen protopack.Tag{protopack.LastReservedNumber, protopack.VarintType}, protopack.Varint(1005), 1510*1c12ee1eSDan Willemsen }.Marshal(), 1511*1c12ee1eSDan Willemsen }), 1512*1c12ee1eSDan Willemsen wire: protopack.Message{ 1513*1c12ee1eSDan Willemsen protopack.Tag{protopack.LastReservedNumber, protopack.VarintType}, protopack.Varint(1005), 1514*1c12ee1eSDan Willemsen }.Marshal(), 1515*1c12ee1eSDan Willemsen }, 1516*1c12ee1eSDan Willemsen { 1517*1c12ee1eSDan Willemsen desc: "nested unknown extension", 1518*1c12ee1eSDan Willemsen unmarshalOptions: proto.UnmarshalOptions{ 1519*1c12ee1eSDan Willemsen DiscardUnknown: true, 1520*1c12ee1eSDan Willemsen Resolver: filterResolver{ 1521*1c12ee1eSDan Willemsen filter: func(name protoreflect.FullName) bool { 1522*1c12ee1eSDan Willemsen switch name.Name() { 1523*1c12ee1eSDan Willemsen case "optional_nested_message", 1524*1c12ee1eSDan Willemsen "optional_int32": 1525*1c12ee1eSDan Willemsen return true 1526*1c12ee1eSDan Willemsen } 1527*1c12ee1eSDan Willemsen return false 1528*1c12ee1eSDan Willemsen }, 1529*1c12ee1eSDan Willemsen resolver: protoregistry.GlobalTypes, 1530*1c12ee1eSDan Willemsen }, 1531*1c12ee1eSDan Willemsen }, 1532*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1533*1c12ee1eSDan Willemsen "optional_nested_message": protobuild.Message{ 1534*1c12ee1eSDan Willemsen "corecursive": protobuild.Message{ 1535*1c12ee1eSDan Willemsen "optional_nested_message": protobuild.Message{ 1536*1c12ee1eSDan Willemsen "corecursive": protobuild.Message{ 1537*1c12ee1eSDan Willemsen "optional_int32": 42, 1538*1c12ee1eSDan Willemsen }, 1539*1c12ee1eSDan Willemsen }, 1540*1c12ee1eSDan Willemsen }, 1541*1c12ee1eSDan Willemsen }, 1542*1c12ee1eSDan Willemsen }, &testpb.TestAllExtensions{}), 1543*1c12ee1eSDan Willemsen wire: protopack.Message{ 1544*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1545*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1546*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1547*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1548*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(42), 1549*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(43), 1550*1c12ee1eSDan Willemsen }), 1551*1c12ee1eSDan Willemsen }), 1552*1c12ee1eSDan Willemsen }), 1553*1c12ee1eSDan Willemsen }), 1554*1c12ee1eSDan Willemsen }.Marshal(), 1555*1c12ee1eSDan Willemsen }, 1556*1c12ee1eSDan Willemsen} 1557*1c12ee1eSDan Willemsen 1558*1c12ee1eSDan Willemsenvar testInvalidMessages = []testProto{ 1559*1c12ee1eSDan Willemsen { 1560*1c12ee1eSDan Willemsen desc: "invalid UTF-8 in optional string field", 1561*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1562*1c12ee1eSDan Willemsen "optional_string": "abc\xff", 1563*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{}), 1564*1c12ee1eSDan Willemsen wire: protopack.Message{ 1565*1c12ee1eSDan Willemsen protopack.Tag{14, protopack.BytesType}, protopack.String("abc\xff"), 1566*1c12ee1eSDan Willemsen }.Marshal(), 1567*1c12ee1eSDan Willemsen }, 1568*1c12ee1eSDan Willemsen { 1569*1c12ee1eSDan Willemsen desc: "invalid UTF-8 in singular string field", 1570*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1571*1c12ee1eSDan Willemsen "singular_string": "abc\xff", 1572*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{}), 1573*1c12ee1eSDan Willemsen wire: protopack.Message{ 1574*1c12ee1eSDan Willemsen protopack.Tag{94, protopack.BytesType}, protopack.String("abc\xff"), 1575*1c12ee1eSDan Willemsen }.Marshal(), 1576*1c12ee1eSDan Willemsen }, 1577*1c12ee1eSDan Willemsen { 1578*1c12ee1eSDan Willemsen desc: "invalid UTF-8 in repeated string field", 1579*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1580*1c12ee1eSDan Willemsen "repeated_string": []string{"foo", "abc\xff"}, 1581*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{}), 1582*1c12ee1eSDan Willemsen wire: protopack.Message{ 1583*1c12ee1eSDan Willemsen protopack.Tag{44, protopack.BytesType}, protopack.String("foo"), 1584*1c12ee1eSDan Willemsen protopack.Tag{44, protopack.BytesType}, protopack.String("abc\xff"), 1585*1c12ee1eSDan Willemsen }.Marshal(), 1586*1c12ee1eSDan Willemsen }, 1587*1c12ee1eSDan Willemsen { 1588*1c12ee1eSDan Willemsen desc: "invalid UTF-8 in nested message", 1589*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1590*1c12ee1eSDan Willemsen "optional_nested_message": protobuild.Message{ 1591*1c12ee1eSDan Willemsen "corecursive": protobuild.Message{ 1592*1c12ee1eSDan Willemsen "singular_string": "abc\xff", 1593*1c12ee1eSDan Willemsen }, 1594*1c12ee1eSDan Willemsen }, 1595*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{}), 1596*1c12ee1eSDan Willemsen wire: protopack.Message{ 1597*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1598*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1599*1c12ee1eSDan Willemsen protopack.Tag{94, protopack.BytesType}, protopack.String("abc\xff"), 1600*1c12ee1eSDan Willemsen }), 1601*1c12ee1eSDan Willemsen }), 1602*1c12ee1eSDan Willemsen }.Marshal(), 1603*1c12ee1eSDan Willemsen }, 1604*1c12ee1eSDan Willemsen { 1605*1c12ee1eSDan Willemsen desc: "invalid UTF-8 in oneof field", 1606*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1607*1c12ee1eSDan Willemsen "oneof_string": "abc\xff", 1608*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{}), 1609*1c12ee1eSDan Willemsen wire: protopack.Message{protopack.Tag{113, protopack.BytesType}, protopack.String("abc\xff")}.Marshal(), 1610*1c12ee1eSDan Willemsen }, 1611*1c12ee1eSDan Willemsen { 1612*1c12ee1eSDan Willemsen desc: "invalid UTF-8 in map key", 1613*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1614*1c12ee1eSDan Willemsen "map_string_string": map[string]string{"key\xff": "val"}, 1615*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{}), 1616*1c12ee1eSDan Willemsen wire: protopack.Message{ 1617*1c12ee1eSDan Willemsen protopack.Tag{69, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1618*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("key\xff"), 1619*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.String("val"), 1620*1c12ee1eSDan Willemsen }), 1621*1c12ee1eSDan Willemsen }.Marshal(), 1622*1c12ee1eSDan Willemsen }, 1623*1c12ee1eSDan Willemsen { 1624*1c12ee1eSDan Willemsen desc: "invalid UTF-8 in map value", 1625*1c12ee1eSDan Willemsen decodeTo: makeMessages(protobuild.Message{ 1626*1c12ee1eSDan Willemsen "map_string_string": map[string]string{"key": "val\xff"}, 1627*1c12ee1eSDan Willemsen }, &test3pb.TestAllTypes{}), 1628*1c12ee1eSDan Willemsen wire: protopack.Message{ 1629*1c12ee1eSDan Willemsen protopack.Tag{69, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1630*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.String("key"), 1631*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.String("val\xff"), 1632*1c12ee1eSDan Willemsen }), 1633*1c12ee1eSDan Willemsen }.Marshal(), 1634*1c12ee1eSDan Willemsen }, 1635*1c12ee1eSDan Willemsen { 1636*1c12ee1eSDan Willemsen desc: "invalid field number zero", 1637*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1638*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1639*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1640*1c12ee1eSDan Willemsen }, 1641*1c12ee1eSDan Willemsen wire: protopack.Message{ 1642*1c12ee1eSDan Willemsen protopack.Tag{protopack.MinValidNumber - 1, protopack.VarintType}, protopack.Varint(1001), 1643*1c12ee1eSDan Willemsen }.Marshal(), 1644*1c12ee1eSDan Willemsen }, 1645*1c12ee1eSDan Willemsen { 1646*1c12ee1eSDan Willemsen desc: "invalid field numbers zero and one", 1647*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1648*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1649*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1650*1c12ee1eSDan Willemsen }, 1651*1c12ee1eSDan Willemsen wire: protopack.Message{ 1652*1c12ee1eSDan Willemsen protopack.Tag{protopack.MinValidNumber - 1, protopack.VarintType}, protopack.Varint(1002), 1653*1c12ee1eSDan Willemsen protopack.Tag{protopack.MinValidNumber, protopack.VarintType}, protopack.Varint(1003), 1654*1c12ee1eSDan Willemsen }.Marshal(), 1655*1c12ee1eSDan Willemsen }, 1656*1c12ee1eSDan Willemsen { 1657*1c12ee1eSDan Willemsen desc: "invalid field numbers max and max+1", 1658*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1659*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1660*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1661*1c12ee1eSDan Willemsen }, 1662*1c12ee1eSDan Willemsen wire: protopack.Message{ 1663*1c12ee1eSDan Willemsen protopack.Tag{protopack.MaxValidNumber, protopack.VarintType}, protopack.Varint(1006), 1664*1c12ee1eSDan Willemsen protopack.Tag{protopack.MaxValidNumber + 1, protopack.VarintType}, protopack.Varint(1007), 1665*1c12ee1eSDan Willemsen }.Marshal(), 1666*1c12ee1eSDan Willemsen }, 1667*1c12ee1eSDan Willemsen { 1668*1c12ee1eSDan Willemsen desc: "invalid field number max+1", 1669*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1670*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1671*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1672*1c12ee1eSDan Willemsen }, 1673*1c12ee1eSDan Willemsen wire: protopack.Message{ 1674*1c12ee1eSDan Willemsen protopack.Tag{protopack.MaxValidNumber + 1, protopack.VarintType}, protopack.Varint(1008), 1675*1c12ee1eSDan Willemsen }.Marshal(), 1676*1c12ee1eSDan Willemsen }, 1677*1c12ee1eSDan Willemsen { 1678*1c12ee1eSDan Willemsen desc: "invalid field number wraps int32", 1679*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1680*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1681*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1682*1c12ee1eSDan Willemsen }, 1683*1c12ee1eSDan Willemsen wire: protopack.Message{ 1684*1c12ee1eSDan Willemsen protopack.Varint(2234993595104), protopack.Varint(0), 1685*1c12ee1eSDan Willemsen }.Marshal(), 1686*1c12ee1eSDan Willemsen }, 1687*1c12ee1eSDan Willemsen { 1688*1c12ee1eSDan Willemsen desc: "invalid field number in map", 1689*1c12ee1eSDan Willemsen decodeTo: []proto.Message{(*testpb.TestAllTypes)(nil)}, 1690*1c12ee1eSDan Willemsen wire: protopack.Message{ 1691*1c12ee1eSDan Willemsen protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1692*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1056), 1693*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1156), 1694*1c12ee1eSDan Willemsen protopack.Tag{protopack.MaxValidNumber + 1, protopack.VarintType}, protopack.Varint(0), 1695*1c12ee1eSDan Willemsen }), 1696*1c12ee1eSDan Willemsen }.Marshal(), 1697*1c12ee1eSDan Willemsen }, 1698*1c12ee1eSDan Willemsen { 1699*1c12ee1eSDan Willemsen desc: "invalid tag varint", 1700*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1701*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1702*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1703*1c12ee1eSDan Willemsen }, 1704*1c12ee1eSDan Willemsen wire: []byte{0xff}, 1705*1c12ee1eSDan Willemsen }, 1706*1c12ee1eSDan Willemsen { 1707*1c12ee1eSDan Willemsen desc: "field number too small", 1708*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1709*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1710*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1711*1c12ee1eSDan Willemsen }, 1712*1c12ee1eSDan Willemsen wire: protopack.Message{ 1713*1c12ee1eSDan Willemsen protopack.Tag{0, protopack.VarintType}, protopack.Varint(0), 1714*1c12ee1eSDan Willemsen }.Marshal(), 1715*1c12ee1eSDan Willemsen }, 1716*1c12ee1eSDan Willemsen { 1717*1c12ee1eSDan Willemsen desc: "field number too large", 1718*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1719*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1720*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1721*1c12ee1eSDan Willemsen }, 1722*1c12ee1eSDan Willemsen wire: protopack.Message{ 1723*1c12ee1eSDan Willemsen protopack.Tag{protowire.MaxValidNumber + 1, protopack.VarintType}, protopack.Varint(0), 1724*1c12ee1eSDan Willemsen }.Marshal(), 1725*1c12ee1eSDan Willemsen }, 1726*1c12ee1eSDan Willemsen { 1727*1c12ee1eSDan Willemsen desc: "invalid tag varint in message field", 1728*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1729*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1730*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1731*1c12ee1eSDan Willemsen }, 1732*1c12ee1eSDan Willemsen wire: protopack.Message{ 1733*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1734*1c12ee1eSDan Willemsen protopack.Raw{0xff}, 1735*1c12ee1eSDan Willemsen }), 1736*1c12ee1eSDan Willemsen }.Marshal(), 1737*1c12ee1eSDan Willemsen }, 1738*1c12ee1eSDan Willemsen { 1739*1c12ee1eSDan Willemsen desc: "invalid tag varint in repeated message field", 1740*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1741*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1742*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1743*1c12ee1eSDan Willemsen }, 1744*1c12ee1eSDan Willemsen wire: protopack.Message{ 1745*1c12ee1eSDan Willemsen protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1746*1c12ee1eSDan Willemsen protopack.Raw{0xff}, 1747*1c12ee1eSDan Willemsen }), 1748*1c12ee1eSDan Willemsen }.Marshal(), 1749*1c12ee1eSDan Willemsen }, 1750*1c12ee1eSDan Willemsen { 1751*1c12ee1eSDan Willemsen desc: "invalid varint in group field", 1752*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1753*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1754*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1755*1c12ee1eSDan Willemsen }, 1756*1c12ee1eSDan Willemsen wire: protopack.Message{ 1757*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.StartGroupType}, 1758*1c12ee1eSDan Willemsen protopack.Tag{1000, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1759*1c12ee1eSDan Willemsen protopack.Raw{0xff}, 1760*1c12ee1eSDan Willemsen }), 1761*1c12ee1eSDan Willemsen protopack.Tag{16, protopack.EndGroupType}, 1762*1c12ee1eSDan Willemsen }.Marshal(), 1763*1c12ee1eSDan Willemsen }, 1764*1c12ee1eSDan Willemsen { 1765*1c12ee1eSDan Willemsen desc: "invalid varint in repeated group field", 1766*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1767*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1768*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1769*1c12ee1eSDan Willemsen }, 1770*1c12ee1eSDan Willemsen wire: protopack.Message{ 1771*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.StartGroupType}, 1772*1c12ee1eSDan Willemsen protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1773*1c12ee1eSDan Willemsen protopack.Raw{0xff}, 1774*1c12ee1eSDan Willemsen }), 1775*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.EndGroupType}, 1776*1c12ee1eSDan Willemsen }.Marshal(), 1777*1c12ee1eSDan Willemsen }, 1778*1c12ee1eSDan Willemsen { 1779*1c12ee1eSDan Willemsen desc: "unterminated repeated group field", 1780*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1781*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1782*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1783*1c12ee1eSDan Willemsen }, 1784*1c12ee1eSDan Willemsen wire: protopack.Message{ 1785*1c12ee1eSDan Willemsen protopack.Tag{46, protopack.StartGroupType}, 1786*1c12ee1eSDan Willemsen }.Marshal(), 1787*1c12ee1eSDan Willemsen }, 1788*1c12ee1eSDan Willemsen { 1789*1c12ee1eSDan Willemsen desc: "invalid tag varint in map item", 1790*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1791*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1792*1c12ee1eSDan Willemsen }, 1793*1c12ee1eSDan Willemsen wire: protopack.Message{ 1794*1c12ee1eSDan Willemsen protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1795*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(0), 1796*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(0), 1797*1c12ee1eSDan Willemsen protopack.Raw{0xff}, 1798*1c12ee1eSDan Willemsen }), 1799*1c12ee1eSDan Willemsen }.Marshal(), 1800*1c12ee1eSDan Willemsen }, 1801*1c12ee1eSDan Willemsen { 1802*1c12ee1eSDan Willemsen desc: "invalid tag varint in map message value", 1803*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1804*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1805*1c12ee1eSDan Willemsen }, 1806*1c12ee1eSDan Willemsen wire: protopack.Message{ 1807*1c12ee1eSDan Willemsen protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1808*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(0), 1809*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 1810*1c12ee1eSDan Willemsen protopack.Raw{0xff}, 1811*1c12ee1eSDan Willemsen }), 1812*1c12ee1eSDan Willemsen }), 1813*1c12ee1eSDan Willemsen }.Marshal(), 1814*1c12ee1eSDan Willemsen }, 1815*1c12ee1eSDan Willemsen { 1816*1c12ee1eSDan Willemsen desc: "invalid packed int32 field", 1817*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1818*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1819*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1820*1c12ee1eSDan Willemsen }, 1821*1c12ee1eSDan Willemsen wire: protopack.Message{ 1822*1c12ee1eSDan Willemsen protopack.Tag{31, protopack.BytesType}, protopack.Bytes{0xff}, 1823*1c12ee1eSDan Willemsen }.Marshal(), 1824*1c12ee1eSDan Willemsen }, 1825*1c12ee1eSDan Willemsen { 1826*1c12ee1eSDan Willemsen desc: "invalid packed int64 field", 1827*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1828*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1829*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1830*1c12ee1eSDan Willemsen }, 1831*1c12ee1eSDan Willemsen wire: protopack.Message{ 1832*1c12ee1eSDan Willemsen protopack.Tag{32, protopack.BytesType}, protopack.Bytes{0xff}, 1833*1c12ee1eSDan Willemsen }.Marshal(), 1834*1c12ee1eSDan Willemsen }, 1835*1c12ee1eSDan Willemsen { 1836*1c12ee1eSDan Willemsen desc: "invalid packed uint32 field", 1837*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1838*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1839*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1840*1c12ee1eSDan Willemsen }, 1841*1c12ee1eSDan Willemsen wire: protopack.Message{ 1842*1c12ee1eSDan Willemsen protopack.Tag{33, protopack.BytesType}, protopack.Bytes{0xff}, 1843*1c12ee1eSDan Willemsen }.Marshal(), 1844*1c12ee1eSDan Willemsen }, 1845*1c12ee1eSDan Willemsen { 1846*1c12ee1eSDan Willemsen desc: "invalid packed uint64 field", 1847*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1848*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1849*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1850*1c12ee1eSDan Willemsen }, 1851*1c12ee1eSDan Willemsen wire: protopack.Message{ 1852*1c12ee1eSDan Willemsen protopack.Tag{34, protopack.BytesType}, protopack.Bytes{0xff}, 1853*1c12ee1eSDan Willemsen }.Marshal(), 1854*1c12ee1eSDan Willemsen }, 1855*1c12ee1eSDan Willemsen { 1856*1c12ee1eSDan Willemsen desc: "invalid packed sint32 field", 1857*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1858*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1859*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1860*1c12ee1eSDan Willemsen }, 1861*1c12ee1eSDan Willemsen wire: protopack.Message{ 1862*1c12ee1eSDan Willemsen protopack.Tag{35, protopack.BytesType}, protopack.Bytes{0xff}, 1863*1c12ee1eSDan Willemsen }.Marshal(), 1864*1c12ee1eSDan Willemsen }, 1865*1c12ee1eSDan Willemsen { 1866*1c12ee1eSDan Willemsen desc: "invalid packed sint64 field", 1867*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1868*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1869*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1870*1c12ee1eSDan Willemsen }, 1871*1c12ee1eSDan Willemsen wire: protopack.Message{ 1872*1c12ee1eSDan Willemsen protopack.Tag{36, protopack.BytesType}, protopack.Bytes{0xff}, 1873*1c12ee1eSDan Willemsen }.Marshal(), 1874*1c12ee1eSDan Willemsen }, 1875*1c12ee1eSDan Willemsen { 1876*1c12ee1eSDan Willemsen desc: "invalid packed fixed32 field", 1877*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1878*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1879*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1880*1c12ee1eSDan Willemsen }, 1881*1c12ee1eSDan Willemsen wire: protopack.Message{ 1882*1c12ee1eSDan Willemsen protopack.Tag{37, protopack.BytesType}, protopack.Bytes{0x00}, 1883*1c12ee1eSDan Willemsen }.Marshal(), 1884*1c12ee1eSDan Willemsen }, 1885*1c12ee1eSDan Willemsen { 1886*1c12ee1eSDan Willemsen desc: "invalid packed fixed64 field", 1887*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1888*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1889*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1890*1c12ee1eSDan Willemsen }, 1891*1c12ee1eSDan Willemsen wire: protopack.Message{ 1892*1c12ee1eSDan Willemsen protopack.Tag{38, protopack.BytesType}, protopack.Bytes{0x00}, 1893*1c12ee1eSDan Willemsen }.Marshal(), 1894*1c12ee1eSDan Willemsen }, 1895*1c12ee1eSDan Willemsen { 1896*1c12ee1eSDan Willemsen desc: "invalid packed sfixed32 field", 1897*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1898*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1899*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1900*1c12ee1eSDan Willemsen }, 1901*1c12ee1eSDan Willemsen wire: protopack.Message{ 1902*1c12ee1eSDan Willemsen protopack.Tag{39, protopack.BytesType}, protopack.Bytes{0x00}, 1903*1c12ee1eSDan Willemsen }.Marshal(), 1904*1c12ee1eSDan Willemsen }, 1905*1c12ee1eSDan Willemsen { 1906*1c12ee1eSDan Willemsen desc: "invalid packed sfixed64 field", 1907*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1908*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1909*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1910*1c12ee1eSDan Willemsen }, 1911*1c12ee1eSDan Willemsen wire: protopack.Message{ 1912*1c12ee1eSDan Willemsen protopack.Tag{40, protopack.BytesType}, protopack.Bytes{0x00}, 1913*1c12ee1eSDan Willemsen }.Marshal(), 1914*1c12ee1eSDan Willemsen }, 1915*1c12ee1eSDan Willemsen { 1916*1c12ee1eSDan Willemsen desc: "invalid packed float field", 1917*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1918*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1919*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1920*1c12ee1eSDan Willemsen }, 1921*1c12ee1eSDan Willemsen wire: protopack.Message{ 1922*1c12ee1eSDan Willemsen protopack.Tag{41, protopack.BytesType}, protopack.Bytes{0x00}, 1923*1c12ee1eSDan Willemsen }.Marshal(), 1924*1c12ee1eSDan Willemsen }, 1925*1c12ee1eSDan Willemsen { 1926*1c12ee1eSDan Willemsen desc: "invalid packed double field", 1927*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1928*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1929*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1930*1c12ee1eSDan Willemsen }, 1931*1c12ee1eSDan Willemsen wire: protopack.Message{ 1932*1c12ee1eSDan Willemsen protopack.Tag{42, protopack.BytesType}, protopack.Bytes{0x00}, 1933*1c12ee1eSDan Willemsen }.Marshal(), 1934*1c12ee1eSDan Willemsen }, 1935*1c12ee1eSDan Willemsen { 1936*1c12ee1eSDan Willemsen desc: "invalid packed bool field", 1937*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1938*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1939*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1940*1c12ee1eSDan Willemsen }, 1941*1c12ee1eSDan Willemsen wire: protopack.Message{ 1942*1c12ee1eSDan Willemsen protopack.Tag{43, protopack.BytesType}, protopack.Bytes{0xff}, 1943*1c12ee1eSDan Willemsen }.Marshal(), 1944*1c12ee1eSDan Willemsen }, 1945*1c12ee1eSDan Willemsen { 1946*1c12ee1eSDan Willemsen desc: "bytes field overruns message", 1947*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1948*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1949*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1950*1c12ee1eSDan Willemsen }, 1951*1c12ee1eSDan Willemsen wire: protopack.Message{ 1952*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix{protopack.Message{ 1953*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix{protopack.Message{ 1954*1c12ee1eSDan Willemsen protopack.Tag{15, protopack.BytesType}, protopack.Varint(2), 1955*1c12ee1eSDan Willemsen }}, 1956*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(0), 1957*1c12ee1eSDan Willemsen }}, 1958*1c12ee1eSDan Willemsen }.Marshal(), 1959*1c12ee1eSDan Willemsen }, 1960*1c12ee1eSDan Willemsen { 1961*1c12ee1eSDan Willemsen desc: "varint field overruns message", 1962*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1963*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1964*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1965*1c12ee1eSDan Willemsen }, 1966*1c12ee1eSDan Willemsen wire: protopack.Message{ 1967*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, 1968*1c12ee1eSDan Willemsen }.Marshal(), 1969*1c12ee1eSDan Willemsen }, 1970*1c12ee1eSDan Willemsen { 1971*1c12ee1eSDan Willemsen desc: "bytes field lacks size", 1972*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1973*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1974*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1975*1c12ee1eSDan Willemsen }, 1976*1c12ee1eSDan Willemsen wire: protopack.Message{ 1977*1c12ee1eSDan Willemsen protopack.Tag{18, protopack.BytesType}, 1978*1c12ee1eSDan Willemsen }.Marshal(), 1979*1c12ee1eSDan Willemsen }, 1980*1c12ee1eSDan Willemsen { 1981*1c12ee1eSDan Willemsen desc: "varint overflow", 1982*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1983*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1984*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1985*1c12ee1eSDan Willemsen }, 1986*1c12ee1eSDan Willemsen wire: protopack.Message{ 1987*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, 1988*1c12ee1eSDan Willemsen protopack.Raw("\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02"), 1989*1c12ee1eSDan Willemsen }.Marshal(), 1990*1c12ee1eSDan Willemsen }, 1991*1c12ee1eSDan Willemsen { 1992*1c12ee1eSDan Willemsen desc: "varint length overrun", 1993*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 1994*1c12ee1eSDan Willemsen (*testpb.TestAllTypes)(nil), 1995*1c12ee1eSDan Willemsen (*testpb.TestAllExtensions)(nil), 1996*1c12ee1eSDan Willemsen }, 1997*1c12ee1eSDan Willemsen wire: protopack.Message{ 1998*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, 1999*1c12ee1eSDan Willemsen protopack.Raw("\xff\xff\xff\xff\xff\xff\xff\xff\xff"), 2000*1c12ee1eSDan Willemsen }.Marshal(), 2001*1c12ee1eSDan Willemsen }, 2002*1c12ee1eSDan Willemsen} 2003*1c12ee1eSDan Willemsen 2004*1c12ee1eSDan Willemsentype filterResolver struct { 2005*1c12ee1eSDan Willemsen filter func(name protoreflect.FullName) bool 2006*1c12ee1eSDan Willemsen resolver protoregistry.ExtensionTypeResolver 2007*1c12ee1eSDan Willemsen} 2008*1c12ee1eSDan Willemsen 2009*1c12ee1eSDan Willemsenfunc (f filterResolver) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { 2010*1c12ee1eSDan Willemsen if !f.filter(field) { 2011*1c12ee1eSDan Willemsen return nil, protoregistry.NotFound 2012*1c12ee1eSDan Willemsen } 2013*1c12ee1eSDan Willemsen return f.resolver.FindExtensionByName(field) 2014*1c12ee1eSDan Willemsen} 2015*1c12ee1eSDan Willemsen 2016*1c12ee1eSDan Willemsenfunc (f filterResolver) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { 2017*1c12ee1eSDan Willemsen xt, err := f.resolver.FindExtensionByNumber(message, field) 2018*1c12ee1eSDan Willemsen if err != nil { 2019*1c12ee1eSDan Willemsen return nil, err 2020*1c12ee1eSDan Willemsen } 2021*1c12ee1eSDan Willemsen if !f.filter(xt.TypeDescriptor().FullName()) { 2022*1c12ee1eSDan Willemsen return nil, protoregistry.NotFound 2023*1c12ee1eSDan Willemsen } 2024*1c12ee1eSDan Willemsen return xt, nil 2025*1c12ee1eSDan Willemsen} 2026