...

Source file src/google.golang.org/protobuf/runtime/protoiface/methods.go

Documentation: google.golang.org/protobuf/runtime/protoiface

     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 protoiface contains types referenced or implemented by messages.
     6  //
     7  // WARNING: This package should only be imported by message implementations.
     8  // The functionality found in this package should be accessed through
     9  // higher-level abstractions provided by the proto package.
    10  package protoiface
    11  
    12  import (
    13  	"google.golang.org/protobuf/internal/pragma"
    14  	"google.golang.org/protobuf/reflect/protoreflect"
    15  )
    16  
    17  // Methods is a set of optional fast-path implementations of various operations.
    18  type Methods = struct {
    19  	pragma.NoUnkeyedLiterals
    20  
    21  	// Flags indicate support for optional features.
    22  	Flags SupportFlags
    23  
    24  	// Size returns the size in bytes of the wire-format encoding of a message.
    25  	// Marshal must be provided if a custom Size is provided.
    26  	Size func(SizeInput) SizeOutput
    27  
    28  	// Marshal formats a message in the wire-format encoding to the provided buffer.
    29  	// Size should be provided if a custom Marshal is provided.
    30  	// It must not return an error for a partial message.
    31  	Marshal func(MarshalInput) (MarshalOutput, error)
    32  
    33  	// Unmarshal parses the wire-format encoding and merges the result into a message.
    34  	// It must not reset the target message or return an error for a partial message.
    35  	Unmarshal func(UnmarshalInput) (UnmarshalOutput, error)
    36  
    37  	// Merge merges the contents of a source message into a destination message.
    38  	Merge func(MergeInput) MergeOutput
    39  
    40  	// CheckInitialized returns an error if any required fields in the message are not set.
    41  	CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error)
    42  }
    43  
    44  // SupportFlags indicate support for optional features.
    45  type SupportFlags = uint64
    46  
    47  const (
    48  	// SupportMarshalDeterministic reports whether MarshalOptions.Deterministic is supported.
    49  	SupportMarshalDeterministic SupportFlags = 1 << iota
    50  
    51  	// SupportUnmarshalDiscardUnknown reports whether UnmarshalOptions.DiscardUnknown is supported.
    52  	SupportUnmarshalDiscardUnknown
    53  )
    54  
    55  // SizeInput is input to the Size method.
    56  type SizeInput = struct {
    57  	pragma.NoUnkeyedLiterals
    58  
    59  	Message protoreflect.Message
    60  	Flags   MarshalInputFlags
    61  }
    62  
    63  // SizeOutput is output from the Size method.
    64  type SizeOutput = struct {
    65  	pragma.NoUnkeyedLiterals
    66  
    67  	Size int
    68  }
    69  
    70  // MarshalInput is input to the Marshal method.
    71  type MarshalInput = struct {
    72  	pragma.NoUnkeyedLiterals
    73  
    74  	Message protoreflect.Message
    75  	Buf     []byte // output is appended to this buffer
    76  	Flags   MarshalInputFlags
    77  }
    78  
    79  // MarshalOutput is output from the Marshal method.
    80  type MarshalOutput = struct {
    81  	pragma.NoUnkeyedLiterals
    82  
    83  	Buf []byte // contains marshaled message
    84  }
    85  
    86  // MarshalInputFlags configure the marshaler.
    87  // Most flags correspond to fields in proto.MarshalOptions.
    88  type MarshalInputFlags = uint8
    89  
    90  const (
    91  	MarshalDeterministic MarshalInputFlags = 1 << iota
    92  	MarshalUseCachedSize
    93  )
    94  
    95  // UnmarshalInput is input to the Unmarshal method.
    96  type UnmarshalInput = struct {
    97  	pragma.NoUnkeyedLiterals
    98  
    99  	Message  protoreflect.Message
   100  	Buf      []byte // input buffer
   101  	Flags    UnmarshalInputFlags
   102  	Resolver interface {
   103  		FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)
   104  		FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)
   105  	}
   106  	Depth int
   107  }
   108  
   109  // UnmarshalOutput is output from the Unmarshal method.
   110  type UnmarshalOutput = struct {
   111  	pragma.NoUnkeyedLiterals
   112  
   113  	Flags UnmarshalOutputFlags
   114  }
   115  
   116  // UnmarshalInputFlags configure the unmarshaler.
   117  // Most flags correspond to fields in proto.UnmarshalOptions.
   118  type UnmarshalInputFlags = uint8
   119  
   120  const (
   121  	UnmarshalDiscardUnknown UnmarshalInputFlags = 1 << iota
   122  )
   123  
   124  // UnmarshalOutputFlags are output from the Unmarshal method.
   125  type UnmarshalOutputFlags = uint8
   126  
   127  const (
   128  	// UnmarshalInitialized may be set on return if all required fields are known to be set.
   129  	// If unset, then it does not necessarily indicate that the message is uninitialized,
   130  	// only that its status could not be confirmed.
   131  	UnmarshalInitialized UnmarshalOutputFlags = 1 << iota
   132  )
   133  
   134  // MergeInput is input to the Merge method.
   135  type MergeInput = struct {
   136  	pragma.NoUnkeyedLiterals
   137  
   138  	Source      protoreflect.Message
   139  	Destination protoreflect.Message
   140  }
   141  
   142  // MergeOutput is output from the Merge method.
   143  type MergeOutput = struct {
   144  	pragma.NoUnkeyedLiterals
   145  
   146  	Flags MergeOutputFlags
   147  }
   148  
   149  // MergeOutputFlags are output from the Merge method.
   150  type MergeOutputFlags = uint8
   151  
   152  const (
   153  	// MergeComplete reports whether the merge was performed.
   154  	// If unset, the merger must have made no changes to the destination.
   155  	MergeComplete MergeOutputFlags = 1 << iota
   156  )
   157  
   158  // CheckInitializedInput is input to the CheckInitialized method.
   159  type CheckInitializedInput = struct {
   160  	pragma.NoUnkeyedLiterals
   161  
   162  	Message protoreflect.Message
   163  }
   164  
   165  // CheckInitializedOutput is output from the CheckInitialized method.
   166  type CheckInitializedOutput = struct {
   167  	pragma.NoUnkeyedLiterals
   168  }
   169  

View as plain text