162 lines
3.6 KiB
Go
162 lines
3.6 KiB
Go
// Copyright 2020-2021 Buf Technologies, Inc.
|
|
//
|
|
// Licensed 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
|
|
|
|
type field struct {
|
|
namedDescriptor
|
|
|
|
message Message
|
|
number int
|
|
label FieldDescriptorProtoLabel
|
|
typ FieldDescriptorProtoType
|
|
typeName 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 FieldOptionsJSType
|
|
cType FieldOptionsCType
|
|
packed *bool
|
|
numberPath []int32
|
|
typePath []int32
|
|
typeNamePath []int32
|
|
jsonNamePath []int32
|
|
jsTypePath []int32
|
|
cTypePath []int32
|
|
packedPath []int32
|
|
}
|
|
|
|
func newField(
|
|
namedDescriptor namedDescriptor,
|
|
message Message,
|
|
number int,
|
|
label FieldDescriptorProtoLabel,
|
|
typ FieldDescriptorProtoType,
|
|
typeName string,
|
|
oneof *oneof,
|
|
proto3Optional bool,
|
|
jsonName string,
|
|
jsType FieldOptionsJSType,
|
|
cType FieldOptionsCType,
|
|
packed *bool,
|
|
numberPath []int32,
|
|
typePath []int32,
|
|
typeNamePath []int32,
|
|
jsonNamePath []int32,
|
|
jsTypePath []int32,
|
|
cTypePath []int32,
|
|
packedPath []int32,
|
|
) *field {
|
|
return &field{
|
|
namedDescriptor: namedDescriptor,
|
|
message: message,
|
|
number: number,
|
|
label: label,
|
|
typ: typ,
|
|
typeName: typeName,
|
|
oneof: oneof,
|
|
proto3Optional: proto3Optional,
|
|
jsonName: jsonName,
|
|
jsType: jsType,
|
|
cType: cType,
|
|
packed: packed,
|
|
numberPath: numberPath,
|
|
typePath: typePath,
|
|
typeNamePath: typeNamePath,
|
|
jsonNamePath: jsonNamePath,
|
|
jsTypePath: jsTypePath,
|
|
cTypePath: cTypePath,
|
|
packedPath: packedPath,
|
|
}
|
|
}
|
|
|
|
func (f *field) Message() Message {
|
|
return f.message
|
|
}
|
|
|
|
func (f *field) Number() int {
|
|
return f.number
|
|
}
|
|
|
|
func (f *field) Label() FieldDescriptorProtoLabel {
|
|
return f.label
|
|
}
|
|
|
|
func (f *field) Type() FieldDescriptorProtoType {
|
|
return f.typ
|
|
}
|
|
|
|
func (f *field) TypeName() string {
|
|
return f.typeName
|
|
}
|
|
|
|
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() FieldOptionsJSType {
|
|
return f.jsType
|
|
}
|
|
|
|
func (f *field) CType() FieldOptionsCType {
|
|
return f.cType
|
|
}
|
|
|
|
func (f *field) Packed() *bool {
|
|
return f.packed
|
|
}
|
|
|
|
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)
|
|
}
|