proto.go raw

   1  // Copyright 2018 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
   6  
   7  import (
   8  	"google.golang.org/protobuf/internal/errors"
   9  	"google.golang.org/protobuf/reflect/protoreflect"
  10  )
  11  
  12  // Message is the top-level interface that all messages must implement.
  13  // It provides access to a reflective view of a message.
  14  // Any implementation of this interface may be used with all functions in the
  15  // protobuf module that accept a Message, except where otherwise specified.
  16  //
  17  // This is the v2 interface definition for protobuf messages.
  18  // The v1 interface definition is [github.com/golang/protobuf/proto.Message].
  19  //
  20  //   - To convert a v1 message to a v2 message,
  21  //     use [google.golang.org/protobuf/protoadapt.MessageV2Of].
  22  //   - To convert a v2 message to a v1 message,
  23  //     use [google.golang.org/protobuf/protoadapt.MessageV1Of].
  24  type Message = protoreflect.ProtoMessage
  25  
  26  // Error matches all errors produced by packages in the protobuf module
  27  // according to [errors.Is].
  28  //
  29  // Example usage:
  30  //
  31  //	if errors.Is(err, proto.Error) { ... }
  32  var Error error
  33  
  34  func init() {
  35  	Error = errors.Error
  36  }
  37  
  38  // MessageName returns the full name of m.
  39  // If m is nil, it returns an empty string.
  40  func MessageName(m Message) protoreflect.FullName {
  41  	if m == nil {
  42  		return ""
  43  	}
  44  	return m.ProtoReflect().Descriptor().FullName()
  45  }
  46