github.com/whiteCcinn/protobuf-go@v1.0.9/types/known/anypb/any.pb.go (about)

     1  // Protocol Buffers - Google's data interchange format
     2  // Copyright 2008 Google Inc.  All rights reserved.
     3  // https://developers.google.com/protocol-buffers/
     4  //
     5  // Redistribution and use in source and binary forms, with or without
     6  // modification, are permitted provided that the following conditions are
     7  // met:
     8  //
     9  //     * Redistributions of source code must retain the above copyright
    10  // notice, this list of conditions and the following disclaimer.
    11  //     * Redistributions in binary form must reproduce the above
    12  // copyright notice, this list of conditions and the following disclaimer
    13  // in the documentation and/or other materials provided with the
    14  // distribution.
    15  //     * Neither the name of Google Inc. nor the names of its
    16  // contributors may be used to endorse or promote products derived from
    17  // this software without specific prior written permission.
    18  //
    19  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    20  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    21  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    22  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    23  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    24  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    25  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    26  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    27  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    28  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    29  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    30  
    31  // Code generated by protoc-gen-go. DO NOT EDIT.
    32  // source: google/protobuf/any.proto
    33  
    34  // Package anypb contains generated types for google/protobuf/any.proto.
    35  //
    36  // The Any message is a dynamic representation of any other message value.
    37  // It is functionally a tuple of the full name of the remote message type and
    38  // the serialized bytes of the remote message value.
    39  //
    40  //
    41  // Constructing an Any
    42  //
    43  // An Any message containing another message value is constructed using New:
    44  //
    45  //	any, err := anypb.New(m)
    46  //	if err != nil {
    47  //		... // handle error
    48  //	}
    49  //	... // make use of any
    50  //
    51  //
    52  // Unmarshaling an Any
    53  //
    54  // With a populated Any message, the underlying message can be serialized into
    55  // a remote concrete message value in a few ways.
    56  //
    57  // If the exact concrete type is known, then a new (or pre-existing) instance
    58  // of that message can be passed to the UnmarshalTo method:
    59  //
    60  //	m := new(foopb.MyMessage)
    61  //	if err := any.UnmarshalTo(m); err != nil {
    62  //		... // handle error
    63  //	}
    64  //	... // make use of m
    65  //
    66  // If the exact concrete type is not known, then the UnmarshalNew method can be
    67  // used to unmarshal the contents into a new instance of the remote message type:
    68  //
    69  //	m, err := any.UnmarshalNew()
    70  //	if err != nil {
    71  //		... // handle error
    72  //	}
    73  //	... // make use of m
    74  //
    75  // UnmarshalNew uses the global type registry to resolve the message type and
    76  // construct a new instance of that message to unmarshal into. In order for a
    77  // message type to appear in the global registry, the Go type representing that
    78  // protobuf message type must be linked into the Go binary. For messages
    79  // generated by protoc-gen-go, this is achieved through an import of the
    80  // generated Go package representing a .proto file.
    81  //
    82  // A common pattern with UnmarshalNew is to use a type switch with the resulting
    83  // proto.Message value:
    84  //
    85  //	switch m := m.(type) {
    86  //	case *foopb.MyMessage:
    87  //		... // make use of m as a *foopb.MyMessage
    88  //	case *barpb.OtherMessage:
    89  //		... // make use of m as a *barpb.OtherMessage
    90  //	case *bazpb.SomeMessage:
    91  //		... // make use of m as a *bazpb.SomeMessage
    92  //	}
    93  //
    94  // This pattern ensures that the generated packages containing the message types
    95  // listed in the case clauses are linked into the Go binary and therefore also
    96  // registered in the global registry.
    97  //
    98  //
    99  // Type checking an Any
   100  //
   101  // In order to type check whether an Any message represents some other message,
   102  // then use the MessageIs method:
   103  //
   104  //	if any.MessageIs((*foopb.MyMessage)(nil)) {
   105  //		... // make use of any, knowing that it contains a foopb.MyMessage
   106  //	}
   107  //
   108  // The MessageIs method can also be used with an allocated instance of the target
   109  // message type if the intention is to unmarshal into it if the type matches:
   110  //
   111  //	m := new(foopb.MyMessage)
   112  //	if any.MessageIs(m) {
   113  //		if err := any.UnmarshalTo(m); err != nil {
   114  //			... // handle error
   115  //		}
   116  //		... // make use of m
   117  //	}
   118  //
   119  package anypb
   120  
   121  import (
   122  	proto "github.com/whiteCcinn/protobuf-go/proto"
   123  	protoreflect "github.com/whiteCcinn/protobuf-go/reflect/protoreflect"
   124  	protoregistry "github.com/whiteCcinn/protobuf-go/reflect/protoregistry"
   125  	protoimpl "github.com/whiteCcinn/protobuf-go/runtime/protoimpl"
   126  	reflect "reflect"
   127  	strings "strings"
   128  	sync "sync"
   129  )
   130  
   131  // `Any` contains an arbitrary serialized protocol buffer message along with a
   132  // URL that describes the type of the serialized message.
   133  //
   134  // Protobuf library provides support to pack/unpack Any values in the form
   135  // of utility functions or additional generated methods of the Any type.
   136  //
   137  // Example 1: Pack and unpack a message in C++.
   138  //
   139  //     Foo foo = ...;
   140  //     Any any;
   141  //     any.PackFrom(foo);
   142  //     ...
   143  //     if (any.UnpackTo(&foo)) {
   144  //       ...
   145  //     }
   146  //
   147  // Example 2: Pack and unpack a message in Java.
   148  //
   149  //     Foo foo = ...;
   150  //     Any any = Any.pack(foo);
   151  //     ...
   152  //     if (any.is(Foo.class)) {
   153  //       foo = any.unpack(Foo.class);
   154  //     }
   155  //
   156  // Example 3: Pack and unpack a message in Python.
   157  //
   158  //     foo = Foo(...)
   159  //     any = Any()
   160  //     any.Pack(foo)
   161  //     ...
   162  //     if any.Is(Foo.DESCRIPTOR):
   163  //       any.Unpack(foo)
   164  //       ...
   165  //
   166  // Example 4: Pack and unpack a message in Go
   167  //
   168  //      foo := &pb.Foo{...}
   169  //      any, err := anypb.New(foo)
   170  //      if err != nil {
   171  //        ...
   172  //      }
   173  //      ...
   174  //      foo := &pb.Foo{}
   175  //      if err := any.UnmarshalTo(foo); err != nil {
   176  //        ...
   177  //      }
   178  //
   179  // The pack methods provided by protobuf library will by default use
   180  // 'type.googleapis.com/full.type.name' as the type URL and the unpack
   181  // methods only use the fully qualified type name after the last '/'
   182  // in the type URL, for example "foo.bar.com/x/y.z" will yield type
   183  // name "y.z".
   184  //
   185  //
   186  // JSON
   187  //
   188  // The JSON representation of an `Any` value uses the regular
   189  // representation of the deserialized, embedded message, with an
   190  // additional field `@type` which contains the type URL. Example:
   191  //
   192  //     package google.profile;
   193  //     message Person {
   194  //       string first_name = 1;
   195  //       string last_name = 2;
   196  //     }
   197  //
   198  //     {
   199  //       "@type": "type.googleapis.com/google.profile.Person",
   200  //       "firstName": <string>,
   201  //       "lastName": <string>
   202  //     }
   203  //
   204  // If the embedded message type is well-known and has a custom JSON
   205  // representation, that representation will be embedded adding a field
   206  // `value` which holds the custom JSON in addition to the `@type`
   207  // field. Example (for message [google.protobuf.Duration][]):
   208  //
   209  //     {
   210  //       "@type": "type.googleapis.com/google.protobuf.Duration",
   211  //       "value": "1.212s"
   212  //     }
   213  //
   214  type Any struct {
   215  	state         protoimpl.MessageState
   216  	sizeCache     protoimpl.SizeCache
   217  	unknownFields protoimpl.UnknownFields
   218  
   219  	// A URL/resource name that uniquely identifies the type of the serialized
   220  	// protocol buffer message. This string must contain at least
   221  	// one "/" character. The last segment of the URL's path must represent
   222  	// the fully qualified name of the type (as in
   223  	// `path/google.protobuf.Duration`). The name should be in a canonical form
   224  	// (e.g., leading "." is not accepted).
   225  	//
   226  	// In practice, teams usually precompile into the binary all types that they
   227  	// expect it to use in the context of Any. However, for URLs which use the
   228  	// scheme `http`, `https`, or no scheme, one can optionally set up a type
   229  	// server that maps type URLs to message definitions as follows:
   230  	//
   231  	// * If no scheme is provided, `https` is assumed.
   232  	// * An HTTP GET on the URL must yield a [google.protobuf.Type][]
   233  	//   value in binary format, or produce an error.
   234  	// * Applications are allowed to cache lookup results based on the
   235  	//   URL, or have them precompiled into a binary to avoid any
   236  	//   lookup. Therefore, binary compatibility needs to be preserved
   237  	//   on changes to types. (Use versioned type names to manage
   238  	//   breaking changes.)
   239  	//
   240  	// Note: this functionality is not currently available in the official
   241  	// protobuf release, and it is not used for type URLs beginning with
   242  	// type.googleapis.com.
   243  	//
   244  	// Schemes other than `http`, `https` (or the empty scheme) might be
   245  	// used with implementation specific semantics.
   246  	//
   247  	TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
   248  	// Must be a valid serialized protocol buffer of the above specified type.
   249  	Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
   250  }
   251  
   252  // New marshals src into a new Any instance.
   253  func New(src proto.Message) (*Any, error) {
   254  	dst := new(Any)
   255  	if err := dst.MarshalFrom(src); err != nil {
   256  		return nil, err
   257  	}
   258  	return dst, nil
   259  }
   260  
   261  // MarshalFrom marshals src into dst as the underlying message
   262  // using the provided marshal options.
   263  //
   264  // If no options are specified, call dst.MarshalFrom instead.
   265  func MarshalFrom(dst *Any, src proto.Message, opts proto.MarshalOptions) error {
   266  	const urlPrefix = "type.googleapis.com/"
   267  	if src == nil {
   268  		return protoimpl.X.NewError("invalid nil source message")
   269  	}
   270  	b, err := opts.Marshal(src)
   271  	if err != nil {
   272  		return err
   273  	}
   274  	dst.TypeUrl = urlPrefix + string(src.ProtoReflect().Descriptor().FullName())
   275  	dst.Value = b
   276  	return nil
   277  }
   278  
   279  // UnmarshalTo unmarshals the underlying message from src into dst
   280  // using the provided unmarshal options.
   281  // It reports an error if dst is not of the right message type.
   282  //
   283  // If no options are specified, call src.UnmarshalTo instead.
   284  func UnmarshalTo(src *Any, dst proto.Message, opts proto.UnmarshalOptions) error {
   285  	if src == nil {
   286  		return protoimpl.X.NewError("invalid nil source message")
   287  	}
   288  	if !src.MessageIs(dst) {
   289  		got := dst.ProtoReflect().Descriptor().FullName()
   290  		want := src.MessageName()
   291  		return protoimpl.X.NewError("mismatched message type: got %q, want %q", got, want)
   292  	}
   293  	return opts.Unmarshal(src.GetValue(), dst)
   294  }
   295  
   296  // UnmarshalNew unmarshals the underlying message from src into dst,
   297  // which is newly created message using a type resolved from the type URL.
   298  // The message type is resolved according to opt.Resolver,
   299  // which should implement protoregistry.MessageTypeResolver.
   300  // It reports an error if the underlying message type could not be resolved.
   301  //
   302  // If no options are specified, call src.UnmarshalNew instead.
   303  func UnmarshalNew(src *Any, opts proto.UnmarshalOptions) (dst proto.Message, err error) {
   304  	if src.GetTypeUrl() == "" {
   305  		return nil, protoimpl.X.NewError("invalid empty type URL")
   306  	}
   307  	if opts.Resolver == nil {
   308  		opts.Resolver = protoregistry.GlobalTypes
   309  	}
   310  	r, ok := opts.Resolver.(protoregistry.MessageTypeResolver)
   311  	if !ok {
   312  		return nil, protoregistry.NotFound
   313  	}
   314  	mt, err := r.FindMessageByURL(src.GetTypeUrl())
   315  	if err != nil {
   316  		if err == protoregistry.NotFound {
   317  			return nil, err
   318  		}
   319  		return nil, protoimpl.X.NewError("could not resolve %q: %v", src.GetTypeUrl(), err)
   320  	}
   321  	dst = mt.New().Interface()
   322  	return dst, opts.Unmarshal(src.GetValue(), dst)
   323  }
   324  
   325  // MessageIs reports whether the underlying message is of the same type as m.
   326  func (x *Any) MessageIs(m proto.Message) bool {
   327  	if m == nil {
   328  		return false
   329  	}
   330  	url := x.GetTypeUrl()
   331  	name := string(m.ProtoReflect().Descriptor().FullName())
   332  	if !strings.HasSuffix(url, name) {
   333  		return false
   334  	}
   335  	return len(url) == len(name) || url[len(url)-len(name)-1] == '/'
   336  }
   337  
   338  // MessageName reports the full name of the underlying message,
   339  // returning an empty string if invalid.
   340  func (x *Any) MessageName() protoreflect.FullName {
   341  	url := x.GetTypeUrl()
   342  	name := protoreflect.FullName(url)
   343  	if i := strings.LastIndexByte(url, '/'); i >= 0 {
   344  		name = name[i+len("/"):]
   345  	}
   346  	if !name.IsValid() {
   347  		return ""
   348  	}
   349  	return name
   350  }
   351  
   352  // MarshalFrom marshals m into x as the underlying message.
   353  func (x *Any) MarshalFrom(m proto.Message) error {
   354  	return MarshalFrom(x, m, proto.MarshalOptions{})
   355  }
   356  
   357  // UnmarshalTo unmarshals the contents of the underlying message of x into m.
   358  // It resets m before performing the unmarshal operation.
   359  // It reports an error if m is not of the right message type.
   360  func (x *Any) UnmarshalTo(m proto.Message) error {
   361  	return UnmarshalTo(x, m, proto.UnmarshalOptions{})
   362  }
   363  
   364  // UnmarshalNew unmarshals the contents of the underlying message of x into
   365  // a newly allocated message of the specified type.
   366  // It reports an error if the underlying message type could not be resolved.
   367  func (x *Any) UnmarshalNew() (proto.Message, error) {
   368  	return UnmarshalNew(x, proto.UnmarshalOptions{})
   369  }
   370  
   371  func (x *Any) Reset() {
   372  	*x = Any{}
   373  	if protoimpl.UnsafeEnabled {
   374  		mi := &file_google_protobuf_any_proto_msgTypes[0]
   375  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   376  		ms.StoreMessageInfo(mi)
   377  	}
   378  }
   379  
   380  func (x *Any) String() string {
   381  	return protoimpl.X.MessageStringOf(x)
   382  }
   383  
   384  func (*Any) ProtoMessage() {}
   385  
   386  func (x *Any) ProtoReflect() protoreflect.Message {
   387  	mi := &file_google_protobuf_any_proto_msgTypes[0]
   388  	if protoimpl.UnsafeEnabled && x != nil {
   389  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   390  		if ms.LoadMessageInfo() == nil {
   391  			ms.StoreMessageInfo(mi)
   392  		}
   393  		return ms
   394  	}
   395  	return mi.MessageOf(x)
   396  }
   397  
   398  // Deprecated: Use Any.ProtoReflect.Descriptor instead.
   399  func (*Any) Descriptor() ([]byte, []int) {
   400  	return file_google_protobuf_any_proto_rawDescGZIP(), []int{0}
   401  }
   402  
   403  func (x *Any) GetTypeUrl() string {
   404  	if x != nil {
   405  		return x.TypeUrl
   406  	}
   407  	return ""
   408  }
   409  
   410  func (x *Any) GetValue() []byte {
   411  	if x != nil {
   412  		return x.Value
   413  	}
   414  	return nil
   415  }
   416  
   417  var File_google_protobuf_any_proto protoreflect.FileDescriptor
   418  
   419  var file_google_protobuf_any_proto_rawDesc = []byte{
   420  	0x0a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
   421  	0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f,
   422  	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22, 0x36, 0x0a, 0x03,
   423  	0x41, 0x6e, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18,
   424  	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14,
   425  	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76,
   426  	0x61, 0x6c, 0x75, 0x65, 0x42, 0x76, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
   427  	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x08, 0x41, 0x6e, 0x79,
   428  	0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
   429  	0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
   430  	0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f,
   431  	0x61, 0x6e, 0x79, 0x70, 0x62, 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f,
   432  	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65,
   433  	0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72,
   434  	0x6f, 0x74, 0x6f, 0x33,
   435  }
   436  
   437  var (
   438  	file_google_protobuf_any_proto_rawDescOnce sync.Once
   439  	file_google_protobuf_any_proto_rawDescData = file_google_protobuf_any_proto_rawDesc
   440  )
   441  
   442  func file_google_protobuf_any_proto_rawDescGZIP() []byte {
   443  	file_google_protobuf_any_proto_rawDescOnce.Do(func() {
   444  		file_google_protobuf_any_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_any_proto_rawDescData)
   445  	})
   446  	return file_google_protobuf_any_proto_rawDescData
   447  }
   448  
   449  var file_google_protobuf_any_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
   450  var file_google_protobuf_any_proto_goTypes = []interface{}{
   451  	(*Any)(nil), // 0: google.protobuf.Any
   452  }
   453  var file_google_protobuf_any_proto_depIdxs = []int32{
   454  	0, // [0:0] is the sub-list for method output_type
   455  	0, // [0:0] is the sub-list for method input_type
   456  	0, // [0:0] is the sub-list for extension type_name
   457  	0, // [0:0] is the sub-list for extension extendee
   458  	0, // [0:0] is the sub-list for field type_name
   459  }
   460  
   461  func init() { file_google_protobuf_any_proto_init() }
   462  func file_google_protobuf_any_proto_init() {
   463  	if File_google_protobuf_any_proto != nil {
   464  		return
   465  	}
   466  	if !protoimpl.UnsafeEnabled {
   467  		file_google_protobuf_any_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
   468  			switch v := v.(*Any); i {
   469  			case 0:
   470  				return &v.state
   471  			case 1:
   472  				return &v.sizeCache
   473  			case 2:
   474  				return &v.unknownFields
   475  			default:
   476  				return nil
   477  			}
   478  		}
   479  	}
   480  	type x struct{}
   481  	out := protoimpl.TypeBuilder{
   482  		File: protoimpl.DescBuilder{
   483  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
   484  			RawDescriptor: file_google_protobuf_any_proto_rawDesc,
   485  			NumEnums:      0,
   486  			NumMessages:   1,
   487  			NumExtensions: 0,
   488  			NumServices:   0,
   489  		},
   490  		GoTypes:           file_google_protobuf_any_proto_goTypes,
   491  		DependencyIndexes: file_google_protobuf_any_proto_depIdxs,
   492  		MessageInfos:      file_google_protobuf_any_proto_msgTypes,
   493  	}.Build()
   494  	File_google_protobuf_any_proto = out.File
   495  	file_google_protobuf_any_proto_rawDesc = nil
   496  	file_google_protobuf_any_proto_goTypes = nil
   497  	file_google_protobuf_any_proto_depIdxs = nil
   498  }