mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-01-30 03:32:49 +00:00
f12fb45fd6
Promote the fast-path magic ProtoMethods method to first-class citizen of the protoreflect.Message interface. To avoid polluting the protoreflect package with the various types required by this method, make the necessary protoiface types unnamed and duplicate them in protoreflect. Updates golang/protobuf#1022. Change-Id: I9595bae40b3bc7536d727fb6f99b3bce8f73da87 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/215718 Reviewed-by: Joe Tsai <joetsai@google.com>
76 lines
2.7 KiB
Go
76 lines
2.7 KiB
Go
// 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
|
|
|
|
// MarshalAppend appends the wire-format encoding of m to b, returning the result.
|
|
// Size should be provided if a custom MarshalAppend is provided.
|
|
// It must not perform required field checks.
|
|
MarshalAppend func(b []byte, m protoreflect.Message, opts MarshalOptions) ([]byte, error)
|
|
|
|
// Unmarshal parses the wire-format message in b and merges the result in m.
|
|
// It must not reset m or perform required field checks.
|
|
Unmarshal func(b []byte, m protoreflect.Message, opts UnmarshalOptions) 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
|
|
)
|
|
|
|
// MarshalOptions configure the marshaler.
|
|
//
|
|
// This type is identical to the one in package proto.
|
|
type MarshalOptions = struct {
|
|
pragma.NoUnkeyedLiterals
|
|
|
|
AllowPartial bool // must be treated as true by method implementations
|
|
Deterministic bool
|
|
UseCachedSize bool
|
|
}
|
|
|
|
// UnmarshalOptions configures the unmarshaler.
|
|
//
|
|
// This type is identical to the one in package proto.
|
|
type UnmarshalOptions = struct {
|
|
pragma.NoUnkeyedLiterals
|
|
|
|
Merge bool // must be treated as true by method implementations
|
|
AllowPartial bool // must 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)
|
|
}
|
|
}
|