func elmFieldType(field *descriptor.FieldDescriptorProto) string { inFieldName := field.GetTypeName() packageName, messageName := convert(inFieldName) if packageName == "" { return messageName } else { return packageName + "." + messageName } }
func convertField(curPkg *ProtoPackage, desc *descriptor.FieldDescriptorProto, msg *descriptor.DescriptorProto) (*Field, error) { field := &Field{ Name: desc.GetName(), } switch desc.GetType() { case descriptor.FieldDescriptorProto_TYPE_DOUBLE, descriptor.FieldDescriptorProto_TYPE_FLOAT: field.Type = "FLOAT" case descriptor.FieldDescriptorProto_TYPE_INT64, descriptor.FieldDescriptorProto_TYPE_UINT64, descriptor.FieldDescriptorProto_TYPE_INT32, descriptor.FieldDescriptorProto_TYPE_UINT32, descriptor.FieldDescriptorProto_TYPE_FIXED64, descriptor.FieldDescriptorProto_TYPE_FIXED32, descriptor.FieldDescriptorProto_TYPE_SFIXED32, descriptor.FieldDescriptorProto_TYPE_SFIXED64, descriptor.FieldDescriptorProto_TYPE_SINT32, descriptor.FieldDescriptorProto_TYPE_SINT64: field.Type = "INTEGER" case descriptor.FieldDescriptorProto_TYPE_STRING, descriptor.FieldDescriptorProto_TYPE_BYTES, descriptor.FieldDescriptorProto_TYPE_ENUM: field.Type = "STRING" case descriptor.FieldDescriptorProto_TYPE_BOOL: field.Type = "BOOLEAN" case descriptor.FieldDescriptorProto_TYPE_GROUP, descriptor.FieldDescriptorProto_TYPE_MESSAGE: field.Type = "RECORD" default: return nil, fmt.Errorf("unrecognized field type: %s", desc.GetType().String()) } switch desc.GetLabel() { case descriptor.FieldDescriptorProto_LABEL_OPTIONAL: field.Mode = "NULLABLE" case descriptor.FieldDescriptorProto_LABEL_REQUIRED: field.Mode = "REQUIRED" case descriptor.FieldDescriptorProto_LABEL_REPEATED: field.Mode = "REPEATED" default: return nil, fmt.Errorf("unrecognized field label: %s", desc.GetLabel().String()) } if field.Type != "RECORD" { return field, nil } recordType, ok := curPkg.lookupType(desc.GetTypeName()) if !ok { return nil, fmt.Errorf("no such message type named %s", desc.GetTypeName()) } var err error field.Fields, err = convertMessageType(curPkg, recordType) if err != nil { return nil, err } return field, nil }