diff options
Diffstat (limited to 'generator/protoc_gen_nim.nim')
| -rw-r--r-- | generator/protoc_gen_nim.nim | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/generator/protoc_gen_nim.nim b/generator/protoc_gen_nim.nim index 8b38815..f35f1cc 100644 --- a/generator/protoc_gen_nim.nim +++ b/generator/protoc_gen_nim.nim @@ -27,10 +27,12 @@ type ftype: FieldType typeName: string packed: bool + oneofIdx: int Message = ref object names: Names fields: seq[Field] + oneofs: seq[string] ProcessedFile = ref object name: string @@ -89,6 +91,11 @@ proc newField(desc: FieldDescriptorProto): Field = result.ftype = convertFieldType(desc.type) result.typeName = "" result.packed = desc.options.packed + result.oneofIdx = + if hasOneof_index(desc): + desc.oneof_index + else: + -1 if result.ftype == FieldType.Message or result.ftype == FieldType.Enum: result.typeName = $initNamesFromTypeName(desc.type_name) @@ -100,12 +107,16 @@ proc newMessage(names: Names, desc: DescriptorProto): Message = result.names = names result.fields = @[] + result.oneofs = @[] log(&"newMessage {$result.names}") for field in desc.field: add(result.fields, newField(field)) + for oneof in desc.oneof_decl: + add(result.oneofs, oneof.name) + proc newEnum(names: Names, desc: EnumDescriptorProto): Enum = new(result) @@ -238,6 +249,7 @@ proc generateDesc(field: Field): string = addLine(result, &"label: FieldLabel.{field.label},", 16) addLine(result, &"typeName: \"{field.typeName}\",", 16) addLine(result, &"packed: {field.packed},", 16) + addLine(result, &"oneofIdx: {field.oneofIdx},", 16) addLine(result, "),", 12) proc generateDesc(message: Message): string = @@ -247,7 +259,11 @@ proc generateDesc(message: Message): string = addLine(result, "fields: @[", 8) for field in message.fields: result &= generateDesc(field) - addLine(result, "]", 8) + addLine(result, "],", 8) + addLine(result, "oneofs: @[", 8) + for oneof in message.oneofs: + addLine(result, &"\"{oneof}\",", 12) + addLine(result, "],", 8) addLine(result, ")", 4) proc generateDesc(e: Enum): string = |
