本文整理汇总了Golang中github.com/gogo/protobuf/protoc-gen-gogo/descriptor.FieldDescriptorProto类的典型用法代码示例。如果您正苦于以下问题:Golang FieldDescriptorProto类的具体用法?Golang FieldDescriptorProto怎么用?Golang FieldDescriptorProto使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了FieldDescriptorProto类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: genRepeatedWriter
func (d *deepCopyGen) genRepeatedWriter(m *generator.Descriptor, f *descriptor.FieldDescriptorProto, notNullablePrefix string) func() {
fName := generator.CamelCase(*f.Name)
if gogoproto.IsCustomName(f) {
fName = gogoproto.GetCustomName(f)
}
typename, _ := d.gen.GoType(m, f)
isMessage := f.IsMessage()
repeatedFunc := func() {
d.gen.P("\tif m.", fName, " != nil {")
d.gen.P("\t\to.", fName, " = make(", typename, ", 0, len(m.", fName, "))")
if isMessage {
d.gen.P("\t\tfor _, v := range m.", fName, " {")
d.gen.P("\t\t\to.", fName, " = append(o.", fName, ", ", notNullablePrefix, "v.Copy())")
d.gen.P("\t\t}")
} else {
d.gen.P("\t\to.", fName, " = append(o.", fName, ", m.", fName, "...)")
}
d.gen.P("\t}")
d.gen.P()
}
return repeatedFunc
}
示例2: hasLoop
func (p *plugin) hasLoop(field *descriptor.FieldDescriptorProto, visited []*generator.Descriptor, excludes []*generator.Descriptor) *generator.Descriptor {
if field.IsMessage() || p.IsGroup(field) {
fieldMessage := p.ObjectNamed(field.GetTypeName()).(*generator.Descriptor)
fieldTypeName := generator.CamelCaseSlice(fieldMessage.TypeName())
for _, message := range visited {
messageTypeName := generator.CamelCaseSlice(message.TypeName())
if fieldTypeName == messageTypeName {
for _, e := range excludes {
if fieldTypeName == generator.CamelCaseSlice(e.TypeName()) {
return nil
}
}
return fieldMessage
}
}
for _, f := range fieldMessage.Field {
visited = append(visited, fieldMessage)
loopTo := p.hasLoop(f, visited, excludes)
if loopTo != nil {
return loopTo
}
}
}
return nil
}
示例3: genMapWriter
func (d *deepCopyGen) genMapWriter(m *generator.Descriptor, f *descriptor.FieldDescriptorProto, notNullablePrefix string) func() {
fName := generator.CamelCase(*f.Name)
if gogoproto.IsCustomName(f) {
fName = gogoproto.GetCustomName(f)
}
dv := d.gen.ObjectNamed(f.GetTypeName())
if desc, ok := dv.(*generator.Descriptor); ok && desc.GetOptions().GetMapEntry() {
mt := d.gen.GoMapType(desc, f)
typename := mt.GoType
valueIsMessage := mt.ValueField.IsMessage()
mapfunc := func() {
d.gen.P("\tif m.", fName, " != nil {")
d.gen.P("\t\to.", fName, " = make(", typename, ")")
d.gen.P("\t\tfor k, v := range m.", fName, " {")
if valueIsMessage {
d.gen.P("\t\t\to.", fName, "[k] = ", notNullablePrefix, "v.Copy()")
} else {
d.gen.P("\t\t\to.", fName, "[k] = v")
}
d.gen.P("\t\t}")
d.gen.P("\t}")
d.gen.P()
}
return mapfunc
}
return nil
}
示例4: genOneOfWriter
func (d *deepCopyGen) genOneOfWriter(m *generator.Descriptor, f *descriptor.FieldDescriptorProto, oneOfFuncs map[string][]func()) {
ccTypeName := generator.CamelCaseSlice(m.TypeName())
fName := generator.CamelCase(*f.Name)
if gogoproto.IsCustomName(f) {
fName = gogoproto.GetCustomName(f)
}
odp := m.OneofDecl[int(*f.OneofIndex)]
oneOfName := generator.CamelCase(odp.GetName())
oneOfNameFuncs, ok := oneOfFuncs[oneOfName]
if !ok {
oneOfFunc := func() {
d.gen.P("\tswitch m.", oneOfName, ".(type) {")
}
oneOfNameFuncs = append(oneOfNameFuncs, oneOfFunc)
}
isMessage := f.IsMessage()
oneOfFunc := func() {
tName := ccTypeName + "_" + fName
d.gen.P("\tcase *", tName, ":")
d.gen.P("\t\ti := &", tName, " {")
if isMessage {
d.gen.P("\t\t\t", fName, ": m.Get", fName, "().Copy(),")
} else {
d.gen.P("\t\t\t", fName, ": m.Get", fName, "(),")
}
d.gen.P("\t\t}")
d.gen.P()
d.gen.P("\t\to.", oneOfName, " = i")
}
oneOfNameFuncs = append(oneOfNameFuncs, oneOfFunc)
oneOfFuncs[oneOfName] = oneOfNameFuncs
}
示例5: genRepeated
func (d *deepCopyGen) genRepeated(m *generator.Descriptor, f *descriptor.FieldDescriptorProto) {
fName := generator.CamelCase(*f.Name)
if gogoproto.IsCustomName(f) {
fName = gogoproto.GetCustomName(f)
}
typename, _ := d.GoType(m, f)
d.P("if o.", fName, " != nil {")
d.In()
if f.IsMessage() {
d.P("m.", fName, " = make(", typename, ", len(o.", fName, "))")
// TODO(stevvooe): Handle custom type here?
goType := d.TypeName(d.ObjectNamed(f.GetTypeName())) // elides [] or *
d.P("for i := range m.", fName, " {")
d.In()
if !gogoproto.IsNullable(f) {
d.genCopyFunc("&m."+fName+"[i]", "&o."+fName+"[i]")
} else {
d.P("m.", fName, "[i] = &", goType, "{}")
d.genCopyFunc("m."+fName+"[i]", "o."+fName+"[i]")
}
d.Out()
d.P("}")
} else {
d.P("m.", fName, " = make(", typename, ", len(o.", fName, "))")
d.P("copy(m.", fName, ", ", "o.", fName, ")")
}
d.Out()
d.P("}")
d.P()
}
示例6: ProtoToType
func ProtoToType(field *descriptor.FieldDescriptorProto) Type {
decType := Decoded(ProtoToEncodedType(field.GetType()))
if !field.IsRepeated() {
return decType
}
return Type(int32(decType) + 100)
}
示例7: isFloat
func isFloat(f *descriptor.FieldDescriptorProto) bool {
switch f.GetType() {
case descriptor.FieldDescriptorProto_TYPE_DOUBLE,
descriptor.FieldDescriptorProto_TYPE_FLOAT:
return true
}
return false
}
示例8: TurnOffNullableForNativeTypesWithoutDefaultsOnly
func TurnOffNullableForNativeTypesWithoutDefaultsOnly(field *descriptor.FieldDescriptorProto) {
if field.IsRepeated() || field.IsMessage() {
return
}
if field.DefaultValue != nil {
return
}
SetBoolFieldOption(gogoproto.E_Nullable, false)(field)
}
示例9: NeedsNilCheck
func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool {
nullable := IsNullable(field)
if field.IsMessage() || IsCustomType(field) {
return nullable
}
if proto3 {
return false
}
return nullable || *field.Type == google_protobuf.FieldDescriptorProto_TYPE_BYTES
}
示例10: IsMap
func (g *Generator) IsMap(field *descriptor.FieldDescriptorProto) bool {
if !field.IsMessage() {
return false
}
byName := g.ObjectNamed(field.GetTypeName())
desc, ok := byName.(*Descriptor)
if byName == nil || !ok || !desc.GetOptions().GetMapEntry() {
return false
}
return true
}
示例11: AddTrans
func (this *visitor) AddTrans(srcToken int, field *descriptor.FieldDescriptorProto, dstToken int) {
input := field.GetKeyUint64()
if _, ok := this.trans[srcToken]; !ok {
this.trans[srcToken] = make(map[uint64]int)
}
if _, ok := this.trans[srcToken][input]; ok {
panic("transition already exists")
}
this.trans[srcToken][input] = dstToken
this.types[dstToken] = *field.Type
}
示例12: getEnumVal
func (p *plugin) getEnumVal(field *descriptor.FieldDescriptorProto, goTyp string) string {
enum := p.ObjectNamed(field.GetTypeName()).(*generator.EnumDescriptor)
l := len(enum.Value)
values := make([]string, l)
for i := range enum.Value {
values[i] = strconv.Itoa(int(*enum.Value[i].Number))
}
arr := "[]int32{" + strings.Join(values, ",") + "}"
val := strings.Join([]string{generator.GoTypeToName(goTyp), `(`, arr, `[r.Intn(`, fmt.Sprintf("%d", l), `)])`}, "")
return val
}
示例13: isNumber
func isNumber(f *descriptor.FieldDescriptorProto) bool {
switch f.GetType() {
case descriptor.FieldDescriptorProto_TYPE_INT32,
descriptor.FieldDescriptorProto_TYPE_INT64,
descriptor.FieldDescriptorProto_TYPE_SINT32,
descriptor.FieldDescriptorProto_TYPE_SINT64,
descriptor.FieldDescriptorProto_TYPE_UINT32,
descriptor.FieldDescriptorProto_TYPE_UINT64:
return true
}
return false
}
示例14: fixFieldName
// fixFieldName changes field names like
// 'id' -> 'ID'
func fixFieldName(field *gogo.FieldDescriptorProto) {
if gogoproto.IsCustomName(field) {
return // Skip if a custom name is specified.
}
if field.Options == nil {
field.Options = new(gogo.FieldOptions)
}
name := field.GetName()
name = snaker.SnakeToCamel(name)
name = lintName(name)
// Use gogoproto.customname
proto.SetExtension(field.Options, gogoproto.E_Customname, &name)
}
示例15: GoMapValueTypes
// GoMapValueTypes returns the map value Go type and the alias map value Go type (for casting), taking into
// account whether the map is nullable or the value is a message.
func GoMapValueTypes(mapField, valueField *descriptor.FieldDescriptorProto, goValueType, goValueAliasType string) (nullable bool, outGoType string, outGoAliasType string) {
nullable = gogoproto.IsNullable(mapField) && (valueField.IsMessage() || gogoproto.IsCustomType(mapField))
if nullable {
// ensure the non-aliased Go value type is a pointer for consistency
if strings.HasPrefix(goValueType, "*") {
outGoType = goValueType
} else {
outGoType = "*" + goValueType
}
outGoAliasType = goValueAliasType
} else {
outGoType = strings.Replace(goValueType, "*", "", 1)
outGoAliasType = strings.Replace(goValueAliasType, "*", "", 1)
}
return
}