vendor/google.golang.org/protobuf/internal/impl/legacy_export.go
changeset 260 445e01aede7e
parent 256 6d9efbef00a9
equal deleted inserted replaced
259:db4911b0c721 260:445e01aede7e
    10 	"hash/crc32"
    10 	"hash/crc32"
    11 	"math"
    11 	"math"
    12 	"reflect"
    12 	"reflect"
    13 
    13 
    14 	"google.golang.org/protobuf/internal/errors"
    14 	"google.golang.org/protobuf/internal/errors"
    15 	pref "google.golang.org/protobuf/reflect/protoreflect"
    15 	"google.golang.org/protobuf/reflect/protoreflect"
    16 	piface "google.golang.org/protobuf/runtime/protoiface"
    16 	"google.golang.org/protobuf/runtime/protoiface"
    17 )
    17 )
    18 
    18 
    19 // These functions exist to support exported APIs in generated protobufs.
    19 // These functions exist to support exported APIs in generated protobufs.
    20 // While these are deprecated, they cannot be removed for compatibility reasons.
    20 // While these are deprecated, they cannot be removed for compatibility reasons.
    21 
    21 
    22 // LegacyEnumName returns the name of enums used in legacy code.
    22 // LegacyEnumName returns the name of enums used in legacy code.
    23 func (Export) LegacyEnumName(ed pref.EnumDescriptor) string {
    23 func (Export) LegacyEnumName(ed protoreflect.EnumDescriptor) string {
    24 	return legacyEnumName(ed)
    24 	return legacyEnumName(ed)
    25 }
    25 }
    26 
    26 
    27 // LegacyMessageTypeOf returns the protoreflect.MessageType for m,
    27 // LegacyMessageTypeOf returns the protoreflect.MessageType for m,
    28 // with name used as the message name if necessary.
    28 // with name used as the message name if necessary.
    29 func (Export) LegacyMessageTypeOf(m piface.MessageV1, name pref.FullName) pref.MessageType {
    29 func (Export) LegacyMessageTypeOf(m protoiface.MessageV1, name protoreflect.FullName) protoreflect.MessageType {
    30 	if mv := (Export{}).protoMessageV2Of(m); mv != nil {
    30 	if mv := (Export{}).protoMessageV2Of(m); mv != nil {
    31 		return mv.ProtoReflect().Type()
    31 		return mv.ProtoReflect().Type()
    32 	}
    32 	}
    33 	return legacyLoadMessageType(reflect.TypeOf(m), name)
    33 	return legacyLoadMessageType(reflect.TypeOf(m), name)
    34 }
    34 }
    35 
    35 
    36 // UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input.
    36 // UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input.
    37 // The input can either be a string representing the enum value by name,
    37 // The input can either be a string representing the enum value by name,
    38 // or a number representing the enum number itself.
    38 // or a number representing the enum number itself.
    39 func (Export) UnmarshalJSONEnum(ed pref.EnumDescriptor, b []byte) (pref.EnumNumber, error) {
    39 func (Export) UnmarshalJSONEnum(ed protoreflect.EnumDescriptor, b []byte) (protoreflect.EnumNumber, error) {
    40 	if b[0] == '"' {
    40 	if b[0] == '"' {
    41 		var name pref.Name
    41 		var name protoreflect.Name
    42 		if err := json.Unmarshal(b, &name); err != nil {
    42 		if err := json.Unmarshal(b, &name); err != nil {
    43 			return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
    43 			return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
    44 		}
    44 		}
    45 		ev := ed.Values().ByName(name)
    45 		ev := ed.Values().ByName(name)
    46 		if ev == nil {
    46 		if ev == nil {
    47 			return 0, errors.New("invalid value for enum %v: %s", ed.FullName(), name)
    47 			return 0, errors.New("invalid value for enum %v: %s", ed.FullName(), name)
    48 		}
    48 		}
    49 		return ev.Number(), nil
    49 		return ev.Number(), nil
    50 	} else {
    50 	} else {
    51 		var num pref.EnumNumber
    51 		var num protoreflect.EnumNumber
    52 		if err := json.Unmarshal(b, &num); err != nil {
    52 		if err := json.Unmarshal(b, &num); err != nil {
    53 			return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
    53 			return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
    54 		}
    54 		}
    55 		return num, nil
    55 		return num, nil
    56 	}
    56 	}
    79 		blockSize := maxBlockSize
    79 		blockSize := maxBlockSize
    80 		if blockSize > len(in) {
    80 		if blockSize > len(in) {
    81 			blockHeader[0] = 0x01 // final bit per RFC 1951, section 3.2.3.
    81 			blockHeader[0] = 0x01 // final bit per RFC 1951, section 3.2.3.
    82 			blockSize = len(in)
    82 			blockSize = len(in)
    83 		}
    83 		}
    84 		binary.LittleEndian.PutUint16(blockHeader[1:3], uint16(blockSize)^0x0000)
    84 		binary.LittleEndian.PutUint16(blockHeader[1:3], uint16(blockSize))
    85 		binary.LittleEndian.PutUint16(blockHeader[3:5], uint16(blockSize)^0xffff)
    85 		binary.LittleEndian.PutUint16(blockHeader[3:5], ^uint16(blockSize))
    86 		out = append(out, blockHeader[:]...)
    86 		out = append(out, blockHeader[:]...)
    87 		out = append(out, in[:blockSize]...)
    87 		out = append(out, in[:blockSize]...)
    88 		in = in[blockSize:]
    88 		in = in[blockSize:]
    89 	}
    89 	}
    90 	out = append(out, gzipFooter[:]...)
    90 	out = append(out, gzipFooter[:]...)