gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

proto.go (6004B)


      1 // Copyright 2019 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 // Package proto provides functionality for handling protocol buffer messages.
      6 // In particular, it provides marshaling and unmarshaling between a protobuf
      7 // message and the binary wire format.
      8 //
      9 // See https://developers.google.com/protocol-buffers/docs/gotutorial for
     10 // more information.
     11 //
     12 // Deprecated: Use the "google.golang.org/protobuf/proto" package instead.
     13 package proto
     14 
     15 import (
     16 	protoV2 "google.golang.org/protobuf/proto"
     17 	"google.golang.org/protobuf/reflect/protoreflect"
     18 	"google.golang.org/protobuf/runtime/protoiface"
     19 	"google.golang.org/protobuf/runtime/protoimpl"
     20 )
     21 
     22 const (
     23 	ProtoPackageIsVersion1 = true
     24 	ProtoPackageIsVersion2 = true
     25 	ProtoPackageIsVersion3 = true
     26 	ProtoPackageIsVersion4 = true
     27 )
     28 
     29 // GeneratedEnum is any enum type generated by protoc-gen-go
     30 // which is a named int32 kind.
     31 // This type exists for documentation purposes.
     32 type GeneratedEnum interface{}
     33 
     34 // GeneratedMessage is any message type generated by protoc-gen-go
     35 // which is a pointer to a named struct kind.
     36 // This type exists for documentation purposes.
     37 type GeneratedMessage interface{}
     38 
     39 // Message is a protocol buffer message.
     40 //
     41 // This is the v1 version of the message interface and is marginally better
     42 // than an empty interface as it lacks any method to programatically interact
     43 // with the contents of the message.
     44 //
     45 // A v2 message is declared in "google.golang.org/protobuf/proto".Message and
     46 // exposes protobuf reflection as a first-class feature of the interface.
     47 //
     48 // To convert a v1 message to a v2 message, use the MessageV2 function.
     49 // To convert a v2 message to a v1 message, use the MessageV1 function.
     50 type Message = protoiface.MessageV1
     51 
     52 // MessageV1 converts either a v1 or v2 message to a v1 message.
     53 // It returns nil if m is nil.
     54 func MessageV1(m GeneratedMessage) protoiface.MessageV1 {
     55 	return protoimpl.X.ProtoMessageV1Of(m)
     56 }
     57 
     58 // MessageV2 converts either a v1 or v2 message to a v2 message.
     59 // It returns nil if m is nil.
     60 func MessageV2(m GeneratedMessage) protoV2.Message {
     61 	return protoimpl.X.ProtoMessageV2Of(m)
     62 }
     63 
     64 // MessageReflect returns a reflective view for a message.
     65 // It returns nil if m is nil.
     66 func MessageReflect(m Message) protoreflect.Message {
     67 	return protoimpl.X.MessageOf(m)
     68 }
     69 
     70 // Marshaler is implemented by messages that can marshal themselves.
     71 // This interface is used by the following functions: Size, Marshal,
     72 // Buffer.Marshal, and Buffer.EncodeMessage.
     73 //
     74 // Deprecated: Do not implement.
     75 type Marshaler interface {
     76 	// Marshal formats the encoded bytes of the message.
     77 	// It should be deterministic and emit valid protobuf wire data.
     78 	// The caller takes ownership of the returned buffer.
     79 	Marshal() ([]byte, error)
     80 }
     81 
     82 // Unmarshaler is implemented by messages that can unmarshal themselves.
     83 // This interface is used by the following functions: Unmarshal, UnmarshalMerge,
     84 // Buffer.Unmarshal, Buffer.DecodeMessage, and Buffer.DecodeGroup.
     85 //
     86 // Deprecated: Do not implement.
     87 type Unmarshaler interface {
     88 	// Unmarshal parses the encoded bytes of the protobuf wire input.
     89 	// The provided buffer is only valid for during method call.
     90 	// It should not reset the receiver message.
     91 	Unmarshal([]byte) error
     92 }
     93 
     94 // Merger is implemented by messages that can merge themselves.
     95 // This interface is used by the following functions: Clone and Merge.
     96 //
     97 // Deprecated: Do not implement.
     98 type Merger interface {
     99 	// Merge merges the contents of src into the receiver message.
    100 	// It clones all data structures in src such that it aliases no mutable
    101 	// memory referenced by src.
    102 	Merge(src Message)
    103 }
    104 
    105 // RequiredNotSetError is an error type returned when
    106 // marshaling or unmarshaling a message with missing required fields.
    107 type RequiredNotSetError struct {
    108 	err error
    109 }
    110 
    111 func (e *RequiredNotSetError) Error() string {
    112 	if e.err != nil {
    113 		return e.err.Error()
    114 	}
    115 	return "proto: required field not set"
    116 }
    117 func (e *RequiredNotSetError) RequiredNotSet() bool {
    118 	return true
    119 }
    120 
    121 func checkRequiredNotSet(m protoV2.Message) error {
    122 	if err := protoV2.CheckInitialized(m); err != nil {
    123 		return &RequiredNotSetError{err: err}
    124 	}
    125 	return nil
    126 }
    127 
    128 // Clone returns a deep copy of src.
    129 func Clone(src Message) Message {
    130 	return MessageV1(protoV2.Clone(MessageV2(src)))
    131 }
    132 
    133 // Merge merges src into dst, which must be messages of the same type.
    134 //
    135 // Populated scalar fields in src are copied to dst, while populated
    136 // singular messages in src are merged into dst by recursively calling Merge.
    137 // The elements of every list field in src is appended to the corresponded
    138 // list fields in dst. The entries of every map field in src is copied into
    139 // the corresponding map field in dst, possibly replacing existing entries.
    140 // The unknown fields of src are appended to the unknown fields of dst.
    141 func Merge(dst, src Message) {
    142 	protoV2.Merge(MessageV2(dst), MessageV2(src))
    143 }
    144 
    145 // Equal reports whether two messages are equal.
    146 // If two messages marshal to the same bytes under deterministic serialization,
    147 // then Equal is guaranteed to report true.
    148 //
    149 // Two messages are equal if they are the same protobuf message type,
    150 // have the same set of populated known and extension field values,
    151 // and the same set of unknown fields values.
    152 //
    153 // Scalar values are compared with the equivalent of the == operator in Go,
    154 // except bytes values which are compared using bytes.Equal and
    155 // floating point values which specially treat NaNs as equal.
    156 // Message values are compared by recursively calling Equal.
    157 // Lists are equal if each element value is also equal.
    158 // Maps are equal if they have the same set of keys, where the pair of values
    159 // for each key is also equal.
    160 func Equal(x, y Message) bool {
    161 	return protoV2.Equal(MessageV2(x), MessageV2(y))
    162 }
    163 
    164 func isMessageSet(md protoreflect.MessageDescriptor) bool {
    165 	ms, ok := md.(interface{ IsMessageSet() bool })
    166 	return ok && ms.IsMessageSet()
    167 }