本文整理汇总了Golang中github.com/golang/protobuf/protoc-gen-go/descriptor.DescriptorProto.GetOneofDecl方法的典型用法代码示例。如果您正苦于以下问题:Golang DescriptorProto.GetOneofDecl方法的具体用法?Golang DescriptorProto.GetOneofDecl怎么用?Golang DescriptorProto.GetOneofDecl使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/golang/protobuf/protoc-gen-go/descriptor.DescriptorProto
的用法示例。
在下文中一共展示了DescriptorProto.GetOneofDecl方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: fillTreeWithMessage
func fillTreeWithMessage(tree *tree, key string, proto *descriptor.DescriptorProto, loc string, locs map[string]*descriptor.SourceCodeInfo_Location) *message {
key = fmt.Sprintf("%s.%s", key, proto.GetName())
tree.messages[key] = &message{key: key, comment: getComment(loc, locs), DescriptorProto: proto}
// Oneofs
for idx, proto := range proto.GetOneofDecl() {
tree.messages[key].oneofs = append(tree.messages[key].oneofs, &oneof{
index: int32(idx),
OneofDescriptorProto: proto,
})
}
// Fields
for idx, proto := range proto.GetField() {
field := fillTreeWithField(tree, key, proto, fmt.Sprintf("%s,2,%d", loc, idx), locs)
tree.messages[key].fields = append(tree.messages[key].fields, field)
}
// Nested
for idx, proto := range proto.GetNestedType() {
message := fillTreeWithMessage(tree, key, proto, fmt.Sprintf("%s,3,%d", loc, idx), locs)
tree.messages[key].nested = append(tree.messages[key].nested, message)
}
// Enums
for idx, proto := range proto.GetEnumType() {
fillTreeWithEnum(tree, key, proto, fmt.Sprintf("%s,4,%d", loc, idx), locs)
}
return tree.messages[key]
}
示例2: GenerateOneofDefinition
func (fg *FileGenerator) GenerateOneofDefinition(prefix string, inMessage *descriptor.DescriptorProto, oneofIndex int) error {
inOneof := inMessage.GetOneofDecl()[oneofIndex]
// TODO: Prefix with message name to avoid collisions.
oneofType := oneofType(inOneof)
fg.P("")
fg.P("")
fg.P("type %s", oneofType)
{
fg.In()
leading := "="
{
oneofVariantName := oneofUnspecifiedValue(inOneof)
fg.P("%s %s", leading, oneofVariantName)
leading = "|"
}
for _, inField := range inMessage.GetField() {
if inField.OneofIndex != nil && inField.GetOneofIndex() == int32(oneofIndex) {
oneofVariantName := elmTypeName(inField.GetName())
oneofArgumentType := fieldElmType(inField)
fg.P("%s %s %s", leading, oneofVariantName, oneofArgumentType)
leading = "|"
}
}
fg.Out()
}
return nil
}
示例3: GenerateOneofDecoder
func (fg *FileGenerator) GenerateOneofDecoder(prefix string, inMessage *descriptor.DescriptorProto, oneofIndex int) error {
inOneof := inMessage.GetOneofDecl()[oneofIndex]
// TODO: Prefix with message name to avoid collisions.
oneofType := oneofType(inOneof)
decoderName := oneofDecoderName(inOneof)
fg.P("")
fg.P("")
fg.P("%s : JD.Decoder %s", decoderName, oneofType)
fg.P("%s =", decoderName)
{
fg.In()
fg.P("JD.lazy <| \\_ -> JD.oneOf")
{
fg.In()
leading := "["
for _, inField := range inMessage.GetField() {
if inField.OneofIndex != nil && inField.GetOneofIndex() == int32(oneofIndex) {
oneofVariantName := elmTypeName(inField.GetName())
decoderName := fieldDecoderName(inField)
fg.P("%s JD.map %s (JD.field %q %s)", leading, oneofVariantName, inField.GetJsonName(), decoderName)
leading = ","
}
}
fg.P("%s JD.succeed %s", leading, oneofUnspecifiedValue(inOneof))
fg.P("]")
fg.Out()
}
fg.Out()
}
return nil
}
示例4: GenerateMessageDefinition
func (fg *FileGenerator) GenerateMessageDefinition(prefix string, inMessage *descriptor.DescriptorProto) error {
typeName := prefix + inMessage.GetName()
fg.P("")
fg.P("")
fg.P("type alias %s =", typeName)
{
fg.In()
leading := "{"
for _, inField := range inMessage.GetField() {
if inField.OneofIndex != nil {
// Handled in the oneof only.
continue
}
optional := (inField.GetLabel() == descriptor.FieldDescriptorProto_LABEL_OPTIONAL) &&
(inField.GetType() == descriptor.FieldDescriptorProto_TYPE_MESSAGE)
repeated := inField.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED
fType := fieldElmType(inField)
fName := elmFieldName(inField.GetName())
fNumber := inField.GetNumber()
if repeated {
fg.P("%s %s : List %s -- %d", leading, fName, fType, fNumber)
} else {
if optional {
fg.P("%s %s : Maybe %s -- %d", leading, fName, fType, fNumber)
} else {
fg.P("%s %s : %s -- %d", leading, fName, fType, fNumber)
}
}
leading = ","
}
for _, inOneof := range inMessage.GetOneofDecl() {
oneofName := elmFieldName(inOneof.GetName())
// TODO: Prefix with message name to avoid collisions.
oneofTypeName := elmTypeName(inOneof.GetName())
fg.P("%s %s : %s", leading, oneofName, oneofTypeName)
leading = ","
}
fg.P("}")
fg.Out()
}
for i, _ := range inMessage.GetOneofDecl() {
fg.GenerateOneofDefinition(prefix, inMessage, i)
fg.GenerateOneofDecoder(prefix, inMessage, i)
fg.GenerateOneofEncoder(prefix, inMessage, i)
}
return nil
}
示例5: GenerateMessageEncoder
func (fg *FileGenerator) GenerateMessageEncoder(prefix string, inMessage *descriptor.DescriptorProto) error {
typeName := prefix + inMessage.GetName()
argName := "v"
fg.P("")
fg.P("")
fg.P("%s : %s -> JE.Value", encoderName(typeName), typeName)
fg.P("%s %s =", encoderName(typeName), argName)
{
fg.In()
fg.P("JE.object <| List.filterMap identity <|")
{
fg.In()
leading := "["
for _, inField := range inMessage.GetField() {
if inField.OneofIndex != nil {
// Handled in the oneof only.
continue
}
optional := (inField.GetLabel() == descriptor.FieldDescriptorProto_LABEL_OPTIONAL) &&
(inField.GetType() == descriptor.FieldDescriptorProto_TYPE_MESSAGE)
repeated := inField.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED
d := fieldEncoderName(inField)
val := argName + "." + elmFieldName(inField.GetName())
def := fieldDefaultValue(inField)
if repeated {
fg.P("%s (repeatedFieldEncoder %q %s %s)", leading, jsonFieldName(inField), d, val)
} else {
if optional {
fg.P("%s (optionalEncoder %q %s %s)", leading, jsonFieldName(inField), d, val)
} else {
fg.P("%s (requiredFieldEncoder %q %s %s %s)", leading, jsonFieldName(inField), d, def, val)
}
}
leading = ","
}
for _, inOneof := range inMessage.GetOneofDecl() {
val := argName + "." + elmFieldName(inOneof.GetName())
oneofEncoderName := oneofEncoderName(inOneof)
fg.P("%s (%s %s)", leading, oneofEncoderName, val)
leading = ","
}
fg.P("]")
fg.Out()
}
fg.Out()
}
return nil
}
示例6: GenerateMessageDecoder
func (fg *FileGenerator) GenerateMessageDecoder(prefix string, inMessage *descriptor.DescriptorProto) error {
typeName := prefix + inMessage.GetName()
fg.P("")
fg.P("")
fg.P("%s : JD.Decoder %s", decoderName(typeName), typeName)
fg.P("%s =", decoderName(typeName))
{
fg.In()
fg.P("JD.lazy <| \\_ -> %s", typeName)
{
fg.In()
leading := "<$>"
for _, inField := range inMessage.GetField() {
if inField.OneofIndex != nil {
// Handled in the oneof only.
continue
}
optional := (inField.GetLabel() == descriptor.FieldDescriptorProto_LABEL_OPTIONAL) &&
(inField.GetType() == descriptor.FieldDescriptorProto_TYPE_MESSAGE)
repeated := inField.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED
d := fieldDecoderName(inField)
def := fieldDefaultValue(inField)
if repeated {
fg.P("%s (repeatedFieldDecoder %q %s)", leading, jsonFieldName(inField), d)
} else {
if optional {
fg.P("%s (optionalFieldDecoder %q %s)", leading, jsonFieldName(inField), d)
} else {
fg.P("%s (requiredFieldDecoder %q %s %s)", leading, jsonFieldName(inField), def, d)
}
}
leading = "<*>"
}
for _, inOneof := range inMessage.GetOneofDecl() {
oneofDecoderName := oneofDecoderName(inOneof)
fg.P("%s %s", leading, oneofDecoderName)
leading = "<*>"
}
fg.Out()
}
fg.Out()
}
return nil
}
示例7: GenerateOneofEncoder
func (fg *FileGenerator) GenerateOneofEncoder(prefix string, inMessage *descriptor.DescriptorProto, oneofIndex int) error {
inOneof := inMessage.GetOneofDecl()[oneofIndex]
// TODO: Prefix with message name to avoid collisions.
oneofType := oneofType(inOneof)
encoderName := oneofEncoderName(inOneof)
argName := "v"
fg.P("")
fg.P("")
fg.P("%s : %s -> Maybe ( String, JE.Value )", encoderName, oneofType)
fg.P("%s %s =", encoderName, argName)
{
fg.In()
fg.P("case %s of", argName)
{
fg.In()
valueName := "x"
{
oneofVariantName := oneofUnspecifiedValue(inOneof)
fg.P("%s -> Nothing", oneofVariantName)
}
// TODO: Evaluate them in reverse order, as per
// https://developers.google.com/protocol-buffers/docs/proto3#oneof
for _, inField := range inMessage.GetField() {
if inField.OneofIndex != nil && inField.GetOneofIndex() == int32(oneofIndex) {
oneofVariantName := elmTypeName(inField.GetName())
e := fieldEncoderName(inField)
fg.P("%s %s ->", oneofVariantName, valueName)
fg.In()
fg.P("Just ( %q, %s %s )", inField.GetJsonName(), e, valueName)
fg.Out()
}
}
fg.Out()
}
fg.Out()
}
return nil
}