mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-01-01 03:14:16 +00:00
db38ddde7d
CL/172399 switches the v1 code to eagerly unmarshal extensions. This CL does the equivalent for v2. For the test, we simply switch from protoV1.Equal to protoV2.Equal, since the v2 equal does not magically unmarshal raw extensions. Change-Id: I6f64455b0a75bbc9a9a82108558641a29bd2b982 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/175838 Reviewed-by: Damien Neil <dneil@google.com>
70 lines
2.1 KiB
Go
70 lines
2.1 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
|
|
|
|
import (
|
|
"github.com/golang/protobuf/v2/internal/pragma"
|
|
"github.com/golang/protobuf/v2/reflect/protoreflect"
|
|
"github.com/golang/protobuf/v2/reflect/protoregistry"
|
|
)
|
|
|
|
// Methoder is an optional interface implemented by generated messages to
|
|
// provide fast-path implementations of various operations.
|
|
type Methoder interface {
|
|
XXX_Methods() *Methods // may return nil
|
|
}
|
|
|
|
// Methods is a set of optional fast-path implementations of various operations.
|
|
type Methods struct {
|
|
// Flags indicate support for optional features.
|
|
Flags MethodFlag
|
|
|
|
// MarshalAppend appends the wire-format encoding of m to b, returning the result.
|
|
// It does not perform required field checks.
|
|
MarshalAppend func(b []byte, m protoreflect.ProtoMessage, opts MarshalOptions) ([]byte, error)
|
|
|
|
// Size returns the size in bytes of the wire-format encoding of m.
|
|
Size func(m protoreflect.ProtoMessage) int
|
|
|
|
// Unmarshal parses the wire-format message in b and places the result in m.
|
|
// It does not reset m or perform required field checks.
|
|
Unmarshal func(b []byte, m protoreflect.ProtoMessage, opts UnmarshalOptions) error
|
|
|
|
// IsInitialized returns an error if any required fields in m are not set.
|
|
IsInitialized func(m protoreflect.ProtoMessage) error
|
|
|
|
pragma.NoUnkeyedLiterals
|
|
}
|
|
|
|
// MethodFlag indicates support for optional fast-path features.
|
|
type MethodFlag int64
|
|
|
|
const (
|
|
// MethodFlagDeterministicMarshal indicates support for deterministic marshaling.
|
|
MethodFlagDeterministicMarshal MethodFlag = 1 << iota
|
|
)
|
|
|
|
// MarshalOptions configure the marshaler.
|
|
//
|
|
// This type is identical to the one in package proto.
|
|
type MarshalOptions struct {
|
|
AllowPartial bool
|
|
Deterministic bool
|
|
UseCachedSize bool
|
|
|
|
pragma.NoUnkeyedLiterals
|
|
}
|
|
|
|
// UnmarshalOptions configures the unmarshaler.
|
|
//
|
|
// This type is identical to the one in package proto.
|
|
type UnmarshalOptions struct {
|
|
AllowPartial bool
|
|
DiscardUnknown bool
|
|
Resolver *protoregistry.Types
|
|
|
|
pragma.NoUnkeyedLiterals
|
|
}
|