...

Source file src/github.com/golang/protobuf/jsonpb/json.go

Documentation: github.com/golang/protobuf/jsonpb

     1  // Copyright 2015 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 jsonpb provides functionality to marshal and unmarshal between a
     6  // protocol buffer message and JSON. It follows the specification at
     7  // https://developers.google.com/protocol-buffers/docs/proto3#json.
     8  //
     9  // Do not rely on the default behavior of the standard encoding/json package
    10  // when called on generated message types as it does not operate correctly.
    11  //
    12  // Deprecated: Use the "google.golang.org/protobuf/encoding/protojson"
    13  // package instead.
    14  package jsonpb
    15  
    16  import (
    17  	"github.com/golang/protobuf/proto"
    18  	"google.golang.org/protobuf/reflect/protoreflect"
    19  	"google.golang.org/protobuf/reflect/protoregistry"
    20  	"google.golang.org/protobuf/runtime/protoimpl"
    21  )
    22  
    23  // AnyResolver takes a type URL, present in an Any message,
    24  // and resolves it into an instance of the associated message.
    25  type AnyResolver interface {
    26  	Resolve(typeURL string) (proto.Message, error)
    27  }
    28  
    29  type anyResolver struct{ AnyResolver }
    30  
    31  func (r anyResolver) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) {
    32  	return r.FindMessageByURL(string(message))
    33  }
    34  
    35  func (r anyResolver) FindMessageByURL(url string) (protoreflect.MessageType, error) {
    36  	m, err := r.Resolve(url)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  	return protoimpl.X.MessageTypeOf(m), nil
    41  }
    42  
    43  func (r anyResolver) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) {
    44  	return protoregistry.GlobalTypes.FindExtensionByName(field)
    45  }
    46  
    47  func (r anyResolver) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) {
    48  	return protoregistry.GlobalTypes.FindExtensionByNumber(message, field)
    49  }
    50  
    51  func wellKnownType(s protoreflect.FullName) string {
    52  	if s.Parent() == "google.protobuf" {
    53  		switch s.Name() {
    54  		case "Empty", "Any",
    55  			"BoolValue", "BytesValue", "StringValue",
    56  			"Int32Value", "UInt32Value", "FloatValue",
    57  			"Int64Value", "UInt64Value", "DoubleValue",
    58  			"Duration", "Timestamp",
    59  			"NullValue", "Struct", "Value", "ListValue":
    60  			return string(s.Name())
    61  		}
    62  	}
    63  	return ""
    64  }
    65  
    66  func isMessageSet(md protoreflect.MessageDescriptor) bool {
    67  	ms, ok := md.(interface{ IsMessageSet() bool })
    68  	return ok && ms.IsMessageSet()
    69  }
    70  

View as plain text