diff options
| -rw-r--r-- | nimpb/compiler/compiler.nim | 2 | ||||
| -rw-r--r-- | nimpb/compiler/generator.nim | 17 |
2 files changed, 13 insertions, 6 deletions
diff --git a/nimpb/compiler/compiler.nim b/nimpb/compiler/compiler.nim index c44ade6..b52a4d6 100644 --- a/nimpb/compiler/compiler.nim +++ b/nimpb/compiler/compiler.nim @@ -5,7 +5,7 @@ import strformat import strutils from generator import processFileDescriptorSet, ServiceGenerator, Service, ServiceMethod -export Service, ServiceMethod +export ServiceGenerator, Service, ServiceMethod const nimpbProtocInfo = gorgeEx("nimble dump nimpb_protoc") diff --git a/nimpb/compiler/generator.nim b/nimpb/compiler/generator.nim index 5c4000a..fde4da0 100644 --- a/nimpb/compiler/generator.nim +++ b/nimpb/compiler/generator.nim @@ -60,7 +60,9 @@ type Proto2 Proto3 - ServiceGenerator* = proc (service: Service): string + ServiceGenerator* = ref object of RootObj + genImports*: proc (): string + genService*: proc (service: Service): string Service* = ref object name*: string @@ -1013,6 +1015,10 @@ proc processFile(fdesc: google_protobuf_FileDescriptorProto, addLine(result.data, "import nimpb/json as nimpb_json") addLine(result.data, "") + if serviceGenerator != nil: + if serviceGenerator.genImports != nil: + add(result.data, serviceGenerator.genImports()) + for dep in fdesc.dependency: var (dir, depname, _) = splitFile(dep) @@ -1046,10 +1052,11 @@ proc processFile(fdesc: google_protobuf_FileDescriptorProto, addLine(result.data, "") if serviceGenerator != nil: - for serviceDesc in fdesc.service: - let service = newService(serviceDesc, parsed) - addLine(result.data, "") - add(result.data, serviceGenerator(service)) + if serviceGenerator.genService != nil: + for serviceDesc in fdesc.service: + let service = newService(serviceDesc, parsed) + addLine(result.data, "") + add(result.data, serviceGenerator.genService(service)) proc processFileDescriptorSet*(filename: string, outdir: string, |
