| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package protoiface contains types referenced or implemented by messages. |
| // |
| // WARNING: This package should only be imported by message implementations. |
| // The functionality found in this package should be accessed through |
| // higher-level abstractions provided by the proto package. |
| package protoiface |
| |
| import ( |
| "google.golang.org/protobuf/internal/pragma" |
| "google.golang.org/protobuf/reflect/protoreflect" |
| ) |
| |
| // Methods is a set of optional fast-path implementations of various operations. |
| type Methods = struct { |
| pragma.NoUnkeyedLiterals |
| |
| // Flags indicate support for optional features. |
| Flags SupportFlags |
| |
| // Size returns the size in bytes of the wire-format encoding of a message. |
| // Marshal must be provided if a custom Size is provided. |
| Size func(SizeInput) SizeOutput |
| |
| // Marshal formats a message in the wire-format encoding to the provided buffer. |
| // Size should be provided if a custom Marshal is provided. |
| // It must not return an error for a partial message. |
| Marshal func(MarshalInput) (MarshalOutput, error) |
| |
| // Unmarshal parses the wire-format encoding and merges the result into a message. |
| // It must not reset the target message or return an error for a partial message. |
| Unmarshal func(UnmarshalInput) (UnmarshalOutput, error) |
| |
| // Merge merges the contents of a source message into a destination message. |
| Merge func(MergeInput) MergeOutput |
| |
| // CheckInitialized returns an error if any required fields in the message are not set. |
| CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error) |
| } |
| |
| // SupportFlags indicate support for optional features. |
| type SupportFlags = uint64 |
| |
| const ( |
| // SupportMarshalDeterministic reports whether MarshalOptions.Deterministic is supported. |
| SupportMarshalDeterministic SupportFlags = 1 << iota |
| |
| // SupportUnmarshalDiscardUnknown reports whether UnmarshalOptions.DiscardUnknown is supported. |
| SupportUnmarshalDiscardUnknown |
| ) |
| |
| // SizeInput is input to the Size method. |
| type SizeInput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Message protoreflect.Message |
| Flags MarshalInputFlags |
| } |
| |
| // SizeOutput is output from the Size method. |
| type SizeOutput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Size int |
| } |
| |
| // MarshalInput is input to the Marshal method. |
| type MarshalInput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Message protoreflect.Message |
| Buf []byte // output is appended to this buffer |
| Flags MarshalInputFlags |
| } |
| |
| // MarshalOutput is output from the Marshal method. |
| type MarshalOutput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Buf []byte // contains marshaled message |
| } |
| |
| // MarshalInputFlags configure the marshaler. |
| // Most flags correspond to fields in proto.MarshalOptions. |
| type MarshalInputFlags = uint8 |
| |
| const ( |
| MarshalDeterministic MarshalInputFlags = 1 << iota |
| MarshalUseCachedSize |
| ) |
| |
| // UnmarshalInput is input to the Unmarshal method. |
| type UnmarshalInput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Message protoreflect.Message |
| Buf []byte // input buffer |
| Flags UnmarshalInputFlags |
| Resolver interface { |
| FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) |
| FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) |
| } |
| } |
| |
| // UnmarshalOutput is output from the Unmarshal method. |
| type UnmarshalOutput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Flags UnmarshalOutputFlags |
| } |
| |
| // UnmarshalInputFlags configure the unmarshaler. |
| // Most flags correspond to fields in proto.UnmarshalOptions. |
| type UnmarshalInputFlags = uint8 |
| |
| const ( |
| UnmarshalDiscardUnknown UnmarshalInputFlags = 1 << iota |
| ) |
| |
| // UnmarshalOutputFlags are output from the Unmarshal method. |
| type UnmarshalOutputFlags = uint8 |
| |
| const ( |
| // UnmarshalInitialized may be set on return if all required fields are known to be set. |
| // If unset, then it does not necessarily indicate that the message is uninitialized, |
| // only that its status could not be confirmed. |
| UnmarshalInitialized UnmarshalOutputFlags = 1 << iota |
| ) |
| |
| // MergeInput is input to the Merge method. |
| type MergeInput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Source protoreflect.Message |
| Destination protoreflect.Message |
| } |
| |
| // MergeOutput is output from the Merge method. |
| type MergeOutput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Flags MergeOutputFlags |
| } |
| |
| // MergeOutputFlags are output from the Merge method. |
| type MergeOutputFlags = uint8 |
| |
| const ( |
| // MergeComplete reports whether the merge was performed. |
| // If unset, the merger must have made no changes to the destination. |
| MergeComplete MergeOutputFlags = 1 << iota |
| ) |
| |
| // CheckInitializedInput is input to the CheckInitialized method. |
| type CheckInitializedInput = struct { |
| pragma.NoUnkeyedLiterals |
| |
| Message protoreflect.Message |
| } |
| |
| // CheckInitializedOutput is output from the CheckInitialized method. |
| type CheckInitializedOutput = struct { |
| pragma.NoUnkeyedLiterals |
| } |