protobuf-go/proto/size_gen.go
Joe Tsai 118baf6390 all: funnel similar functionality through a single function
Some companies (e.g., Google) run a profiling service where they may
choose to special-case certain symbols in a binary to classify
commonly used libraries like protobufs.

This CL funnels similar functionality through a single function
so that they can be more easily identified. This is by no means a
firm statement that these identifiers will never change names,
but at least the code documents warnings to avoid changing the
name of certain identifiers.

This CL provides the following semi-stable symbol names:
	"google.golang.org/protobuf/proto".MarshalOptions.size
	"google.golang.org/protobuf/proto".MarshalOptions.marshal
	"google.golang.org/protobuf/proto".UnmarshalOptions.unmarshal
	"google.golang.org/protobuf/encoding/prototext".MarshalOptions.marshal
	"google.golang.org/protobuf/encoding/prototext".UnmarshalOptions.unmarshal
	"google.golang.org/protobuf/encoding/protojson".MarshalOptions.marshal
	"google.golang.org/protobuf/encoding/protojson".UnmarshalOptions.unmarshal

Merge and Clone are not part of the above set since there is a
possibility that MergeOptions will be added in the future.

We use an unexported method so that we have the freedom to change the
method however we want since profilers do not care about that.

Change-Id: Ia79af260d00125f48139420e1e18a86482bd1829
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/234079
Reviewed-by: Damien Neil <dneil@google.com>
2020-05-15 18:21:49 +00:00

56 lines
1.8 KiB
Go

// Copyright 2018 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.
// Code generated by generate-types. DO NOT EDIT.
package proto
import (
"google.golang.org/protobuf/encoding/protowire"
"google.golang.org/protobuf/reflect/protoreflect"
)
func (o MarshalOptions) sizeSingular(num protowire.Number, kind protoreflect.Kind, v protoreflect.Value) int {
switch kind {
case protoreflect.BoolKind:
return protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
case protoreflect.EnumKind:
return protowire.SizeVarint(uint64(v.Enum()))
case protoreflect.Int32Kind:
return protowire.SizeVarint(uint64(int32(v.Int())))
case protoreflect.Sint32Kind:
return protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
case protoreflect.Uint32Kind:
return protowire.SizeVarint(uint64(uint32(v.Uint())))
case protoreflect.Int64Kind:
return protowire.SizeVarint(uint64(v.Int()))
case protoreflect.Sint64Kind:
return protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
case protoreflect.Uint64Kind:
return protowire.SizeVarint(v.Uint())
case protoreflect.Sfixed32Kind:
return protowire.SizeFixed32()
case protoreflect.Fixed32Kind:
return protowire.SizeFixed32()
case protoreflect.FloatKind:
return protowire.SizeFixed32()
case protoreflect.Sfixed64Kind:
return protowire.SizeFixed64()
case protoreflect.Fixed64Kind:
return protowire.SizeFixed64()
case protoreflect.DoubleKind:
return protowire.SizeFixed64()
case protoreflect.StringKind:
return protowire.SizeBytes(len(v.String()))
case protoreflect.BytesKind:
return protowire.SizeBytes(len(v.Bytes()))
case protoreflect.MessageKind:
return protowire.SizeBytes(o.size(v.Message()))
case protoreflect.GroupKind:
return protowire.SizeGroup(num, o.size(v.Message()))
default:
return 0
}
}