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