blob: 6c5f7f3631a6d3f3a5ec84b4ed4a754dd51844e2 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package protosource
import (
"google.golang.org/protobuf/types/descriptorpb"
)
type field struct {
namedDescriptor
optionExtensionDescriptor
message Message
number int
label descriptorpb.FieldDescriptorProto_Label
typ descriptorpb.FieldDescriptorProto_Type
typeName string
// if the field is an extension, this is the type being extended
extendee string
// this has to be the pointer to the private struct or you have the bug where the
// interface is nil but value == nil is false
oneof *oneof
proto3Optional bool
jsonName string
jsType descriptorpb.FieldOptions_JSType
cType descriptorpb.FieldOptions_CType
retention descriptorpb.FieldOptions_OptionRetention
targets []descriptorpb.FieldOptions_OptionTargetType
debugRedact bool
packed *bool
deprecated bool
numberPath []int32
typePath []int32
typeNamePath []int32
jsonNamePath []int32
jsTypePath []int32
cTypePath []int32
packedPath []int32
extendeePath []int32
}
func newField(
namedDescriptor namedDescriptor,
optionExtensionDescriptor optionExtensionDescriptor,
message Message,
number int,
label descriptorpb.FieldDescriptorProto_Label,
typ descriptorpb.FieldDescriptorProto_Type,
typeName string,
extendee string,
oneof *oneof,
proto3Optional bool,
jsonName string,
jsType descriptorpb.FieldOptions_JSType,
cType descriptorpb.FieldOptions_CType,
retention descriptorpb.FieldOptions_OptionRetention,
targets []descriptorpb.FieldOptions_OptionTargetType,
debugRedact bool,
packed *bool,
deprecated bool,
numberPath []int32,
typePath []int32,
typeNamePath []int32,
jsonNamePath []int32,
jsTypePath []int32,
cTypePath []int32,
packedPath []int32,
extendeePath []int32,
) *field {
return &field{
namedDescriptor: namedDescriptor,
optionExtensionDescriptor: optionExtensionDescriptor,
message: message,
number: number,
label: label,
typ: typ,
typeName: typeName,
extendee: extendee,
oneof: oneof,
proto3Optional: proto3Optional,
jsonName: jsonName,
jsType: jsType,
cType: cType,
retention: retention,
targets: targets,
debugRedact: debugRedact,
packed: packed,
deprecated: deprecated,
numberPath: numberPath,
typePath: typePath,
typeNamePath: typeNamePath,
jsonNamePath: jsonNamePath,
jsTypePath: jsTypePath,
cTypePath: cTypePath,
packedPath: packedPath,
extendeePath: extendeePath,
}
}
func (f *field) Message() Message {
return f.message
}
func (f *field) Number() int {
return f.number
}
func (f *field) Label() descriptorpb.FieldDescriptorProto_Label {
return f.label
}
func (f *field) Type() descriptorpb.FieldDescriptorProto_Type {
return f.typ
}
func (f *field) TypeName() string {
return f.typeName
}
func (f *field) Extendee() string {
return f.extendee
}
func (f *field) Oneof() Oneof {
// this has to be done or you have the bug where the interface is nil
// but value == nil is false
if f.oneof == nil {
return nil
}
return f.oneof
}
func (f *field) Proto3Optional() bool {
return f.proto3Optional
}
func (f *field) JSONName() string {
return f.jsonName
}
func (f *field) JSType() descriptorpb.FieldOptions_JSType {
return f.jsType
}
func (f *field) CType() descriptorpb.FieldOptions_CType {
return f.cType
}
func (f *field) Retention() descriptorpb.FieldOptions_OptionRetention {
return f.retention
}
func (f *field) Targets() []descriptorpb.FieldOptions_OptionTargetType {
return f.targets
}
func (f *field) DebugRedact() bool {
return f.debugRedact
}
func (f *field) Packed() *bool {
return f.packed
}
func (f *field) Deprecated() bool {
return f.deprecated
}
func (f *field) NumberLocation() Location {
return f.getLocation(f.numberPath)
}
func (f *field) TypeLocation() Location {
return f.getLocation(f.typePath)
}
func (f *field) TypeNameLocation() Location {
return f.getLocation(f.typeNamePath)
}
func (f *field) JSONNameLocation() Location {
return f.getLocation(f.jsonNamePath)
}
func (f *field) JSTypeLocation() Location {
return f.getLocation(f.jsTypePath)
}
func (f *field) CTypeLocation() Location {
return f.getLocation(f.cTypePath)
}
func (f *field) PackedLocation() Location {
return f.getLocation(f.packedPath)
}
func (f *field) ExtendeeLocation() Location {
return f.getLocation(f.extendeePath)
}