// 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 m. // MarshalAppend must be provided if a custom Size is provided. Size func(m protoreflect.Message, opts MarshalOptions) int // Marshal writes the wire-format encoding of m to the provided buffer. // Size should be provided if a custom MarshalAppend is provided. // It should not return an error for a partial message. Marshal func(m protoreflect.Message, in MarshalInput, opts MarshalOptions) (MarshalOutput, error) // Unmarshal parses the wire-format encoding of a message and merges the result to m. // It should not reset the target message or return an error for a partial message. Unmarshal func(m protoreflect.Message, in UnmarshalInput, opts UnmarshalOptions) (UnmarshalOutput, error) // IsInitialized returns an error if any required fields in m are not set. IsInitialized func(m protoreflect.Message) error } type SupportFlags = uint64 const ( // SupportMarshalDeterministic reports whether MarshalOptions.Deterministic is supported. SupportMarshalDeterministic SupportFlags = 1 << iota // SupportUnmarshalDiscardUnknown reports whether UnmarshalOptions.DiscardUnknown is supported. SupportUnmarshalDiscardUnknown ) // MarshalInput is input to the marshaler. type MarshalInput = struct { pragma.NoUnkeyedLiterals Buf []byte // output is appended to this buffer } // MarshalOutput is output from the marshaler. type MarshalOutput = struct { pragma.NoUnkeyedLiterals Buf []byte // contains marshaled message } // MarshalOptions configure the marshaler. // // This type is identical to the one in package proto. type MarshalOptions = struct { pragma.NoUnkeyedLiterals AllowPartial bool // may be treated as true by method implementations Deterministic bool UseCachedSize bool } // UnmarshalInput is input to the unmarshaler. type UnmarshalInput = struct { pragma.NoUnkeyedLiterals Buf []byte // input buffer } // UnmarshalOutput is output from the unmarshaler. type UnmarshalOutput = struct { pragma.NoUnkeyedLiterals // Initialized may be set on return if all required fields are known to be set. // A value of false does not indicate that the message is uninitialized, only // that its status could not be confirmed. Initialized bool } // UnmarshalOptions configures the unmarshaler. // // This type is identical to the one in package proto. type UnmarshalOptions = struct { pragma.NoUnkeyedLiterals Merge bool // may be treated as true by method implementations AllowPartial bool // may be treated as true by method implementations DiscardUnknown bool Resolver interface { FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) } }