diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2018-03-27 19:57:35 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2018-03-27 19:57:35 +0300 |
| commit | 1a7bfab6a74ef3001c619891970818f2dcb434ea (patch) | |
| tree | a7c5d54c4f57576b7fb7fa525a970eb6af37fcb0 | |
| parent | 1defb9b10928fbd4b7b3c94dbab8432a83e9e9cd (diff) | |
| download | nimpb-1a7bfab6a74ef3001c619891970818f2dcb434ea.tar.gz nimpb-1a7bfab6a74ef3001c619891970818f2dcb434ea.zip | |
Support imports
| -rw-r--r-- | examples/addressbook/Makefile | 4 | ||||
| -rw-r--r-- | examples/addressbook/addressbook.proto | 13 | ||||
| -rw-r--r-- | examples/addressbook/addressbook_pb.nim | 37 | ||||
| -rw-r--r-- | examples/addressbook/phonenumber.proto | 12 | ||||
| -rw-r--r-- | examples/addressbook/phonenumber_pb.nim | 42 | ||||
| -rw-r--r-- | examples/addressbook/writer.nim | 7 | ||||
| -rw-r--r-- | generator/protoc_gen_nim.nim | 10 |
7 files changed, 73 insertions, 52 deletions
diff --git a/examples/addressbook/Makefile b/examples/addressbook/Makefile index 7fe8add..74d41e1 100644 --- a/examples/addressbook/Makefile +++ b/examples/addressbook/Makefile @@ -8,5 +8,5 @@ writer: writer.nim addressbook_pb.nim reader: reader.nim addressbook_pb.nim nim c reader.nim -addressbook_pb.nim: addressbook.proto - protoc --plugin=protoc-gen-nim=$(PLUGIN) --nim_out=. -I. addressbook.proto +addressbook_pb.nim: addressbook.proto phonenumber.proto + protoc --plugin=protoc-gen-nim=$(PLUGIN) --nim_out=. -I. addressbook.proto phonenumber.proto diff --git a/examples/addressbook/addressbook.proto b/examples/addressbook/addressbook.proto index 5e04629..5c8f315 100644 --- a/examples/addressbook/addressbook.proto +++ b/examples/addressbook/addressbook.proto @@ -1,21 +1,12 @@ syntax = "proto3"; +import "phonenumber.proto"; + message Person { string name = 1; int32 id = 2; string email = 3; - enum PhoneType { - MOBILE = 0; - HOME = 1; - WORK = 2; - } - - message PhoneNumber { - string number = 1; - PhoneType type = 2; // [default = HOME]; default values not supported yet - } - repeated PhoneNumber phones = 4; } diff --git a/examples/addressbook/addressbook_pb.nim b/examples/addressbook/addressbook_pb.nim index 8a37fb4..3e991f0 100644 --- a/examples/addressbook/addressbook_pb.nim +++ b/examples/addressbook/addressbook_pb.nim @@ -6,36 +6,9 @@ import protobuf/gen import protobuf/stream import protobuf/types +import phonenumber_pb + const - Person_PhoneTypeDesc = EnumDesc( - name: "Person_PhoneType", - values: @[ - EnumValueDesc(name: "MOBILE", number: 0), - EnumValueDesc(name: "HOME", number: 1), - EnumValueDesc(name: "WORK", number: 2), - ] - ) - Person_PhoneNumberDesc = MessageDesc( - name: "Person_PhoneNumber", - fields: @[ - FieldDesc( - name: "number", - number: 1, - ftype: FieldType.String, - label: FieldLabel.Optional, - typeName: "", - packed: false, - ), - FieldDesc( - name: "type", - number: 2, - ftype: FieldType.Enum, - label: FieldLabel.Optional, - typeName: "Person_PhoneType", - packed: false, - ), - ] - ) PersonDesc = MessageDesc( name: "Person", fields: @[ @@ -68,7 +41,7 @@ const number: 4, ftype: FieldType.Message, label: FieldLabel.Repeated, - typeName: "Person_PhoneNumber", + typeName: "PhoneNumber", packed: false, ), ] @@ -86,10 +59,6 @@ const ), ] ) -generateEnumType(Person_PhoneTypeDesc) -generateEnumProcs(Person_PhoneTypeDesc) -generateMessageType(Person_PhoneNumberDesc) -generateMessageProcs(Person_PhoneNumberDesc) generateMessageType(PersonDesc) generateMessageProcs(PersonDesc) generateMessageType(AddressBookDesc) diff --git a/examples/addressbook/phonenumber.proto b/examples/addressbook/phonenumber.proto new file mode 100644 index 0000000..2d53cfe --- /dev/null +++ b/examples/addressbook/phonenumber.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +enum PhoneType { + MOBILE = 0; + HOME = 1; + WORK = 2; +} + +message PhoneNumber { + string number = 1; + PhoneType type = 2; // [default = HOME]; default values not supported yet +} diff --git a/examples/addressbook/phonenumber_pb.nim b/examples/addressbook/phonenumber_pb.nim new file mode 100644 index 0000000..5c183b3 --- /dev/null +++ b/examples/addressbook/phonenumber_pb.nim @@ -0,0 +1,42 @@ +# Generated by protoc_gen_nim. Do not edit! + +import intsets + +import protobuf/gen +import protobuf/stream +import protobuf/types + +const + PhoneTypeDesc = EnumDesc( + name: "PhoneType", + values: @[ + EnumValueDesc(name: "MOBILE", number: 0), + EnumValueDesc(name: "HOME", number: 1), + EnumValueDesc(name: "WORK", number: 2), + ] + ) + PhoneNumberDesc = MessageDesc( + name: "PhoneNumber", + fields: @[ + FieldDesc( + name: "number", + number: 1, + ftype: FieldType.String, + label: FieldLabel.Optional, + typeName: "", + packed: false, + ), + FieldDesc( + name: "type", + number: 2, + ftype: FieldType.Enum, + label: FieldLabel.Optional, + typeName: "PhoneType", + packed: false, + ), + ] + ) +generateEnumType(PhoneTypeDesc) +generateEnumProcs(PhoneTypeDesc) +generateMessageType(PhoneNumberDesc) +generateMessageProcs(PhoneNumberDesc) diff --git a/examples/addressbook/writer.nim b/examples/addressbook/writer.nim index 6d32005..8dbac12 100644 --- a/examples/addressbook/writer.nim +++ b/examples/addressbook/writer.nim @@ -3,6 +3,7 @@ import streams import protobuf/stream import addressbook_pb +import phonenumber_pb let addressBook = newAddressBook() @@ -12,12 +13,12 @@ setId(john, 1) setEmail(john, "john.doe@example.com") addPeople(addressBook, john) -let johnPhone1 = newPerson_PhoneNumber() +let johnPhone1 = newPhoneNumber() setNumber(johnPhone1, "1234") setType(johnPhone1, MOBILE) addPhones(john, johnPhone1) -let johnPhone2 = newPerson_PhoneNumber() +let johnPhone2 = newPhoneNumber() setNumber(johnPhone2, "5566") setType(johnPhone2, WORK) addPhones(john, johnPhone2) @@ -28,7 +29,7 @@ setId(jane, 2) setEmail(jane, "jane.doe@example.com") addPeople(addressBook, jane) -let janePhone1 = newPerson_PhoneNumber() +let janePhone1 = newPhoneNumber() setNumber(janePhone1, "1432") setType(janePhone1, HOME) addPhones(jane, janePhone1) diff --git a/generator/protoc_gen_nim.nim b/generator/protoc_gen_nim.nim index 6d8f192..8b38815 100644 --- a/generator/protoc_gen_nim.nim +++ b/generator/protoc_gen_nim.nim @@ -267,8 +267,6 @@ proc processFile(filename: string, fdesc: FileDescriptorProto, log(&"processing {filename}: {pbfilename}") - # TODO: handle file dependencies - new(result) result.name = pbfilename result.data = "" @@ -282,6 +280,14 @@ proc processFile(filename: string, fdesc: FileDescriptorProto, addLine(result.data, "import protobuf/types") addLine(result.data, "") + for dep in fdesc.dependency: + var (dir, depname, _) = splitFile(dep) + var deppbname = (dir / depname) & "_pb" + addLine(result.data, &"import {deppbname}") + + if hasDependency(fdesc): + addLine(result.data, "") + let parsed = parseFile(filename, fdesc) addLine(result.data, "const") |
