aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2018-04-11 21:48:43 +0300
committerOskari Timperi <oskari.timperi@iki.fi>2018-04-11 21:48:43 +0300
commita829d59fb2cdb5c3362729e23da4f35f9558cb35 (patch)
tree08836a6f3cb36f77aee48df0f35a6925084834e8
parent29b197fee90ca19925e19fd45f71f78b6525ffcd (diff)
parent466d8d1d2e878330ff36c2aacd640092e7fba738 (diff)
downloadnimpb-a829d59fb2cdb5c3362729e23da4f35f9558cb35.tar.gz
nimpb-a829d59fb2cdb5c3362729e23da4f35f9558cb35.zip
Merge branch 'move-compiler-back'
-rw-r--r--nimpb.nimble11
-rw-r--r--nimpb/compiler/compiler.nim86
-rw-r--r--nimpb/compiler/descriptor_pb.nim4801
-rw-r--r--nimpb/compiler/generator.nim1084
-rw-r--r--nimpb/compiler/nimpb_build.nim44
-rw-r--r--nimpb/json.nim (renamed from src/nimpb/json.nim)0
-rw-r--r--nimpb/nimpb.nim (renamed from src/nimpb/nimpb.nim)0
-rw-r--r--nimpb/wkt/any_pb.nim (renamed from src/nimpb/wkt/any_pb.nim)1
-rw-r--r--nimpb/wkt/api_pb.nim (renamed from src/nimpb/wkt/api_pb.nim)0
-rw-r--r--nimpb/wkt/duration_pb.nim (renamed from src/nimpb/wkt/duration_pb.nim)0
-rw-r--r--nimpb/wkt/empty_pb.nim (renamed from src/nimpb/wkt/empty_pb.nim)0
-rw-r--r--nimpb/wkt/field_mask_pb.nim (renamed from src/nimpb/wkt/field_mask_pb.nim)0
-rw-r--r--nimpb/wkt/source_context_pb.nim (renamed from src/nimpb/wkt/source_context_pb.nim)0
-rw-r--r--nimpb/wkt/struct_pb.nim (renamed from src/nimpb/wkt/struct_pb.nim)0
-rw-r--r--nimpb/wkt/timestamp_pb.nim (renamed from src/nimpb/wkt/timestamp_pb.nim)0
-rw-r--r--nimpb/wkt/type_pb.nim (renamed from src/nimpb/wkt/type_pb.nim)0
-rw-r--r--nimpb/wkt/wrappers_pb.nim (renamed from src/nimpb/wkt/wrappers_pb.nim)0
-rw-r--r--tests/nim.cfg2
18 files changed, 6026 insertions, 3 deletions
diff --git a/nimpb.nimble b/nimpb.nimble
index 80c6acc..067245e 100644
--- a/nimpb.nimble
+++ b/nimpb.nimble
@@ -2,6 +2,15 @@ version = "0.1.0"
author = "Oskari Timperi"
description = "protobuf library for Nim"
license = "MIT"
-srcDir = "src"
+
+skipDirs = @["examples", "tests"]
+
+bin = @["nimpb/compiler/nimpb_build"]
requires "nim >= 0.18.0"
+
+# Hard dependency for now. In the future we could make nimpb_protoc download
+# stuff on-demand which would make the dependency a bit lighter. Especially
+# if a user already has the protoc compiler somewhere, in which case
+# nimpb_protoc might be unnecessary.
+requires "nimpb_protoc"
diff --git a/nimpb/compiler/compiler.nim b/nimpb/compiler/compiler.nim
new file mode 100644
index 0000000..c44ade6
--- /dev/null
+++ b/nimpb/compiler/compiler.nim
@@ -0,0 +1,86 @@
+import macros
+import os
+import osproc
+import strformat
+import strutils
+
+from generator import processFileDescriptorSet, ServiceGenerator, Service, ServiceMethod
+export Service, ServiceMethod
+
+const
+ nimpbProtocInfo = gorgeEx("nimble dump nimpb_protoc")
+ isNimpbProtocAvailable = nimpbProtocInfo[1] == 0
+
+when isNimpbProtocAvailable:
+ import nimpb_protoc
+
+proc findCompiler*(): string =
+ result = ""
+
+ if existsEnv("NIMPB_PROTOC"):
+ result = getEnv("NIMPB_PROTOC")
+ if not fileExists(result):
+ result = ""
+
+ if result == "":
+ result = findExe("protoc")
+
+ when isNimpbProtocAvailable:
+ if result == "":
+ result = nimpb_protoc.getCompilerPath()
+
+ if result == "":
+ let msg = """
+error: protoc compiler not found
+
+Now you have three options to make this work:
+
+1. Tell me the full path to the protoc executable by using NIMPB_PROTOC
+ environment variable
+
+2. You can also make sure that protoc is in PATH, which will make me find it
+
+3. Install nimpb_protoc with nimble, which includes the protoc compiler for the
+ most common platforms (Windows, Linux, macOS) and I should be able to pick
+ it up after a recompile
+
+"""
+
+ raise newException(Exception, msg)
+
+proc myTempDir(): string =
+ result = getTempDir() / "nimpb_protoc_tmp"
+
+proc compileProtos*(protos: openArray[string],
+ includes: openArray[string],
+ outdir: string,
+ serviceGenerator: ServiceGenerator = nil) =
+ let command = findCompiler()
+ var args: seq[string] = @[]
+
+ var outputFilename = myTempDir() / "file-descriptor-set"
+ createDir(myTempDir())
+
+ add(args, "--include_imports")
+ add(args, "--include_source_info")
+ add(args, &"-o{outputFilename}")
+
+ for incdir in includes:
+ add(args, &"-I{incdir}")
+
+ when isNimpbProtocAvailable:
+ add(args, &"-I{getProtoIncludeDir()}")
+
+ for proto in protos:
+ add(args, proto)
+
+ var cmdline: string = quoteShell(command)
+ for arg in args:
+ cmdline &= " " & quoteShell(arg)
+
+ let (outp, rc) = execCmdEx(cmdline)
+
+ if rc != 0:
+ raise newException(Exception, outp)
+
+ processFileDescriptorSet(outputFilename, outdir, protos, serviceGenerator)
diff --git a/nimpb/compiler/descriptor_pb.nim b/nimpb/compiler/descriptor_pb.nim
new file mode 100644
index 0000000..968ff57
--- /dev/null
+++ b/nimpb/compiler/descriptor_pb.nim
@@ -0,0 +1,4801 @@
+# Generated by protoc_gen_nim. Do not edit!
+
+import intsets
+
+import ../nimpb
+
+type
+ google_protobuf_FieldDescriptorProto_Type* {.pure.} = enum
+ TYPE_DOUBLE = 1
+ TYPE_FLOAT = 2
+ TYPE_INT64 = 3
+ TYPE_UINT64 = 4
+ TYPE_INT32 = 5
+ TYPE_FIXED64 = 6
+ TYPE_FIXED32 = 7
+ TYPE_BOOL = 8
+ TYPE_STRING = 9
+ TYPE_GROUP = 10
+ TYPE_MESSAGE = 11
+ TYPE_BYTES = 12
+ TYPE_UINT32 = 13
+ TYPE_ENUM = 14
+ TYPE_SFIXED32 = 15
+ TYPE_SFIXED64 = 16
+ TYPE_SINT32 = 17
+ TYPE_SINT64 = 18
+ google_protobuf_FieldDescriptorProto_Label* {.pure.} = enum
+ LABEL_OPTIONAL = 1
+ LABEL_REQUIRED = 2
+ LABEL_REPEATED = 3
+ google_protobuf_FileOptions_OptimizeMode* {.pure.} = enum
+ SPEED = 1
+ CODE_SIZE = 2
+ LITE_RUNTIME = 3
+ google_protobuf_FieldOptions_CType* {.pure.} = enum
+ STRING = 0
+ CORD = 1
+ STRING_PIECE = 2
+ google_protobuf_FieldOptions_JSType* {.pure.} = enum
+ JS_NORMAL = 0
+ JS_STRING = 1
+ JS_NUMBER = 2
+ google_protobuf_MethodOptions_IdempotencyLevel* {.pure.} = enum
+ IDEMPOTENCY_UNKNOWN = 0
+ NO_SIDE_EFFECTS = 1
+ IDEMPOTENT = 2
+ google_protobuf_FileDescriptorSet* = ref google_protobuf_FileDescriptorSetObj
+ google_protobuf_FileDescriptorSetObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ file: seq[google_protobuf_FileDescriptorProto]
+ google_protobuf_FileDescriptorProto* = ref google_protobuf_FileDescriptorProtoObj
+ google_protobuf_FileDescriptorProtoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: string
+ package: string
+ dependency: seq[string]
+ public_dependency: seq[int32]
+ weak_dependency: seq[int32]
+ message_type: seq[google_protobuf_DescriptorProto]
+ enum_type: seq[google_protobuf_EnumDescriptorProto]
+ service: seq[google_protobuf_ServiceDescriptorProto]
+ extension: seq[google_protobuf_FieldDescriptorProto]
+ options: google_protobuf_FileOptions
+ source_code_info: google_protobuf_SourceCodeInfo
+ syntax: string
+ google_protobuf_DescriptorProto* = ref google_protobuf_DescriptorProtoObj
+ google_protobuf_DescriptorProtoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: string
+ field: seq[google_protobuf_FieldDescriptorProto]
+ extension: seq[google_protobuf_FieldDescriptorProto]
+ nested_type: seq[google_protobuf_DescriptorProto]
+ enum_type: seq[google_protobuf_EnumDescriptorProto]
+ extension_range: seq[google_protobuf_DescriptorProto_ExtensionRange]
+ oneof_decl: seq[google_protobuf_OneofDescriptorProto]
+ options: google_protobuf_MessageOptions
+ reserved_range: seq[google_protobuf_DescriptorProto_ReservedRange]
+ reserved_name: seq[string]
+ google_protobuf_DescriptorProto_ReservedRange* = ref google_protobuf_DescriptorProto_ReservedRangeObj
+ google_protobuf_DescriptorProto_ReservedRangeObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ start: int32
+ fend: int32
+ google_protobuf_DescriptorProto_ExtensionRange* = ref google_protobuf_DescriptorProto_ExtensionRangeObj
+ google_protobuf_DescriptorProto_ExtensionRangeObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ start: int32
+ fend: int32
+ options: google_protobuf_ExtensionRangeOptions
+ google_protobuf_ExtensionRangeOptions* = ref google_protobuf_ExtensionRangeOptionsObj
+ google_protobuf_ExtensionRangeOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_FieldDescriptorProto* = ref google_protobuf_FieldDescriptorProtoObj
+ google_protobuf_FieldDescriptorProtoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: string
+ number: int32
+ label: google_protobuf_FieldDescriptorProto_Label
+ ftype: google_protobuf_FieldDescriptorProto_Type
+ type_name: string
+ extendee: string
+ default_value: string
+ oneof_index: int32
+ json_name: string
+ options: google_protobuf_FieldOptions
+ google_protobuf_OneofDescriptorProto* = ref google_protobuf_OneofDescriptorProtoObj
+ google_protobuf_OneofDescriptorProtoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: string
+ options: google_protobuf_OneofOptions
+ google_protobuf_EnumDescriptorProto* = ref google_protobuf_EnumDescriptorProtoObj
+ google_protobuf_EnumDescriptorProtoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: string
+ value: seq[google_protobuf_EnumValueDescriptorProto]
+ options: google_protobuf_EnumOptions
+ reserved_range: seq[google_protobuf_EnumDescriptorProto_EnumReservedRange]
+ reserved_name: seq[string]
+ google_protobuf_EnumDescriptorProto_EnumReservedRange* = ref google_protobuf_EnumDescriptorProto_EnumReservedRangeObj
+ google_protobuf_EnumDescriptorProto_EnumReservedRangeObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ start: int32
+ fend: int32
+ google_protobuf_EnumValueDescriptorProto* = ref google_protobuf_EnumValueDescriptorProtoObj
+ google_protobuf_EnumValueDescriptorProtoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: string
+ number: int32
+ options: google_protobuf_EnumValueOptions
+ google_protobuf_ServiceDescriptorProto* = ref google_protobuf_ServiceDescriptorProtoObj
+ google_protobuf_ServiceDescriptorProtoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: string
+ fmethod: seq[google_protobuf_MethodDescriptorProto]
+ options: google_protobuf_ServiceOptions
+ google_protobuf_MethodDescriptorProto* = ref google_protobuf_MethodDescriptorProtoObj
+ google_protobuf_MethodDescriptorProtoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: string
+ input_type: string
+ output_type: string
+ options: google_protobuf_MethodOptions
+ client_streaming: bool
+ server_streaming: bool
+ google_protobuf_FileOptions* = ref google_protobuf_FileOptionsObj
+ google_protobuf_FileOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ java_package: string
+ java_outer_classname: string
+ java_multiple_files: bool
+ java_generate_equals_and_hash: bool
+ java_string_check_utf8: bool
+ optimize_for: google_protobuf_FileOptions_OptimizeMode
+ go_package: string
+ cc_generic_services: bool
+ java_generic_services: bool
+ py_generic_services: bool
+ php_generic_services: bool
+ deprecated: bool
+ cc_enable_arenas: bool
+ objc_class_prefix: string
+ csharp_namespace: string
+ swift_prefix: string
+ php_class_prefix: string
+ php_namespace: string
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_MessageOptions* = ref google_protobuf_MessageOptionsObj
+ google_protobuf_MessageOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ message_set_wire_format: bool
+ no_standard_descriptor_accessor: bool
+ deprecated: bool
+ map_entry: bool
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_FieldOptions* = ref google_protobuf_FieldOptionsObj
+ google_protobuf_FieldOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ ctype: google_protobuf_FieldOptions_CType
+ packed: bool
+ jstype: google_protobuf_FieldOptions_JSType
+ lazy: bool
+ deprecated: bool
+ weak: bool
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_OneofOptions* = ref google_protobuf_OneofOptionsObj
+ google_protobuf_OneofOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_EnumOptions* = ref google_protobuf_EnumOptionsObj
+ google_protobuf_EnumOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ allow_alias: bool
+ deprecated: bool
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_EnumValueOptions* = ref google_protobuf_EnumValueOptionsObj
+ google_protobuf_EnumValueOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ deprecated: bool
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_ServiceOptions* = ref google_protobuf_ServiceOptionsObj
+ google_protobuf_ServiceOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ deprecated: bool
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_MethodOptions* = ref google_protobuf_MethodOptionsObj
+ google_protobuf_MethodOptionsObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ deprecated: bool
+ idempotency_level: google_protobuf_MethodOptions_IdempotencyLevel
+ uninterpreted_option: seq[google_protobuf_UninterpretedOption]
+ google_protobuf_UninterpretedOption* = ref google_protobuf_UninterpretedOptionObj
+ google_protobuf_UninterpretedOptionObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name: seq[google_protobuf_UninterpretedOption_NamePart]
+ identifier_value: string
+ positive_int_value: uint64
+ negative_int_value: int64
+ double_value: float64
+ string_value: bytes
+ aggregate_value: string
+ google_protobuf_UninterpretedOption_NamePart* = ref google_protobuf_UninterpretedOption_NamePartObj
+ google_protobuf_UninterpretedOption_NamePartObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ name_part: string
+ is_extension: bool
+ google_protobuf_SourceCodeInfo* = ref google_protobuf_SourceCodeInfoObj
+ google_protobuf_SourceCodeInfoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ location: seq[google_protobuf_SourceCodeInfo_Location]
+ google_protobuf_SourceCodeInfo_Location* = ref google_protobuf_SourceCodeInfo_LocationObj
+ google_protobuf_SourceCodeInfo_LocationObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ path: seq[int32]
+ span: seq[int32]
+ leading_comments: string
+ trailing_comments: string
+ leading_detached_comments: seq[string]
+ google_protobuf_GeneratedCodeInfo* = ref google_protobuf_GeneratedCodeInfoObj
+ google_protobuf_GeneratedCodeInfoObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ annotation: seq[google_protobuf_GeneratedCodeInfo_Annotation]
+ google_protobuf_GeneratedCodeInfo_Annotation* = ref google_protobuf_GeneratedCodeInfo_AnnotationObj
+ google_protobuf_GeneratedCodeInfo_AnnotationObj* = object of RootObj
+ hasField: IntSet
+ unknownFields: seq[UnknownField]
+ path: seq[int32]
+ source_file: string
+ begin: int32
+ fend: int32
+
+proc newgoogle_protobuf_UninterpretedOption_NamePart*(): google_protobuf_UninterpretedOption_NamePart
+proc newgoogle_protobuf_UninterpretedOption_NamePart*(data: string): google_protobuf_UninterpretedOption_NamePart
+proc writegoogle_protobuf_UninterpretedOption_NamePart*(stream: ProtobufStream, message: google_protobuf_UninterpretedOption_NamePart)
+proc readgoogle_protobuf_UninterpretedOption_NamePart*(stream: ProtobufStream): google_protobuf_UninterpretedOption_NamePart
+proc sizeOfgoogle_protobuf_UninterpretedOption_NamePart*(message: google_protobuf_UninterpretedOption_NamePart): uint64
+
+proc newgoogle_protobuf_UninterpretedOption*(): google_protobuf_UninterpretedOption
+proc newgoogle_protobuf_UninterpretedOption*(data: string): google_protobuf_UninterpretedOption
+proc writegoogle_protobuf_UninterpretedOption*(stream: ProtobufStream, message: google_protobuf_UninterpretedOption)
+proc readgoogle_protobuf_UninterpretedOption*(stream: ProtobufStream): google_protobuf_UninterpretedOption
+proc sizeOfgoogle_protobuf_UninterpretedOption*(message: google_protobuf_UninterpretedOption): uint64
+
+proc newgoogle_protobuf_EnumValueOptions*(): google_protobuf_EnumValueOptions
+proc newgoogle_protobuf_EnumValueOptions*(data: string): google_protobuf_EnumValueOptions
+proc writegoogle_protobuf_EnumValueOptions*(stream: ProtobufStream, message: google_protobuf_EnumValueOptions)
+proc readgoogle_protobuf_EnumValueOptions*(stream: ProtobufStream): google_protobuf_EnumValueOptions
+proc sizeOfgoogle_protobuf_EnumValueOptions*(message: google_protobuf_EnumValueOptions): uint64
+
+proc newgoogle_protobuf_EnumValueDescriptorProto*(): google_protobuf_EnumValueDescriptorProto
+proc newgoogle_protobuf_EnumValueDescriptorProto*(data: string): google_protobuf_EnumValueDescriptorProto
+proc writegoogle_protobuf_EnumValueDescriptorProto*(stream: ProtobufStream, message: google_protobuf_EnumValueDescriptorProto)
+proc readgoogle_protobuf_EnumValueDescriptorProto*(stream: ProtobufStream): google_protobuf_EnumValueDescriptorProto
+proc sizeOfgoogle_protobuf_EnumValueDescriptorProto*(message: google_protobuf_EnumValueDescriptorProto): uint64
+
+proc newgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(): google_protobuf_EnumDescriptorProto_EnumReservedRange
+proc newgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(data: string): google_protobuf_EnumDescriptorProto_EnumReservedRange
+proc writegoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(stream: ProtobufStream, message: google_protobuf_EnumDescriptorProto_EnumReservedRange)
+proc readgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(stream: ProtobufStream): google_protobuf_EnumDescriptorProto_EnumReservedRange
+proc sizeOfgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange): uint64
+
+proc newgoogle_protobuf_EnumOptions*(): google_protobuf_EnumOptions
+proc newgoogle_protobuf_EnumOptions*(data: string): google_protobuf_EnumOptions
+proc writegoogle_protobuf_EnumOptions*(stream: ProtobufStream, message: google_protobuf_EnumOptions)
+proc readgoogle_protobuf_EnumOptions*(stream: ProtobufStream): google_protobuf_EnumOptions
+proc sizeOfgoogle_protobuf_EnumOptions*(message: google_protobuf_EnumOptions): uint64
+
+proc newgoogle_protobuf_EnumDescriptorProto*(): google_protobuf_EnumDescriptorProto
+proc newgoogle_protobuf_EnumDescriptorProto*(data: string): google_protobuf_EnumDescriptorProto
+proc writegoogle_protobuf_EnumDescriptorProto*(stream: ProtobufStream, message: google_protobuf_EnumDescriptorProto)
+proc readgoogle_protobuf_EnumDescriptorProto*(stream: ProtobufStream): google_protobuf_EnumDescriptorProto
+proc sizeOfgoogle_protobuf_EnumDescriptorProto*(message: google_protobuf_EnumDescriptorProto): uint64
+
+proc newgoogle_protobuf_ExtensionRangeOptions*(): google_protobuf_ExtensionRangeOptions
+proc newgoogle_protobuf_ExtensionRangeOptions*(data: string): google_protobuf_ExtensionRangeOptions
+proc writegoogle_protobuf_ExtensionRangeOptions*(stream: ProtobufStream, message: google_protobuf_ExtensionRangeOptions)
+proc readgoogle_protobuf_ExtensionRangeOptions*(stream: ProtobufStream): google_protobuf_ExtensionRangeOptions
+proc sizeOfgoogle_protobuf_ExtensionRangeOptions*(message: google_protobuf_ExtensionRangeOptions): uint64
+
+proc newgoogle_protobuf_SourceCodeInfo_Location*(): google_protobuf_SourceCodeInfo_Location
+proc newgoogle_protobuf_SourceCodeInfo_Location*(data: string): google_protobuf_SourceCodeInfo_Location
+proc writegoogle_protobuf_SourceCodeInfo_Location*(stream: ProtobufStream, message: google_protobuf_SourceCodeInfo_Location)
+proc readgoogle_protobuf_SourceCodeInfo_Location*(stream: ProtobufStream): google_protobuf_SourceCodeInfo_Location
+proc sizeOfgoogle_protobuf_SourceCodeInfo_Location*(message: google_protobuf_SourceCodeInfo_Location): uint64
+
+proc newgoogle_protobuf_SourceCodeInfo*(): google_protobuf_SourceCodeInfo
+proc newgoogle_protobuf_SourceCodeInfo*(data: string): google_protobuf_SourceCodeInfo
+proc writegoogle_protobuf_SourceCodeInfo*(stream: ProtobufStream, message: google_protobuf_SourceCodeInfo)
+proc readgoogle_protobuf_SourceCodeInfo*(stream: ProtobufStream): google_protobuf_SourceCodeInfo
+proc sizeOfgoogle_protobuf_SourceCodeInfo*(message: google_protobuf_SourceCodeInfo): uint64
+
+proc newgoogle_protobuf_FieldOptions*(): google_protobuf_FieldOptions
+proc newgoogle_protobuf_FieldOptions*(data: string): google_protobuf_FieldOptions
+proc writegoogle_protobuf_FieldOptions*(stream: ProtobufStream, message: google_protobuf_FieldOptions)
+proc readgoogle_protobuf_FieldOptions*(stream: ProtobufStream): google_protobuf_FieldOptions
+proc sizeOfgoogle_protobuf_FieldOptions*(message: google_protobuf_FieldOptions): uint64
+
+proc newgoogle_protobuf_FieldDescriptorProto*(): google_protobuf_FieldDescriptorProto
+proc newgoogle_protobuf_FieldDescriptorProto*(data: string): google_protobuf_FieldDescriptorProto
+proc writegoogle_protobuf_FieldDescriptorProto*(stream: ProtobufStream, message: google_protobuf_FieldDescriptorProto)
+proc readgoogle_protobuf_FieldDescriptorProto*(stream: ProtobufStream): google_protobuf_FieldDescriptorProto
+proc sizeOfgoogle_protobuf_FieldDescriptorProto*(message: google_protobuf_FieldDescriptorProto): uint64
+
+proc newgoogle_protobuf_DescriptorProto_ExtensionRange*(): google_protobuf_DescriptorProto_ExtensionRange
+proc newgoogle_protobuf_DescriptorProto_ExtensionRange*(data: string): google_protobuf_DescriptorProto_ExtensionRange
+proc writegoogle_protobuf_DescriptorProto_ExtensionRange*(stream: ProtobufStream, message: google_protobuf_DescriptorProto_ExtensionRange)
+proc readgoogle_protobuf_DescriptorProto_ExtensionRange*(stream: ProtobufStream): google_protobuf_DescriptorProto_ExtensionRange
+proc sizeOfgoogle_protobuf_DescriptorProto_ExtensionRange*(message: google_protobuf_DescriptorProto_ExtensionRange): uint64
+
+proc newgoogle_protobuf_MessageOptions*(): google_protobuf_MessageOptions
+proc newgoogle_protobuf_MessageOptions*(data: string): google_protobuf_MessageOptions
+proc writegoogle_protobuf_MessageOptions*(stream: ProtobufStream, message: google_protobuf_MessageOptions)
+proc readgoogle_protobuf_MessageOptions*(stream: ProtobufStream): google_protobuf_MessageOptions
+proc sizeOfgoogle_protobuf_MessageOptions*(message: google_protobuf_MessageOptions): uint64
+
+proc newgoogle_protobuf_OneofOptions*(): google_protobuf_OneofOptions
+proc newgoogle_protobuf_OneofOptions*(data: string): google_protobuf_OneofOptions
+proc writegoogle_protobuf_OneofOptions*(stream: ProtobufStream, message: google_protobuf_OneofOptions)
+proc readgoogle_protobuf_OneofOptions*(stream: ProtobufStream): google_protobuf_OneofOptions
+proc sizeOfgoogle_protobuf_OneofOptions*(message: google_protobuf_OneofOptions): uint64
+
+proc newgoogle_protobuf_OneofDescriptorProto*(): google_protobuf_OneofDescriptorProto
+proc newgoogle_protobuf_OneofDescriptorProto*(data: string): google_protobuf_OneofDescriptorProto
+proc writegoogle_protobuf_OneofDescriptorProto*(stream: ProtobufStream, message: google_protobuf_OneofDescriptorProto)
+proc readgoogle_protobuf_OneofDescriptorProto*(stream: ProtobufStream): google_protobuf_OneofDescriptorProto
+proc sizeOfgoogle_protobuf_OneofDescriptorProto*(message: google_protobuf_OneofDescriptorProto): uint64
+
+proc newgoogle_protobuf_DescriptorProto_ReservedRange*(): google_protobuf_DescriptorProto_ReservedRange
+proc newgoogle_protobuf_DescriptorProto_ReservedRange*(data: string): google_protobuf_DescriptorProto_ReservedRange
+proc writegoogle_protobuf_DescriptorProto_ReservedRange*(stream: ProtobufStream, message: google_protobuf_DescriptorProto_ReservedRange)
+proc readgoogle_protobuf_DescriptorProto_ReservedRange*(stream: ProtobufStream): google_protobuf_DescriptorProto_ReservedRange
+proc sizeOfgoogle_protobuf_DescriptorProto_ReservedRange*(message: google_protobuf_DescriptorProto_ReservedRange): uint64
+
+proc newgoogle_protobuf_DescriptorProto*(): google_protobuf_DescriptorProto
+proc newgoogle_protobuf_DescriptorProto*(data: string): google_protobuf_DescriptorProto
+proc writegoogle_protobuf_DescriptorProto*(stream: ProtobufStream, message: google_protobuf_DescriptorProto)
+proc readgoogle_protobuf_DescriptorProto*(stream: ProtobufStream): google_protobuf_DescriptorProto
+proc sizeOfgoogle_protobuf_DescriptorProto*(message: google_protobuf_DescriptorProto): uint64
+
+proc newgoogle_protobuf_FileOptions*(): google_protobuf_FileOptions
+proc newgoogle_protobuf_FileOptions*(data: string): google_protobuf_FileOptions
+proc writegoogle_protobuf_FileOptions*(stream: ProtobufStream, message: google_protobuf_FileOptions)
+proc readgoogle_protobuf_FileOptions*(stream: ProtobufStream): google_protobuf_FileOptions
+proc sizeOfgoogle_protobuf_FileOptions*(message: google_protobuf_FileOptions): uint64
+
+proc newgoogle_protobuf_ServiceOptions*(): google_protobuf_ServiceOptions
+proc newgoogle_protobuf_ServiceOptions*(data: string): google_protobuf_ServiceOptions
+proc writegoogle_protobuf_ServiceOptions*(stream: ProtobufStream, message: google_protobuf_ServiceOptions)
+proc readgoogle_protobuf_ServiceOptions*(stream: ProtobufStream): google_protobuf_ServiceOptions
+proc sizeOfgoogle_protobuf_ServiceOptions*(message: google_protobuf_ServiceOptions): uint64
+
+proc newgoogle_protobuf_MethodOptions*(): google_protobuf_MethodOptions
+proc newgoogle_protobuf_MethodOptions*(data: string): google_protobuf_MethodOptions
+proc writegoogle_protobuf_MethodOptions*(stream: ProtobufStream, message: google_protobuf_MethodOptions)
+proc readgoogle_protobuf_MethodOptions*(stream: ProtobufStream): google_protobuf_MethodOptions
+proc sizeOfgoogle_protobuf_MethodOptions*(message: google_protobuf_MethodOptions): uint64
+
+proc newgoogle_protobuf_MethodDescriptorProto*(): google_protobuf_MethodDescriptorProto
+proc newgoogle_protobuf_MethodDescriptorProto*(data: string): google_protobuf_MethodDescriptorProto
+proc writegoogle_protobuf_MethodDescriptorProto*(stream: ProtobufStream, message: google_protobuf_MethodDescriptorProto)
+proc readgoogle_protobuf_MethodDescriptorProto*(stream: ProtobufStream): google_protobuf_MethodDescriptorProto
+proc sizeOfgoogle_protobuf_MethodDescriptorProto*(message: google_protobuf_MethodDescriptorProto): uint64
+
+proc newgoogle_protobuf_ServiceDescriptorProto*(): google_protobuf_ServiceDescriptorProto
+proc newgoogle_protobuf_ServiceDescriptorProto*(data: string): google_protobuf_ServiceDescriptorProto
+proc writegoogle_protobuf_ServiceDescriptorProto*(stream: ProtobufStream, message: google_protobuf_ServiceDescriptorProto)
+proc readgoogle_protobuf_ServiceDescriptorProto*(stream: ProtobufStream): google_protobuf_ServiceDescriptorProto
+proc sizeOfgoogle_protobuf_ServiceDescriptorProto*(message: google_protobuf_ServiceDescriptorProto): uint64
+
+proc newgoogle_protobuf_FileDescriptorProto*(): google_protobuf_FileDescriptorProto
+proc newgoogle_protobuf_FileDescriptorProto*(data: string): google_protobuf_FileDescriptorProto
+proc writegoogle_protobuf_FileDescriptorProto*(stream: ProtobufStream, message: google_protobuf_FileDescriptorProto)
+proc readgoogle_protobuf_FileDescriptorProto*(stream: ProtobufStream): google_protobuf_FileDescriptorProto
+proc sizeOfgoogle_protobuf_FileDescriptorProto*(message: google_protobuf_FileDescriptorProto): uint64
+
+proc newgoogle_protobuf_FileDescriptorSet*(): google_protobuf_FileDescriptorSet
+proc newgoogle_protobuf_FileDescriptorSet*(data: string): google_protobuf_FileDescriptorSet
+proc writegoogle_protobuf_FileDescriptorSet*(stream: ProtobufStream, message: google_protobuf_FileDescriptorSet)
+proc readgoogle_protobuf_FileDescriptorSet*(stream: ProtobufStream): google_protobuf_FileDescriptorSet
+proc sizeOfgoogle_protobuf_FileDescriptorSet*(message: google_protobuf_FileDescriptorSet): uint64
+
+proc newgoogle_protobuf_GeneratedCodeInfo_Annotation*(): google_protobuf_GeneratedCodeInfo_Annotation
+proc newgoogle_protobuf_GeneratedCodeInfo_Annotation*(data: string): google_protobuf_GeneratedCodeInfo_Annotation
+proc writegoogle_protobuf_GeneratedCodeInfo_Annotation*(stream: ProtobufStream, message: google_protobuf_GeneratedCodeInfo_Annotation)
+proc readgoogle_protobuf_GeneratedCodeInfo_Annotation*(stream: ProtobufStream): google_protobuf_GeneratedCodeInfo_Annotation
+proc sizeOfgoogle_protobuf_GeneratedCodeInfo_Annotation*(message: google_protobuf_GeneratedCodeInfo_Annotation): uint64
+
+proc newgoogle_protobuf_GeneratedCodeInfo*(): google_protobuf_GeneratedCodeInfo
+proc newgoogle_protobuf_GeneratedCodeInfo*(data: string): google_protobuf_GeneratedCodeInfo
+proc writegoogle_protobuf_GeneratedCodeInfo*(stream: ProtobufStream, message: google_protobuf_GeneratedCodeInfo)
+proc readgoogle_protobuf_GeneratedCodeInfo*(stream: ProtobufStream): google_protobuf_GeneratedCodeInfo
+proc sizeOfgoogle_protobuf_GeneratedCodeInfo*(message: google_protobuf_GeneratedCodeInfo): uint64
+
+proc newgoogle_protobuf_UninterpretedOption_NamePart*(): google_protobuf_UninterpretedOption_NamePart =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name_part = ""
+ result.is_extension = false
+
+proc clearname_part*(message: google_protobuf_UninterpretedOption_NamePart) =
+ message.name_part = ""
+ excl(message.hasField, [1])
+
+proc hasname_part*(message: google_protobuf_UninterpretedOption_NamePart): bool =
+ result = contains(message.hasField, 1)
+
+proc setname_part*(message: google_protobuf_UninterpretedOption_NamePart, value: string) =
+ message.name_part = value
+ incl(message.hasField, 1)
+
+proc name_part*(message: google_protobuf_UninterpretedOption_NamePart): string {.inline.} =
+ message.name_part
+
+proc `name_part=`*(message: google_protobuf_UninterpretedOption_NamePart, value: string) {.inline.} =
+ setname_part(message, value)
+
+proc clearis_extension*(message: google_protobuf_UninterpretedOption_NamePart) =
+ message.is_extension = false
+ excl(message.hasField, [2])
+
+proc hasis_extension*(message: google_protobuf_UninterpretedOption_NamePart): bool =
+ result = contains(message.hasField, 2)
+
+proc setis_extension*(message: google_protobuf_UninterpretedOption_NamePart, value: bool) =
+ message.is_extension = value
+ incl(message.hasField, 2)
+
+proc is_extension*(message: google_protobuf_UninterpretedOption_NamePart): bool {.inline.} =
+ message.is_extension
+
+proc `is_extension=`*(message: google_protobuf_UninterpretedOption_NamePart, value: bool) {.inline.} =
+ setis_extension(message, value)
+
+proc sizeOfgoogle_protobuf_UninterpretedOption_NamePart*(message: google_protobuf_UninterpretedOption_NamePart): uint64 =
+ if hasname_part(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name_part)
+ if hasis_extension(message):
+ result = result + sizeOfTag(2, WireType.Varint)
+ result = result + sizeOfBool(message.is_extension)
+
+proc writegoogle_protobuf_UninterpretedOption_NamePart*(stream: ProtobufStream, message: google_protobuf_UninterpretedOption_NamePart) =
+ if hasname_part(message):
+ writeString(stream, message.name_part, 1)
+ if hasis_extension(message):
+ writeBool(stream, message.is_extension, 2)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_UninterpretedOption_NamePart*(stream: ProtobufStream): google_protobuf_UninterpretedOption_NamePart =
+ result = newgoogle_protobuf_UninterpretedOption_NamePart()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname_part(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.Varint)
+ setis_extension(result, readBool(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_UninterpretedOption_NamePart): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_UninterpretedOption_NamePart(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_UninterpretedOption_NamePart*(data: string): google_protobuf_UninterpretedOption_NamePart =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_UninterpretedOption_NamePart(pbs)
+
+
+proc newgoogle_protobuf_UninterpretedOption*(): google_protobuf_UninterpretedOption =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = @[]
+ result.identifier_value = ""
+ result.positive_int_value = 0
+ result.negative_int_value = 0
+ result.double_value = 0
+ result.string_value = bytes("")
+ result.aggregate_value = ""
+
+proc clearname*(message: google_protobuf_UninterpretedOption) =
+ message.name = @[]
+ excl(message.hasField, [2])
+
+proc hasname*(message: google_protobuf_UninterpretedOption): bool =
+ result = contains(message.hasField, 2) or (len(message.name) > 0)
+
+proc setname*(message: google_protobuf_UninterpretedOption, value: seq[google_protobuf_UninterpretedOption_NamePart]) =
+ message.name = value
+ incl(message.hasField, 2)
+
+proc addname*(message: google_protobuf_UninterpretedOption, value: google_protobuf_UninterpretedOption_NamePart) =
+ add(message.name, value)
+ incl(message.hasField, 2)
+
+proc name*(message: google_protobuf_UninterpretedOption): seq[google_protobuf_UninterpretedOption_NamePart] {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_UninterpretedOption, value: seq[google_protobuf_UninterpretedOption_NamePart]) {.inline.} =
+ setname(message, value)
+
+proc clearidentifier_value*(message: google_protobuf_UninterpretedOption) =
+ message.identifier_value = ""
+ excl(message.hasField, [3])
+
+proc hasidentifier_value*(message: google_protobuf_UninterpretedOption): bool =
+ result = contains(message.hasField, 3)
+
+proc setidentifier_value*(message: google_protobuf_UninterpretedOption, value: string) =
+ message.identifier_value = value
+ incl(message.hasField, 3)
+
+proc identifier_value*(message: google_protobuf_UninterpretedOption): string {.inline.} =
+ message.identifier_value
+
+proc `identifier_value=`*(message: google_protobuf_UninterpretedOption, value: string) {.inline.} =
+ setidentifier_value(message, value)
+
+proc clearpositive_int_value*(message: google_protobuf_UninterpretedOption) =
+ message.positive_int_value = 0
+ excl(message.hasField, [4])
+
+proc haspositive_int_value*(message: google_protobuf_UninterpretedOption): bool =
+ result = contains(message.hasField, 4)
+
+proc setpositive_int_value*(message: google_protobuf_UninterpretedOption, value: uint64) =
+ message.positive_int_value = value
+ incl(message.hasField, 4)
+
+proc positive_int_value*(message: google_protobuf_UninterpretedOption): uint64 {.inline.} =
+ message.positive_int_value
+
+proc `positive_int_value=`*(message: google_protobuf_UninterpretedOption, value: uint64) {.inline.} =
+ setpositive_int_value(message, value)
+
+proc clearnegative_int_value*(message: google_protobuf_UninterpretedOption) =
+ message.negative_int_value = 0
+ excl(message.hasField, [5])
+
+proc hasnegative_int_value*(message: google_protobuf_UninterpretedOption): bool =
+ result = contains(message.hasField, 5)
+
+proc setnegative_int_value*(message: google_protobuf_UninterpretedOption, value: int64) =
+ message.negative_int_value = value
+ incl(message.hasField, 5)
+
+proc negative_int_value*(message: google_protobuf_UninterpretedOption): int64 {.inline.} =
+ message.negative_int_value
+
+proc `negative_int_value=`*(message: google_protobuf_UninterpretedOption, value: int64) {.inline.} =
+ setnegative_int_value(message, value)
+
+proc cleardouble_value*(message: google_protobuf_UninterpretedOption) =
+ message.double_value = 0
+ excl(message.hasField, [6])
+
+proc hasdouble_value*(message: google_protobuf_UninterpretedOption): bool =
+ result = contains(message.hasField, 6)
+
+proc setdouble_value*(message: google_protobuf_UninterpretedOption, value: float64) =
+ message.double_value = value
+ incl(message.hasField, 6)
+
+proc double_value*(message: google_protobuf_UninterpretedOption): float64 {.inline.} =
+ message.double_value
+
+proc `double_value=`*(message: google_protobuf_UninterpretedOption, value: float64) {.inline.} =
+ setdouble_value(message, value)
+
+proc clearstring_value*(message: google_protobuf_UninterpretedOption) =
+ message.string_value = bytes("")
+ excl(message.hasField, [7])
+
+proc hasstring_value*(message: google_protobuf_UninterpretedOption): bool =
+ result = contains(message.hasField, 7)
+
+proc setstring_value*(message: google_protobuf_UninterpretedOption, value: bytes) =
+ message.string_value = value
+ incl(message.hasField, 7)
+
+proc string_value*(message: google_protobuf_UninterpretedOption): bytes {.inline.} =
+ message.string_value
+
+proc `string_value=`*(message: google_protobuf_UninterpretedOption, value: bytes) {.inline.} =
+ setstring_value(message, value)
+
+proc clearaggregate_value*(message: google_protobuf_UninterpretedOption) =
+ message.aggregate_value = ""
+ excl(message.hasField, [8])
+
+proc hasaggregate_value*(message: google_protobuf_UninterpretedOption): bool =
+ result = contains(message.hasField, 8)
+
+proc setaggregate_value*(message: google_protobuf_UninterpretedOption, value: string) =
+ message.aggregate_value = value
+ incl(message.hasField, 8)
+
+proc aggregate_value*(message: google_protobuf_UninterpretedOption): string {.inline.} =
+ message.aggregate_value
+
+proc `aggregate_value=`*(message: google_protobuf_UninterpretedOption, value: string) {.inline.} =
+ setaggregate_value(message, value)
+
+proc sizeOfgoogle_protobuf_UninterpretedOption*(message: google_protobuf_UninterpretedOption): uint64 =
+ for value in message.name:
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption_NamePart(value))
+ if hasidentifier_value(message):
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfString(message.identifier_value)
+ if haspositive_int_value(message):
+ result = result + sizeOfTag(4, WireType.Varint)
+ result = result + sizeOfUInt64(message.positive_int_value)
+ if hasnegative_int_value(message):
+ result = result + sizeOfTag(5, WireType.Varint)
+ result = result + sizeOfInt64(message.negative_int_value)
+ if hasdouble_value(message):
+ result = result + sizeOfTag(6, WireType.Fixed64)
+ result = result + sizeOfDouble(message.double_value)
+ if hasstring_value(message):
+ result = result + sizeOfTag(7, WireType.LengthDelimited)
+ result = result + sizeOfBytes(message.string_value)
+ if hasaggregate_value(message):
+ result = result + sizeOfTag(8, WireType.LengthDelimited)
+ result = result + sizeOfString(message.aggregate_value)
+
+proc writegoogle_protobuf_UninterpretedOption*(stream: ProtobufStream, message: google_protobuf_UninterpretedOption) =
+ for value in message.name:
+ writeMessage(stream, value, 2)
+ if hasidentifier_value(message):
+ writeString(stream, message.identifier_value, 3)
+ if haspositive_int_value(message):
+ writeUInt64(stream, message.positive_int_value, 4)
+ if hasnegative_int_value(message):
+ writeInt64(stream, message.negative_int_value, 5)
+ if hasdouble_value(message):
+ writeDouble(stream, message.double_value, 6)
+ if hasstring_value(message):
+ writeBytes(stream, message.string_value, 7)
+ if hasaggregate_value(message):
+ writeString(stream, message.aggregate_value, 8)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_UninterpretedOption*(stream: ProtobufStream): google_protobuf_UninterpretedOption =
+ result = newgoogle_protobuf_UninterpretedOption()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addname(result, newgoogle_protobuf_UninterpretedOption_NamePart(data))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setidentifier_value(result, readString(stream))
+ of 4:
+ expectWireType(wireType, WireType.Varint)
+ setpositive_int_value(result, readUInt64(stream))
+ of 5:
+ expectWireType(wireType, WireType.Varint)
+ setnegative_int_value(result, readInt64(stream))
+ of 6:
+ expectWireType(wireType, WireType.Fixed64)
+ setdouble_value(result, readDouble(stream))
+ of 7:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setstring_value(result, readBytes(stream))
+ of 8:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setaggregate_value(result, readString(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_UninterpretedOption): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_UninterpretedOption(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_UninterpretedOption*(data: string): google_protobuf_UninterpretedOption =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_UninterpretedOption(pbs)
+
+
+proc newgoogle_protobuf_EnumValueOptions*(): google_protobuf_EnumValueOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.deprecated = false
+ result.uninterpreted_option = @[]
+
+proc cleardeprecated*(message: google_protobuf_EnumValueOptions) =
+ message.deprecated = false
+ excl(message.hasField, [1])
+
+proc hasdeprecated*(message: google_protobuf_EnumValueOptions): bool =
+ result = contains(message.hasField, 1)
+
+proc setdeprecated*(message: google_protobuf_EnumValueOptions, value: bool) =
+ message.deprecated = value
+ incl(message.hasField, 1)
+
+proc deprecated*(message: google_protobuf_EnumValueOptions): bool {.inline.} =
+ message.deprecated
+
+proc `deprecated=`*(message: google_protobuf_EnumValueOptions, value: bool) {.inline.} =
+ setdeprecated(message, value)
+
+proc clearuninterpreted_option*(message: google_protobuf_EnumValueOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_EnumValueOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_EnumValueOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_EnumValueOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_EnumValueOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_EnumValueOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_EnumValueOptions*(message: google_protobuf_EnumValueOptions): uint64 =
+ if hasdeprecated(message):
+ result = result + sizeOfTag(1, WireType.Varint)
+ result = result + sizeOfBool(message.deprecated)
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_EnumValueOptions*(stream: ProtobufStream, message: google_protobuf_EnumValueOptions) =
+ if hasdeprecated(message):
+ writeBool(stream, message.deprecated, 1)
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_EnumValueOptions*(stream: ProtobufStream): google_protobuf_EnumValueOptions =
+ result = newgoogle_protobuf_EnumValueOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.Varint)
+ setdeprecated(result, readBool(stream))
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_EnumValueOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_EnumValueOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_EnumValueOptions*(data: string): google_protobuf_EnumValueOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_EnumValueOptions(pbs)
+
+
+proc newgoogle_protobuf_EnumValueDescriptorProto*(): google_protobuf_EnumValueDescriptorProto =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = ""
+ result.number = 0
+ result.options = nil
+
+proc clearname*(message: google_protobuf_EnumValueDescriptorProto) =
+ message.name = ""
+ excl(message.hasField, [1])
+
+proc hasname*(message: google_protobuf_EnumValueDescriptorProto): bool =
+ result = contains(message.hasField, 1)
+
+proc setname*(message: google_protobuf_EnumValueDescriptorProto, value: string) =
+ message.name = value
+ incl(message.hasField, 1)
+
+proc name*(message: google_protobuf_EnumValueDescriptorProto): string {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_EnumValueDescriptorProto, value: string) {.inline.} =
+ setname(message, value)
+
+proc clearnumber*(message: google_protobuf_EnumValueDescriptorProto) =
+ message.number = 0
+ excl(message.hasField, [2])
+
+proc hasnumber*(message: google_protobuf_EnumValueDescriptorProto): bool =
+ result = contains(message.hasField, 2)
+
+proc setnumber*(message: google_protobuf_EnumValueDescriptorProto, value: int32) =
+ message.number = value
+ incl(message.hasField, 2)
+
+proc number*(message: google_protobuf_EnumValueDescriptorProto): int32 {.inline.} =
+ message.number
+
+proc `number=`*(message: google_protobuf_EnumValueDescriptorProto, value: int32) {.inline.} =
+ setnumber(message, value)
+
+proc clearoptions*(message: google_protobuf_EnumValueDescriptorProto) =
+ message.options = nil
+ excl(message.hasField, [3])
+
+proc hasoptions*(message: google_protobuf_EnumValueDescriptorProto): bool =
+ result = contains(message.hasField, 3)
+
+proc setoptions*(message: google_protobuf_EnumValueDescriptorProto, value: google_protobuf_EnumValueOptions) =
+ message.options = value
+ incl(message.hasField, 3)
+
+proc options*(message: google_protobuf_EnumValueDescriptorProto): google_protobuf_EnumValueOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_EnumValueDescriptorProto, value: google_protobuf_EnumValueOptions) {.inline.} =
+ setoptions(message, value)
+
+proc sizeOfgoogle_protobuf_EnumValueDescriptorProto*(message: google_protobuf_EnumValueDescriptorProto): uint64 =
+ if hasname(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name)
+ if hasnumber(message):
+ result = result + sizeOfTag(2, WireType.Varint)
+ result = result + sizeOfInt32(message.number)
+ if hasoptions(message):
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_EnumValueOptions(message.options))
+
+proc writegoogle_protobuf_EnumValueDescriptorProto*(stream: ProtobufStream, message: google_protobuf_EnumValueDescriptorProto) =
+ if hasname(message):
+ writeString(stream, message.name, 1)
+ if hasnumber(message):
+ writeInt32(stream, message.number, 2)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 3)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_EnumValueDescriptorProto*(stream: ProtobufStream): google_protobuf_EnumValueDescriptorProto =
+ result = newgoogle_protobuf_EnumValueDescriptorProto()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.Varint)
+ setnumber(result, readInt32(stream))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_EnumValueOptions(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_EnumValueDescriptorProto): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_EnumValueDescriptorProto(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_EnumValueDescriptorProto*(data: string): google_protobuf_EnumValueDescriptorProto =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_EnumValueDescriptorProto(pbs)
+
+
+proc newgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(): google_protobuf_EnumDescriptorProto_EnumReservedRange =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.start = 0
+ result.fend = 0
+
+proc clearstart*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange) =
+ message.start = 0
+ excl(message.hasField, [1])
+
+proc hasstart*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange): bool =
+ result = contains(message.hasField, 1)
+
+proc setstart*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange, value: int32) =
+ message.start = value
+ incl(message.hasField, 1)
+
+proc start*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange): int32 {.inline.} =
+ message.start
+
+proc `start=`*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange, value: int32) {.inline.} =
+ setstart(message, value)
+
+proc clearfend*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange) =
+ message.fend = 0
+ excl(message.hasField, [2])
+
+proc hasfend*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange): bool =
+ result = contains(message.hasField, 2)
+
+proc setfend*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange, value: int32) =
+ message.fend = value
+ incl(message.hasField, 2)
+
+proc fend*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange): int32 {.inline.} =
+ message.fend
+
+proc `fend=`*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange, value: int32) {.inline.} =
+ setfend(message, value)
+
+proc sizeOfgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange): uint64 =
+ if hasstart(message):
+ result = result + sizeOfTag(1, WireType.Varint)
+ result = result + sizeOfInt32(message.start)
+ if hasfend(message):
+ result = result + sizeOfTag(2, WireType.Varint)
+ result = result + sizeOfInt32(message.fend)
+
+proc writegoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(stream: ProtobufStream, message: google_protobuf_EnumDescriptorProto_EnumReservedRange) =
+ if hasstart(message):
+ writeInt32(stream, message.start, 1)
+ if hasfend(message):
+ writeInt32(stream, message.fend, 2)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(stream: ProtobufStream): google_protobuf_EnumDescriptorProto_EnumReservedRange =
+ result = newgoogle_protobuf_EnumDescriptorProto_EnumReservedRange()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.Varint)
+ setstart(result, readInt32(stream))
+ of 2:
+ expectWireType(wireType, WireType.Varint)
+ setfend(result, readInt32(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_EnumDescriptorProto_EnumReservedRange): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_EnumDescriptorProto_EnumReservedRange(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(data: string): google_protobuf_EnumDescriptorProto_EnumReservedRange =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_EnumDescriptorProto_EnumReservedRange(pbs)
+
+
+proc newgoogle_protobuf_EnumOptions*(): google_protobuf_EnumOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.allow_alias = false
+ result.deprecated = false
+ result.uninterpreted_option = @[]
+
+proc clearallow_alias*(message: google_protobuf_EnumOptions) =
+ message.allow_alias = false
+ excl(message.hasField, [2])
+
+proc hasallow_alias*(message: google_protobuf_EnumOptions): bool =
+ result = contains(message.hasField, 2)
+
+proc setallow_alias*(message: google_protobuf_EnumOptions, value: bool) =
+ message.allow_alias = value
+ incl(message.hasField, 2)
+
+proc allow_alias*(message: google_protobuf_EnumOptions): bool {.inline.} =
+ message.allow_alias
+
+proc `allow_alias=`*(message: google_protobuf_EnumOptions, value: bool) {.inline.} =
+ setallow_alias(message, value)
+
+proc cleardeprecated*(message: google_protobuf_EnumOptions) =
+ message.deprecated = false
+ excl(message.hasField, [3])
+
+proc hasdeprecated*(message: google_protobuf_EnumOptions): bool =
+ result = contains(message.hasField, 3)
+
+proc setdeprecated*(message: google_protobuf_EnumOptions, value: bool) =
+ message.deprecated = value
+ incl(message.hasField, 3)
+
+proc deprecated*(message: google_protobuf_EnumOptions): bool {.inline.} =
+ message.deprecated
+
+proc `deprecated=`*(message: google_protobuf_EnumOptions, value: bool) {.inline.} =
+ setdeprecated(message, value)
+
+proc clearuninterpreted_option*(message: google_protobuf_EnumOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_EnumOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_EnumOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_EnumOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_EnumOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_EnumOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_EnumOptions*(message: google_protobuf_EnumOptions): uint64 =
+ if hasallow_alias(message):
+ result = result + sizeOfTag(2, WireType.Varint)
+ result = result + sizeOfBool(message.allow_alias)
+ if hasdeprecated(message):
+ result = result + sizeOfTag(3, WireType.Varint)
+ result = result + sizeOfBool(message.deprecated)
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_EnumOptions*(stream: ProtobufStream, message: google_protobuf_EnumOptions) =
+ if hasallow_alias(message):
+ writeBool(stream, message.allow_alias, 2)
+ if hasdeprecated(message):
+ writeBool(stream, message.deprecated, 3)
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_EnumOptions*(stream: ProtobufStream): google_protobuf_EnumOptions =
+ result = newgoogle_protobuf_EnumOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 2:
+ expectWireType(wireType, WireType.Varint)
+ setallow_alias(result, readBool(stream))
+ of 3:
+ expectWireType(wireType, WireType.Varint)
+ setdeprecated(result, readBool(stream))
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_EnumOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_EnumOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_EnumOptions*(data: string): google_protobuf_EnumOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_EnumOptions(pbs)
+
+
+proc newgoogle_protobuf_EnumDescriptorProto*(): google_protobuf_EnumDescriptorProto =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = ""
+ result.value = @[]
+ result.options = nil
+ result.reserved_range = @[]
+ result.reserved_name = @[]
+
+proc clearname*(message: google_protobuf_EnumDescriptorProto) =
+ message.name = ""
+ excl(message.hasField, [1])
+
+proc hasname*(message: google_protobuf_EnumDescriptorProto): bool =
+ result = contains(message.hasField, 1)
+
+proc setname*(message: google_protobuf_EnumDescriptorProto, value: string) =
+ message.name = value
+ incl(message.hasField, 1)
+
+proc name*(message: google_protobuf_EnumDescriptorProto): string {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_EnumDescriptorProto, value: string) {.inline.} =
+ setname(message, value)
+
+proc clearvalue*(message: google_protobuf_EnumDescriptorProto) =
+ message.value = @[]
+ excl(message.hasField, [2])
+
+proc hasvalue*(message: google_protobuf_EnumDescriptorProto): bool =
+ result = contains(message.hasField, 2) or (len(message.value) > 0)
+
+proc setvalue*(message: google_protobuf_EnumDescriptorProto, value: seq[google_protobuf_EnumValueDescriptorProto]) =
+ message.value = value
+ incl(message.hasField, 2)
+
+proc addvalue*(message: google_protobuf_EnumDescriptorProto, value: google_protobuf_EnumValueDescriptorProto) =
+ add(message.value, value)
+ incl(message.hasField, 2)
+
+proc value*(message: google_protobuf_EnumDescriptorProto): seq[google_protobuf_EnumValueDescriptorProto] {.inline.} =
+ message.value
+
+proc `value=`*(message: google_protobuf_EnumDescriptorProto, value: seq[google_protobuf_EnumValueDescriptorProto]) {.inline.} =
+ setvalue(message, value)
+
+proc clearoptions*(message: google_protobuf_EnumDescriptorProto) =
+ message.options = nil
+ excl(message.hasField, [3])
+
+proc hasoptions*(message: google_protobuf_EnumDescriptorProto): bool =
+ result = contains(message.hasField, 3)
+
+proc setoptions*(message: google_protobuf_EnumDescriptorProto, value: google_protobuf_EnumOptions) =
+ message.options = value
+ incl(message.hasField, 3)
+
+proc options*(message: google_protobuf_EnumDescriptorProto): google_protobuf_EnumOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_EnumDescriptorProto, value: google_protobuf_EnumOptions) {.inline.} =
+ setoptions(message, value)
+
+proc clearreserved_range*(message: google_protobuf_EnumDescriptorProto) =
+ message.reserved_range = @[]
+ excl(message.hasField, [4])
+
+proc hasreserved_range*(message: google_protobuf_EnumDescriptorProto): bool =
+ result = contains(message.hasField, 4) or (len(message.reserved_range) > 0)
+
+proc setreserved_range*(message: google_protobuf_EnumDescriptorProto, value: seq[google_protobuf_EnumDescriptorProto_EnumReservedRange]) =
+ message.reserved_range = value
+ incl(message.hasField, 4)
+
+proc addreserved_range*(message: google_protobuf_EnumDescriptorProto, value: google_protobuf_EnumDescriptorProto_EnumReservedRange) =
+ add(message.reserved_range, value)
+ incl(message.hasField, 4)
+
+proc reserved_range*(message: google_protobuf_EnumDescriptorProto): seq[google_protobuf_EnumDescriptorProto_EnumReservedRange] {.inline.} =
+ message.reserved_range
+
+proc `reserved_range=`*(message: google_protobuf_EnumDescriptorProto, value: seq[google_protobuf_EnumDescriptorProto_EnumReservedRange]) {.inline.} =
+ setreserved_range(message, value)
+
+proc clearreserved_name*(message: google_protobuf_EnumDescriptorProto) =
+ message.reserved_name = @[]
+ excl(message.hasField, [5])
+
+proc hasreserved_name*(message: google_protobuf_EnumDescriptorProto): bool =
+ result = contains(message.hasField, 5) or (len(message.reserved_name) > 0)
+
+proc setreserved_name*(message: google_protobuf_EnumDescriptorProto, value: seq[string]) =
+ message.reserved_name = value
+ incl(message.hasField, 5)
+
+proc addreserved_name*(message: google_protobuf_EnumDescriptorProto, value: string) =
+ add(message.reserved_name, value)
+ incl(message.hasField, 5)
+
+proc reserved_name*(message: google_protobuf_EnumDescriptorProto): seq[string] {.inline.} =
+ message.reserved_name
+
+proc `reserved_name=`*(message: google_protobuf_EnumDescriptorProto, value: seq[string]) {.inline.} =
+ setreserved_name(message, value)
+
+proc sizeOfgoogle_protobuf_EnumDescriptorProto*(message: google_protobuf_EnumDescriptorProto): uint64 =
+ if hasname(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name)
+ for value in message.value:
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_EnumValueDescriptorProto(value))
+ if hasoptions(message):
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_EnumOptions(message.options))
+ for value in message.reserved_range:
+ result = result + sizeOfTag(4, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_EnumDescriptorProto_EnumReservedRange(value))
+ for value in message.reserved_name:
+ result = result + sizeOfTag(5, WireType.LengthDelimited)
+ result = result + sizeOfString(value)
+
+proc writegoogle_protobuf_EnumDescriptorProto*(stream: ProtobufStream, message: google_protobuf_EnumDescriptorProto) =
+ if hasname(message):
+ writeString(stream, message.name, 1)
+ for value in message.value:
+ writeMessage(stream, value, 2)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 3)
+ for value in message.reserved_range:
+ writeMessage(stream, value, 4)
+ for value in message.reserved_name:
+ writeString(stream, value, 5)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_EnumDescriptorProto*(stream: ProtobufStream): google_protobuf_EnumDescriptorProto =
+ result = newgoogle_protobuf_EnumDescriptorProto()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addvalue(result, newgoogle_protobuf_EnumValueDescriptorProto(data))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_EnumOptions(data))
+ of 4:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addreserved_range(result, newgoogle_protobuf_EnumDescriptorProto_EnumReservedRange(data))
+ of 5:
+ expectWireType(wireType, WireType.LengthDelimited)
+ addreserved_name(result, readString(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_EnumDescriptorProto): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_EnumDescriptorProto(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_EnumDescriptorProto*(data: string): google_protobuf_EnumDescriptorProto =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_EnumDescriptorProto(pbs)
+
+
+proc newgoogle_protobuf_ExtensionRangeOptions*(): google_protobuf_ExtensionRangeOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.uninterpreted_option = @[]
+
+proc clearuninterpreted_option*(message: google_protobuf_ExtensionRangeOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_ExtensionRangeOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_ExtensionRangeOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_ExtensionRangeOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_ExtensionRangeOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_ExtensionRangeOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_ExtensionRangeOptions*(message: google_protobuf_ExtensionRangeOptions): uint64 =
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_ExtensionRangeOptions*(stream: ProtobufStream, message: google_protobuf_ExtensionRangeOptions) =
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_ExtensionRangeOptions*(stream: ProtobufStream): google_protobuf_ExtensionRangeOptions =
+ result = newgoogle_protobuf_ExtensionRangeOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_ExtensionRangeOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_ExtensionRangeOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_ExtensionRangeOptions*(data: string): google_protobuf_ExtensionRangeOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_ExtensionRangeOptions(pbs)
+
+
+proc newgoogle_protobuf_SourceCodeInfo_Location*(): google_protobuf_SourceCodeInfo_Location =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.path = @[]
+ result.span = @[]
+ result.leading_comments = ""
+ result.trailing_comments = ""
+ result.leading_detached_comments = @[]
+
+proc clearpath*(message: google_protobuf_SourceCodeInfo_Location) =
+ message.path = @[]
+ excl(message.hasField, [1])
+
+proc haspath*(message: google_protobuf_SourceCodeInfo_Location): bool =
+ result = contains(message.hasField, 1) or (len(message.path) > 0)
+
+proc setpath*(message: google_protobuf_SourceCodeInfo_Location, value: seq[int32]) =
+ message.path = value
+ incl(message.hasField, 1)
+
+proc addpath*(message: google_protobuf_SourceCodeInfo_Location, value: int32) =
+ add(message.path, value)
+ incl(message.hasField, 1)
+
+proc path*(message: google_protobuf_SourceCodeInfo_Location): seq[int32] {.inline.} =
+ message.path
+
+proc `path=`*(message: google_protobuf_SourceCodeInfo_Location, value: seq[int32]) {.inline.} =
+ setpath(message, value)
+
+proc clearspan*(message: google_protobuf_SourceCodeInfo_Location) =
+ message.span = @[]
+ excl(message.hasField, [2])
+
+proc hasspan*(message: google_protobuf_SourceCodeInfo_Location): bool =
+ result = contains(message.hasField, 2) or (len(message.span) > 0)
+
+proc setspan*(message: google_protobuf_SourceCodeInfo_Location, value: seq[int32]) =
+ message.span = value
+ incl(message.hasField, 2)
+
+proc addspan*(message: google_protobuf_SourceCodeInfo_Location, value: int32) =
+ add(message.span, value)
+ incl(message.hasField, 2)
+
+proc span*(message: google_protobuf_SourceCodeInfo_Location): seq[int32] {.inline.} =
+ message.span
+
+proc `span=`*(message: google_protobuf_SourceCodeInfo_Location, value: seq[int32]) {.inline.} =
+ setspan(message, value)
+
+proc clearleading_comments*(message: google_protobuf_SourceCodeInfo_Location) =
+ message.leading_comments = ""
+ excl(message.hasField, [3])
+
+proc hasleading_comments*(message: google_protobuf_SourceCodeInfo_Location): bool =
+ result = contains(message.hasField, 3)
+
+proc setleading_comments*(message: google_protobuf_SourceCodeInfo_Location, value: string) =
+ message.leading_comments = value
+ incl(message.hasField, 3)
+
+proc leading_comments*(message: google_protobuf_SourceCodeInfo_Location): string {.inline.} =
+ message.leading_comments
+
+proc `leading_comments=`*(message: google_protobuf_SourceCodeInfo_Location, value: string) {.inline.} =
+ setleading_comments(message, value)
+
+proc cleartrailing_comments*(message: google_protobuf_SourceCodeInfo_Location) =
+ message.trailing_comments = ""
+ excl(message.hasField, [4])
+
+proc hastrailing_comments*(message: google_protobuf_SourceCodeInfo_Location): bool =
+ result = contains(message.hasField, 4)
+
+proc settrailing_comments*(message: google_protobuf_SourceCodeInfo_Location, value: string) =
+ message.trailing_comments = value
+ incl(message.hasField, 4)
+
+proc trailing_comments*(message: google_protobuf_SourceCodeInfo_Location): string {.inline.} =
+ message.trailing_comments
+
+proc `trailing_comments=`*(message: google_protobuf_SourceCodeInfo_Location, value: string) {.inline.} =
+ settrailing_comments(message, value)
+
+proc clearleading_detached_comments*(message: google_protobuf_SourceCodeInfo_Location) =
+ message.leading_detached_comments = @[]
+ excl(message.hasField, [6])
+
+proc hasleading_detached_comments*(message: google_protobuf_SourceCodeInfo_Location): bool =
+ result = contains(message.hasField, 6) or (len(message.leading_detached_comments) > 0)
+
+proc setleading_detached_comments*(message: google_protobuf_SourceCodeInfo_Location, value: seq[string]) =
+ message.leading_detached_comments = value
+ incl(message.hasField, 6)
+
+proc addleading_detached_comments*(message: google_protobuf_SourceCodeInfo_Location, value: string) =
+ add(message.leading_detached_comments, value)
+ incl(message.hasField, 6)
+
+proc leading_detached_comments*(message: google_protobuf_SourceCodeInfo_Location): seq[string] {.inline.} =
+ message.leading_detached_comments
+
+proc `leading_detached_comments=`*(message: google_protobuf_SourceCodeInfo_Location, value: seq[string]) {.inline.} =
+ setleading_detached_comments(message, value)
+
+proc sizeOfgoogle_protobuf_SourceCodeInfo_Location*(message: google_protobuf_SourceCodeInfo_Location): uint64 =
+ if haspath(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(packedFieldSize(message.path, FieldType.Int32))
+ if hasspan(message):
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(packedFieldSize(message.span, FieldType.Int32))
+ if hasleading_comments(message):
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfString(message.leading_comments)
+ if hastrailing_comments(message):
+ result = result + sizeOfTag(4, WireType.LengthDelimited)
+ result = result + sizeOfString(message.trailing_comments)
+ for value in message.leading_detached_comments:
+ result = result + sizeOfTag(6, WireType.LengthDelimited)
+ result = result + sizeOfString(value)
+
+proc writegoogle_protobuf_SourceCodeInfo_Location*(stream: ProtobufStream, message: google_protobuf_SourceCodeInfo_Location) =
+ if haspath(message):
+ writeTag(stream, 1, WireType.LengthDelimited)
+ writeVarint(stream, packedFieldSize(message.path, FieldType.Int32))
+ for value in message.path:
+ writeInt32(stream, value)
+ if hasspan(message):
+ writeTag(stream, 2, WireType.LengthDelimited)
+ writeVarint(stream, packedFieldSize(message.span, FieldType.Int32))
+ for value in message.span:
+ writeInt32(stream, value)
+ if hasleading_comments(message):
+ writeString(stream, message.leading_comments, 3)
+ if hastrailing_comments(message):
+ writeString(stream, message.trailing_comments, 4)
+ for value in message.leading_detached_comments:
+ writeString(stream, value, 6)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_SourceCodeInfo_Location*(stream: ProtobufStream): google_protobuf_SourceCodeInfo_Location =
+ result = newgoogle_protobuf_SourceCodeInfo_Location()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.Varint, WireType.LengthDelimited)
+ if wireType == WireType.LengthDelimited:
+ let
+ size = readVarint(stream)
+ start = uint64(getPosition(stream))
+ var consumed = 0'u64
+ while consumed < size:
+ addpath(result, readInt32(stream))
+ consumed = uint64(getPosition(stream)) - start
+ if consumed != size:
+ raise newException(Exception, "packed field size mismatch")
+ else:
+ addpath(result, readInt32(stream))
+ of 2:
+ expectWireType(wireType, WireType.Varint, WireType.LengthDelimited)
+ if wireType == WireType.LengthDelimited:
+ let
+ size = readVarint(stream)
+ start = uint64(getPosition(stream))
+ var consumed = 0'u64
+ while consumed < size:
+ addspan(result, readInt32(stream))
+ consumed = uint64(getPosition(stream)) - start
+ if consumed != size:
+ raise newException(Exception, "packed field size mismatch")
+ else:
+ addspan(result, readInt32(stream))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setleading_comments(result, readString(stream))
+ of 4:
+ expectWireType(wireType, WireType.LengthDelimited)
+ settrailing_comments(result, readString(stream))
+ of 6:
+ expectWireType(wireType, WireType.LengthDelimited)
+ addleading_detached_comments(result, readString(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_SourceCodeInfo_Location): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_SourceCodeInfo_Location(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_SourceCodeInfo_Location*(data: string): google_protobuf_SourceCodeInfo_Location =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_SourceCodeInfo_Location(pbs)
+
+
+proc newgoogle_protobuf_SourceCodeInfo*(): google_protobuf_SourceCodeInfo =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.location = @[]
+
+proc clearlocation*(message: google_protobuf_SourceCodeInfo) =
+ message.location = @[]
+ excl(message.hasField, [1])
+
+proc haslocation*(message: google_protobuf_SourceCodeInfo): bool =
+ result = contains(message.hasField, 1) or (len(message.location) > 0)
+
+proc setlocation*(message: google_protobuf_SourceCodeInfo, value: seq[google_protobuf_SourceCodeInfo_Location]) =
+ message.location = value
+ incl(message.hasField, 1)
+
+proc addlocation*(message: google_protobuf_SourceCodeInfo, value: google_protobuf_SourceCodeInfo_Location) =
+ add(message.location, value)
+ incl(message.hasField, 1)
+
+proc location*(message: google_protobuf_SourceCodeInfo): seq[google_protobuf_SourceCodeInfo_Location] {.inline.} =
+ message.location
+
+proc `location=`*(message: google_protobuf_SourceCodeInfo, value: seq[google_protobuf_SourceCodeInfo_Location]) {.inline.} =
+ setlocation(message, value)
+
+proc sizeOfgoogle_protobuf_SourceCodeInfo*(message: google_protobuf_SourceCodeInfo): uint64 =
+ for value in message.location:
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_SourceCodeInfo_Location(value))
+
+proc writegoogle_protobuf_SourceCodeInfo*(stream: ProtobufStream, message: google_protobuf_SourceCodeInfo) =
+ for value in message.location:
+ writeMessage(stream, value, 1)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_SourceCodeInfo*(stream: ProtobufStream): google_protobuf_SourceCodeInfo =
+ result = newgoogle_protobuf_SourceCodeInfo()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addlocation(result, newgoogle_protobuf_SourceCodeInfo_Location(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_SourceCodeInfo): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_SourceCodeInfo(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_SourceCodeInfo*(data: string): google_protobuf_SourceCodeInfo =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_SourceCodeInfo(pbs)
+
+
+proc newgoogle_protobuf_FieldOptions*(): google_protobuf_FieldOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.ctype = google_protobuf_FieldOptions_CType.STRING
+ result.packed = false
+ result.jstype = google_protobuf_FieldOptions_JSType.JS_NORMAL
+ result.lazy = false
+ result.deprecated = false
+ result.weak = false
+ result.uninterpreted_option = @[]
+
+proc clearctype*(message: google_protobuf_FieldOptions) =
+ message.ctype = google_protobuf_FieldOptions_CType.STRING
+ excl(message.hasField, [1])
+
+proc hasctype*(message: google_protobuf_FieldOptions): bool =
+ result = contains(message.hasField, 1)
+
+proc setctype*(message: google_protobuf_FieldOptions, value: google_protobuf_FieldOptions_CType) =
+ message.ctype = value
+ incl(message.hasField, 1)
+
+proc ctype*(message: google_protobuf_FieldOptions): google_protobuf_FieldOptions_CType {.inline.} =
+ message.ctype
+
+proc `ctype=`*(message: google_protobuf_FieldOptions, value: google_protobuf_FieldOptions_CType) {.inline.} =
+ setctype(message, value)
+
+proc clearpacked*(message: google_protobuf_FieldOptions) =
+ message.packed = false
+ excl(message.hasField, [2])
+
+proc haspacked*(message: google_protobuf_FieldOptions): bool =
+ result = contains(message.hasField, 2)
+
+proc setpacked*(message: google_protobuf_FieldOptions, value: bool) =
+ message.packed = value
+ incl(message.hasField, 2)
+
+proc packed*(message: google_protobuf_FieldOptions): bool {.inline.} =
+ message.packed
+
+proc `packed=`*(message: google_protobuf_FieldOptions, value: bool) {.inline.} =
+ setpacked(message, value)
+
+proc clearjstype*(message: google_protobuf_FieldOptions) =
+ message.jstype = google_protobuf_FieldOptions_JSType.JS_NORMAL
+ excl(message.hasField, [6])
+
+proc hasjstype*(message: google_protobuf_FieldOptions): bool =
+ result = contains(message.hasField, 6)
+
+proc setjstype*(message: google_protobuf_FieldOptions, value: google_protobuf_FieldOptions_JSType) =
+ message.jstype = value
+ incl(message.hasField, 6)
+
+proc jstype*(message: google_protobuf_FieldOptions): google_protobuf_FieldOptions_JSType {.inline.} =
+ message.jstype
+
+proc `jstype=`*(message: google_protobuf_FieldOptions, value: google_protobuf_FieldOptions_JSType) {.inline.} =
+ setjstype(message, value)
+
+proc clearlazy*(message: google_protobuf_FieldOptions) =
+ message.lazy = false
+ excl(message.hasField, [5])
+
+proc haslazy*(message: google_protobuf_FieldOptions): bool =
+ result = contains(message.hasField, 5)
+
+proc setlazy*(message: google_protobuf_FieldOptions, value: bool) =
+ message.lazy = value
+ incl(message.hasField, 5)
+
+proc lazy*(message: google_protobuf_FieldOptions): bool {.inline.} =
+ message.lazy
+
+proc `lazy=`*(message: google_protobuf_FieldOptions, value: bool) {.inline.} =
+ setlazy(message, value)
+
+proc cleardeprecated*(message: google_protobuf_FieldOptions) =
+ message.deprecated = false
+ excl(message.hasField, [3])
+
+proc hasdeprecated*(message: google_protobuf_FieldOptions): bool =
+ result = contains(message.hasField, 3)
+
+proc setdeprecated*(message: google_protobuf_FieldOptions, value: bool) =
+ message.deprecated = value
+ incl(message.hasField, 3)
+
+proc deprecated*(message: google_protobuf_FieldOptions): bool {.inline.} =
+ message.deprecated
+
+proc `deprecated=`*(message: google_protobuf_FieldOptions, value: bool) {.inline.} =
+ setdeprecated(message, value)
+
+proc clearweak*(message: google_protobuf_FieldOptions) =
+ message.weak = false
+ excl(message.hasField, [10])
+
+proc hasweak*(message: google_protobuf_FieldOptions): bool =
+ result = contains(message.hasField, 10)
+
+proc setweak*(message: google_protobuf_FieldOptions, value: bool) =
+ message.weak = value
+ incl(message.hasField, 10)
+
+proc weak*(message: google_protobuf_FieldOptions): bool {.inline.} =
+ message.weak
+
+proc `weak=`*(message: google_protobuf_FieldOptions, value: bool) {.inline.} =
+ setweak(message, value)
+
+proc clearuninterpreted_option*(message: google_protobuf_FieldOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_FieldOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_FieldOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_FieldOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_FieldOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_FieldOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_FieldOptions*(message: google_protobuf_FieldOptions): uint64 =
+ if hasctype(message):
+ result = result + sizeOfTag(1, WireType.Varint)
+ result = result + sizeOfEnum[google_protobuf_FieldOptions_CType](message.ctype)
+ if haspacked(message):
+ result = result + sizeOfTag(2, WireType.Varint)
+ result = result + sizeOfBool(message.packed)
+ if hasjstype(message):
+ result = result + sizeOfTag(6, WireType.Varint)
+ result = result + sizeOfEnum[google_protobuf_FieldOptions_JSType](message.jstype)
+ if haslazy(message):
+ result = result + sizeOfTag(5, WireType.Varint)
+ result = result + sizeOfBool(message.lazy)
+ if hasdeprecated(message):
+ result = result + sizeOfTag(3, WireType.Varint)
+ result = result + sizeOfBool(message.deprecated)
+ if hasweak(message):
+ result = result + sizeOfTag(10, WireType.Varint)
+ result = result + sizeOfBool(message.weak)
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_FieldOptions*(stream: ProtobufStream, message: google_protobuf_FieldOptions) =
+ if hasctype(message):
+ writeEnum(stream, message.ctype, 1)
+ if haspacked(message):
+ writeBool(stream, message.packed, 2)
+ if hasjstype(message):
+ writeEnum(stream, message.jstype, 6)
+ if haslazy(message):
+ writeBool(stream, message.lazy, 5)
+ if hasdeprecated(message):
+ writeBool(stream, message.deprecated, 3)
+ if hasweak(message):
+ writeBool(stream, message.weak, 10)
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_FieldOptions*(stream: ProtobufStream): google_protobuf_FieldOptions =
+ result = newgoogle_protobuf_FieldOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.Varint)
+ setctype(result, readEnum[google_protobuf_FieldOptions_CType](stream))
+ of 2:
+ expectWireType(wireType, WireType.Varint)
+ setpacked(result, readBool(stream))
+ of 6:
+ expectWireType(wireType, WireType.Varint)
+ setjstype(result, readEnum[google_protobuf_FieldOptions_JSType](stream))
+ of 5:
+ expectWireType(wireType, WireType.Varint)
+ setlazy(result, readBool(stream))
+ of 3:
+ expectWireType(wireType, WireType.Varint)
+ setdeprecated(result, readBool(stream))
+ of 10:
+ expectWireType(wireType, WireType.Varint)
+ setweak(result, readBool(stream))
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_FieldOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_FieldOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_FieldOptions*(data: string): google_protobuf_FieldOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_FieldOptions(pbs)
+
+
+proc newgoogle_protobuf_FieldDescriptorProto*(): google_protobuf_FieldDescriptorProto =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = ""
+ result.number = 0
+ result.label = google_protobuf_FieldDescriptorProto_Label.LABEL_OPTIONAL
+ result.ftype = google_protobuf_FieldDescriptorProto_Type.TYPE_DOUBLE
+ result.type_name = ""
+ result.extendee = ""
+ result.default_value = ""
+ result.oneof_index = 0
+ result.json_name = ""
+ result.options = nil
+
+proc clearname*(message: google_protobuf_FieldDescriptorProto) =
+ message.name = ""
+ excl(message.hasField, [1])
+
+proc hasname*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 1)
+
+proc setname*(message: google_protobuf_FieldDescriptorProto, value: string) =
+ message.name = value
+ incl(message.hasField, 1)
+
+proc name*(message: google_protobuf_FieldDescriptorProto): string {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_FieldDescriptorProto, value: string) {.inline.} =
+ setname(message, value)
+
+proc clearnumber*(message: google_protobuf_FieldDescriptorProto) =
+ message.number = 0
+ excl(message.hasField, [3])
+
+proc hasnumber*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 3)
+
+proc setnumber*(message: google_protobuf_FieldDescriptorProto, value: int32) =
+ message.number = value
+ incl(message.hasField, 3)
+
+proc number*(message: google_protobuf_FieldDescriptorProto): int32 {.inline.} =
+ message.number
+
+proc `number=`*(message: google_protobuf_FieldDescriptorProto, value: int32) {.inline.} =
+ setnumber(message, value)
+
+proc clearlabel*(message: google_protobuf_FieldDescriptorProto) =
+ message.label = google_protobuf_FieldDescriptorProto_Label.LABEL_OPTIONAL
+ excl(message.hasField, [4])
+
+proc haslabel*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 4)
+
+proc setlabel*(message: google_protobuf_FieldDescriptorProto, value: google_protobuf_FieldDescriptorProto_Label) =
+ message.label = value
+ incl(message.hasField, 4)
+
+proc label*(message: google_protobuf_FieldDescriptorProto): google_protobuf_FieldDescriptorProto_Label {.inline.} =
+ message.label
+
+proc `label=`*(message: google_protobuf_FieldDescriptorProto, value: google_protobuf_FieldDescriptorProto_Label) {.inline.} =
+ setlabel(message, value)
+
+proc clearftype*(message: google_protobuf_FieldDescriptorProto) =
+ message.ftype = google_protobuf_FieldDescriptorProto_Type.TYPE_DOUBLE
+ excl(message.hasField, [5])
+
+proc hasftype*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 5)
+
+proc setftype*(message: google_protobuf_FieldDescriptorProto, value: google_protobuf_FieldDescriptorProto_Type) =
+ message.ftype = value
+ incl(message.hasField, 5)
+
+proc ftype*(message: google_protobuf_FieldDescriptorProto): google_protobuf_FieldDescriptorProto_Type {.inline.} =
+ message.ftype
+
+proc `ftype=`*(message: google_protobuf_FieldDescriptorProto, value: google_protobuf_FieldDescriptorProto_Type) {.inline.} =
+ setftype(message, value)
+
+proc cleartype_name*(message: google_protobuf_FieldDescriptorProto) =
+ message.type_name = ""
+ excl(message.hasField, [6])
+
+proc hastype_name*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 6)
+
+proc settype_name*(message: google_protobuf_FieldDescriptorProto, value: string) =
+ message.type_name = value
+ incl(message.hasField, 6)
+
+proc type_name*(message: google_protobuf_FieldDescriptorProto): string {.inline.} =
+ message.type_name
+
+proc `type_name=`*(message: google_protobuf_FieldDescriptorProto, value: string) {.inline.} =
+ settype_name(message, value)
+
+proc clearextendee*(message: google_protobuf_FieldDescriptorProto) =
+ message.extendee = ""
+ excl(message.hasField, [2])
+
+proc hasextendee*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 2)
+
+proc setextendee*(message: google_protobuf_FieldDescriptorProto, value: string) =
+ message.extendee = value
+ incl(message.hasField, 2)
+
+proc extendee*(message: google_protobuf_FieldDescriptorProto): string {.inline.} =
+ message.extendee
+
+proc `extendee=`*(message: google_protobuf_FieldDescriptorProto, value: string) {.inline.} =
+ setextendee(message, value)
+
+proc cleardefault_value*(message: google_protobuf_FieldDescriptorProto) =
+ message.default_value = ""
+ excl(message.hasField, [7])
+
+proc hasdefault_value*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 7)
+
+proc setdefault_value*(message: google_protobuf_FieldDescriptorProto, value: string) =
+ message.default_value = value
+ incl(message.hasField, 7)
+
+proc default_value*(message: google_protobuf_FieldDescriptorProto): string {.inline.} =
+ message.default_value
+
+proc `default_value=`*(message: google_protobuf_FieldDescriptorProto, value: string) {.inline.} =
+ setdefault_value(message, value)
+
+proc clearoneof_index*(message: google_protobuf_FieldDescriptorProto) =
+ message.oneof_index = 0
+ excl(message.hasField, [9])
+
+proc hasoneof_index*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 9)
+
+proc setoneof_index*(message: google_protobuf_FieldDescriptorProto, value: int32) =
+ message.oneof_index = value
+ incl(message.hasField, 9)
+
+proc oneof_index*(message: google_protobuf_FieldDescriptorProto): int32 {.inline.} =
+ message.oneof_index
+
+proc `oneof_index=`*(message: google_protobuf_FieldDescriptorProto, value: int32) {.inline.} =
+ setoneof_index(message, value)
+
+proc clearjson_name*(message: google_protobuf_FieldDescriptorProto) =
+ message.json_name = ""
+ excl(message.hasField, [10])
+
+proc hasjson_name*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 10)
+
+proc setjson_name*(message: google_protobuf_FieldDescriptorProto, value: string) =
+ message.json_name = value
+ incl(message.hasField, 10)
+
+proc json_name*(message: google_protobuf_FieldDescriptorProto): string {.inline.} =
+ message.json_name
+
+proc `json_name=`*(message: google_protobuf_FieldDescriptorProto, value: string) {.inline.} =
+ setjson_name(message, value)
+
+proc clearoptions*(message: google_protobuf_FieldDescriptorProto) =
+ message.options = nil
+ excl(message.hasField, [8])
+
+proc hasoptions*(message: google_protobuf_FieldDescriptorProto): bool =
+ result = contains(message.hasField, 8)
+
+proc setoptions*(message: google_protobuf_FieldDescriptorProto, value: google_protobuf_FieldOptions) =
+ message.options = value
+ incl(message.hasField, 8)
+
+proc options*(message: google_protobuf_FieldDescriptorProto): google_protobuf_FieldOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_FieldDescriptorProto, value: google_protobuf_FieldOptions) {.inline.} =
+ setoptions(message, value)
+
+proc sizeOfgoogle_protobuf_FieldDescriptorProto*(message: google_protobuf_FieldDescriptorProto): uint64 =
+ if hasname(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name)
+ if hasnumber(message):
+ result = result + sizeOfTag(3, WireType.Varint)
+ result = result + sizeOfInt32(message.number)
+ if haslabel(message):
+ result = result + sizeOfTag(4, WireType.Varint)
+ result = result + sizeOfEnum[google_protobuf_FieldDescriptorProto_Label](message.label)
+ if hasftype(message):
+ result = result + sizeOfTag(5, WireType.Varint)
+ result = result + sizeOfEnum[google_protobuf_FieldDescriptorProto_Type](message.ftype)
+ if hastype_name(message):
+ result = result + sizeOfTag(6, WireType.LengthDelimited)
+ result = result + sizeOfString(message.type_name)
+ if hasextendee(message):
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfString(message.extendee)
+ if hasdefault_value(message):
+ result = result + sizeOfTag(7, WireType.LengthDelimited)
+ result = result + sizeOfString(message.default_value)
+ if hasoneof_index(message):
+ result = result + sizeOfTag(9, WireType.Varint)
+ result = result + sizeOfInt32(message.oneof_index)
+ if hasjson_name(message):
+ result = result + sizeOfTag(10, WireType.LengthDelimited)
+ result = result + sizeOfString(message.json_name)
+ if hasoptions(message):
+ result = result + sizeOfTag(8, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_FieldOptions(message.options))
+
+proc writegoogle_protobuf_FieldDescriptorProto*(stream: ProtobufStream, message: google_protobuf_FieldDescriptorProto) =
+ if hasname(message):
+ writeString(stream, message.name, 1)
+ if hasnumber(message):
+ writeInt32(stream, message.number, 3)
+ if haslabel(message):
+ writeEnum(stream, message.label, 4)
+ if hasftype(message):
+ writeEnum(stream, message.ftype, 5)
+ if hastype_name(message):
+ writeString(stream, message.type_name, 6)
+ if hasextendee(message):
+ writeString(stream, message.extendee, 2)
+ if hasdefault_value(message):
+ writeString(stream, message.default_value, 7)
+ if hasoneof_index(message):
+ writeInt32(stream, message.oneof_index, 9)
+ if hasjson_name(message):
+ writeString(stream, message.json_name, 10)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 8)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_FieldDescriptorProto*(stream: ProtobufStream): google_protobuf_FieldDescriptorProto =
+ result = newgoogle_protobuf_FieldDescriptorProto()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname(result, readString(stream))
+ of 3:
+ expectWireType(wireType, WireType.Varint)
+ setnumber(result, readInt32(stream))
+ of 4:
+ expectWireType(wireType, WireType.Varint)
+ setlabel(result, readEnum[google_protobuf_FieldDescriptorProto_Label](stream))
+ of 5:
+ expectWireType(wireType, WireType.Varint)
+ setftype(result, readEnum[google_protobuf_FieldDescriptorProto_Type](stream))
+ of 6:
+ expectWireType(wireType, WireType.LengthDelimited)
+ settype_name(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setextendee(result, readString(stream))
+ of 7:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setdefault_value(result, readString(stream))
+ of 9:
+ expectWireType(wireType, WireType.Varint)
+ setoneof_index(result, readInt32(stream))
+ of 10:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setjson_name(result, readString(stream))
+ of 8:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_FieldOptions(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_FieldDescriptorProto): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_FieldDescriptorProto(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_FieldDescriptorProto*(data: string): google_protobuf_FieldDescriptorProto =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_FieldDescriptorProto(pbs)
+
+
+proc newgoogle_protobuf_DescriptorProto_ExtensionRange*(): google_protobuf_DescriptorProto_ExtensionRange =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.start = 0
+ result.fend = 0
+ result.options = nil
+
+proc clearstart*(message: google_protobuf_DescriptorProto_ExtensionRange) =
+ message.start = 0
+ excl(message.hasField, [1])
+
+proc hasstart*(message: google_protobuf_DescriptorProto_ExtensionRange): bool =
+ result = contains(message.hasField, 1)
+
+proc setstart*(message: google_protobuf_DescriptorProto_ExtensionRange, value: int32) =
+ message.start = value
+ incl(message.hasField, 1)
+
+proc start*(message: google_protobuf_DescriptorProto_ExtensionRange): int32 {.inline.} =
+ message.start
+
+proc `start=`*(message: google_protobuf_DescriptorProto_ExtensionRange, value: int32) {.inline.} =
+ setstart(message, value)
+
+proc clearfend*(message: google_protobuf_DescriptorProto_ExtensionRange) =
+ message.fend = 0
+ excl(message.hasField, [2])
+
+proc hasfend*(message: google_protobuf_DescriptorProto_ExtensionRange): bool =
+ result = contains(message.hasField, 2)
+
+proc setfend*(message: google_protobuf_DescriptorProto_ExtensionRange, value: int32) =
+ message.fend = value
+ incl(message.hasField, 2)
+
+proc fend*(message: google_protobuf_DescriptorProto_ExtensionRange): int32 {.inline.} =
+ message.fend
+
+proc `fend=`*(message: google_protobuf_DescriptorProto_ExtensionRange, value: int32) {.inline.} =
+ setfend(message, value)
+
+proc clearoptions*(message: google_protobuf_DescriptorProto_ExtensionRange) =
+ message.options = nil
+ excl(message.hasField, [3])
+
+proc hasoptions*(message: google_protobuf_DescriptorProto_ExtensionRange): bool =
+ result = contains(message.hasField, 3)
+
+proc setoptions*(message: google_protobuf_DescriptorProto_ExtensionRange, value: google_protobuf_ExtensionRangeOptions) =
+ message.options = value
+ incl(message.hasField, 3)
+
+proc options*(message: google_protobuf_DescriptorProto_ExtensionRange): google_protobuf_ExtensionRangeOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_DescriptorProto_ExtensionRange, value: google_protobuf_ExtensionRangeOptions) {.inline.} =
+ setoptions(message, value)
+
+proc sizeOfgoogle_protobuf_DescriptorProto_ExtensionRange*(message: google_protobuf_DescriptorProto_ExtensionRange): uint64 =
+ if hasstart(message):
+ result = result + sizeOfTag(1, WireType.Varint)
+ result = result + sizeOfInt32(message.start)
+ if hasfend(message):
+ result = result + sizeOfTag(2, WireType.Varint)
+ result = result + sizeOfInt32(message.fend)
+ if hasoptions(message):
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_ExtensionRangeOptions(message.options))
+
+proc writegoogle_protobuf_DescriptorProto_ExtensionRange*(stream: ProtobufStream, message: google_protobuf_DescriptorProto_ExtensionRange) =
+ if hasstart(message):
+ writeInt32(stream, message.start, 1)
+ if hasfend(message):
+ writeInt32(stream, message.fend, 2)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 3)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_DescriptorProto_ExtensionRange*(stream: ProtobufStream): google_protobuf_DescriptorProto_ExtensionRange =
+ result = newgoogle_protobuf_DescriptorProto_ExtensionRange()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.Varint)
+ setstart(result, readInt32(stream))
+ of 2:
+ expectWireType(wireType, WireType.Varint)
+ setfend(result, readInt32(stream))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_ExtensionRangeOptions(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_DescriptorProto_ExtensionRange): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_DescriptorProto_ExtensionRange(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_DescriptorProto_ExtensionRange*(data: string): google_protobuf_DescriptorProto_ExtensionRange =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_DescriptorProto_ExtensionRange(pbs)
+
+
+proc newgoogle_protobuf_MessageOptions*(): google_protobuf_MessageOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.message_set_wire_format = false
+ result.no_standard_descriptor_accessor = false
+ result.deprecated = false
+ result.map_entry = false
+ result.uninterpreted_option = @[]
+
+proc clearmessage_set_wire_format*(message: google_protobuf_MessageOptions) =
+ message.message_set_wire_format = false
+ excl(message.hasField, [1])
+
+proc hasmessage_set_wire_format*(message: google_protobuf_MessageOptions): bool =
+ result = contains(message.hasField, 1)
+
+proc setmessage_set_wire_format*(message: google_protobuf_MessageOptions, value: bool) =
+ message.message_set_wire_format = value
+ incl(message.hasField, 1)
+
+proc message_set_wire_format*(message: google_protobuf_MessageOptions): bool {.inline.} =
+ message.message_set_wire_format
+
+proc `message_set_wire_format=`*(message: google_protobuf_MessageOptions, value: bool) {.inline.} =
+ setmessage_set_wire_format(message, value)
+
+proc clearno_standard_descriptor_accessor*(message: google_protobuf_MessageOptions) =
+ message.no_standard_descriptor_accessor = false
+ excl(message.hasField, [2])
+
+proc hasno_standard_descriptor_accessor*(message: google_protobuf_MessageOptions): bool =
+ result = contains(message.hasField, 2)
+
+proc setno_standard_descriptor_accessor*(message: google_protobuf_MessageOptions, value: bool) =
+ message.no_standard_descriptor_accessor = value
+ incl(message.hasField, 2)
+
+proc no_standard_descriptor_accessor*(message: google_protobuf_MessageOptions): bool {.inline.} =
+ message.no_standard_descriptor_accessor
+
+proc `no_standard_descriptor_accessor=`*(message: google_protobuf_MessageOptions, value: bool) {.inline.} =
+ setno_standard_descriptor_accessor(message, value)
+
+proc cleardeprecated*(message: google_protobuf_MessageOptions) =
+ message.deprecated = false
+ excl(message.hasField, [3])
+
+proc hasdeprecated*(message: google_protobuf_MessageOptions): bool =
+ result = contains(message.hasField, 3)
+
+proc setdeprecated*(message: google_protobuf_MessageOptions, value: bool) =
+ message.deprecated = value
+ incl(message.hasField, 3)
+
+proc deprecated*(message: google_protobuf_MessageOptions): bool {.inline.} =
+ message.deprecated
+
+proc `deprecated=`*(message: google_protobuf_MessageOptions, value: bool) {.inline.} =
+ setdeprecated(message, value)
+
+proc clearmap_entry*(message: google_protobuf_MessageOptions) =
+ message.map_entry = false
+ excl(message.hasField, [7])
+
+proc hasmap_entry*(message: google_protobuf_MessageOptions): bool =
+ result = contains(message.hasField, 7)
+
+proc setmap_entry*(message: google_protobuf_MessageOptions, value: bool) =
+ message.map_entry = value
+ incl(message.hasField, 7)
+
+proc map_entry*(message: google_protobuf_MessageOptions): bool {.inline.} =
+ message.map_entry
+
+proc `map_entry=`*(message: google_protobuf_MessageOptions, value: bool) {.inline.} =
+ setmap_entry(message, value)
+
+proc clearuninterpreted_option*(message: google_protobuf_MessageOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_MessageOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_MessageOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_MessageOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_MessageOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_MessageOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_MessageOptions*(message: google_protobuf_MessageOptions): uint64 =
+ if hasmessage_set_wire_format(message):
+ result = result + sizeOfTag(1, WireType.Varint)
+ result = result + sizeOfBool(message.message_set_wire_format)
+ if hasno_standard_descriptor_accessor(message):
+ result = result + sizeOfTag(2, WireType.Varint)
+ result = result + sizeOfBool(message.no_standard_descriptor_accessor)
+ if hasdeprecated(message):
+ result = result + sizeOfTag(3, WireType.Varint)
+ result = result + sizeOfBool(message.deprecated)
+ if hasmap_entry(message):
+ result = result + sizeOfTag(7, WireType.Varint)
+ result = result + sizeOfBool(message.map_entry)
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_MessageOptions*(stream: ProtobufStream, message: google_protobuf_MessageOptions) =
+ if hasmessage_set_wire_format(message):
+ writeBool(stream, message.message_set_wire_format, 1)
+ if hasno_standard_descriptor_accessor(message):
+ writeBool(stream, message.no_standard_descriptor_accessor, 2)
+ if hasdeprecated(message):
+ writeBool(stream, message.deprecated, 3)
+ if hasmap_entry(message):
+ writeBool(stream, message.map_entry, 7)
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_MessageOptions*(stream: ProtobufStream): google_protobuf_MessageOptions =
+ result = newgoogle_protobuf_MessageOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.Varint)
+ setmessage_set_wire_format(result, readBool(stream))
+ of 2:
+ expectWireType(wireType, WireType.Varint)
+ setno_standard_descriptor_accessor(result, readBool(stream))
+ of 3:
+ expectWireType(wireType, WireType.Varint)
+ setdeprecated(result, readBool(stream))
+ of 7:
+ expectWireType(wireType, WireType.Varint)
+ setmap_entry(result, readBool(stream))
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_MessageOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_MessageOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_MessageOptions*(data: string): google_protobuf_MessageOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_MessageOptions(pbs)
+
+
+proc newgoogle_protobuf_OneofOptions*(): google_protobuf_OneofOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.uninterpreted_option = @[]
+
+proc clearuninterpreted_option*(message: google_protobuf_OneofOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_OneofOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_OneofOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_OneofOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_OneofOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_OneofOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_OneofOptions*(message: google_protobuf_OneofOptions): uint64 =
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_OneofOptions*(stream: ProtobufStream, message: google_protobuf_OneofOptions) =
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_OneofOptions*(stream: ProtobufStream): google_protobuf_OneofOptions =
+ result = newgoogle_protobuf_OneofOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_OneofOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_OneofOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_OneofOptions*(data: string): google_protobuf_OneofOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_OneofOptions(pbs)
+
+
+proc newgoogle_protobuf_OneofDescriptorProto*(): google_protobuf_OneofDescriptorProto =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = ""
+ result.options = nil
+
+proc clearname*(message: google_protobuf_OneofDescriptorProto) =
+ message.name = ""
+ excl(message.hasField, [1])
+
+proc hasname*(message: google_protobuf_OneofDescriptorProto): bool =
+ result = contains(message.hasField, 1)
+
+proc setname*(message: google_protobuf_OneofDescriptorProto, value: string) =
+ message.name = value
+ incl(message.hasField, 1)
+
+proc name*(message: google_protobuf_OneofDescriptorProto): string {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_OneofDescriptorProto, value: string) {.inline.} =
+ setname(message, value)
+
+proc clearoptions*(message: google_protobuf_OneofDescriptorProto) =
+ message.options = nil
+ excl(message.hasField, [2])
+
+proc hasoptions*(message: google_protobuf_OneofDescriptorProto): bool =
+ result = contains(message.hasField, 2)
+
+proc setoptions*(message: google_protobuf_OneofDescriptorProto, value: google_protobuf_OneofOptions) =
+ message.options = value
+ incl(message.hasField, 2)
+
+proc options*(message: google_protobuf_OneofDescriptorProto): google_protobuf_OneofOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_OneofDescriptorProto, value: google_protobuf_OneofOptions) {.inline.} =
+ setoptions(message, value)
+
+proc sizeOfgoogle_protobuf_OneofDescriptorProto*(message: google_protobuf_OneofDescriptorProto): uint64 =
+ if hasname(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name)
+ if hasoptions(message):
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_OneofOptions(message.options))
+
+proc writegoogle_protobuf_OneofDescriptorProto*(stream: ProtobufStream, message: google_protobuf_OneofDescriptorProto) =
+ if hasname(message):
+ writeString(stream, message.name, 1)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 2)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_OneofDescriptorProto*(stream: ProtobufStream): google_protobuf_OneofDescriptorProto =
+ result = newgoogle_protobuf_OneofDescriptorProto()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_OneofOptions(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_OneofDescriptorProto): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_OneofDescriptorProto(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_OneofDescriptorProto*(data: string): google_protobuf_OneofDescriptorProto =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_OneofDescriptorProto(pbs)
+
+
+proc newgoogle_protobuf_DescriptorProto_ReservedRange*(): google_protobuf_DescriptorProto_ReservedRange =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.start = 0
+ result.fend = 0
+
+proc clearstart*(message: google_protobuf_DescriptorProto_ReservedRange) =
+ message.start = 0
+ excl(message.hasField, [1])
+
+proc hasstart*(message: google_protobuf_DescriptorProto_ReservedRange): bool =
+ result = contains(message.hasField, 1)
+
+proc setstart*(message: google_protobuf_DescriptorProto_ReservedRange, value: int32) =
+ message.start = value
+ incl(message.hasField, 1)
+
+proc start*(message: google_protobuf_DescriptorProto_ReservedRange): int32 {.inline.} =
+ message.start
+
+proc `start=`*(message: google_protobuf_DescriptorProto_ReservedRange, value: int32) {.inline.} =
+ setstart(message, value)
+
+proc clearfend*(message: google_protobuf_DescriptorProto_ReservedRange) =
+ message.fend = 0
+ excl(message.hasField, [2])
+
+proc hasfend*(message: google_protobuf_DescriptorProto_ReservedRange): bool =
+ result = contains(message.hasField, 2)
+
+proc setfend*(message: google_protobuf_DescriptorProto_ReservedRange, value: int32) =
+ message.fend = value
+ incl(message.hasField, 2)
+
+proc fend*(message: google_protobuf_DescriptorProto_ReservedRange): int32 {.inline.} =
+ message.fend
+
+proc `fend=`*(message: google_protobuf_DescriptorProto_ReservedRange, value: int32) {.inline.} =
+ setfend(message, value)
+
+proc sizeOfgoogle_protobuf_DescriptorProto_ReservedRange*(message: google_protobuf_DescriptorProto_ReservedRange): uint64 =
+ if hasstart(message):
+ result = result + sizeOfTag(1, WireType.Varint)
+ result = result + sizeOfInt32(message.start)
+ if hasfend(message):
+ result = result + sizeOfTag(2, WireType.Varint)
+ result = result + sizeOfInt32(message.fend)
+
+proc writegoogle_protobuf_DescriptorProto_ReservedRange*(stream: ProtobufStream, message: google_protobuf_DescriptorProto_ReservedRange) =
+ if hasstart(message):
+ writeInt32(stream, message.start, 1)
+ if hasfend(message):
+ writeInt32(stream, message.fend, 2)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_DescriptorProto_ReservedRange*(stream: ProtobufStream): google_protobuf_DescriptorProto_ReservedRange =
+ result = newgoogle_protobuf_DescriptorProto_ReservedRange()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.Varint)
+ setstart(result, readInt32(stream))
+ of 2:
+ expectWireType(wireType, WireType.Varint)
+ setfend(result, readInt32(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_DescriptorProto_ReservedRange): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_DescriptorProto_ReservedRange(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_DescriptorProto_ReservedRange*(data: string): google_protobuf_DescriptorProto_ReservedRange =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_DescriptorProto_ReservedRange(pbs)
+
+
+proc newgoogle_protobuf_DescriptorProto*(): google_protobuf_DescriptorProto =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = ""
+ result.field = @[]
+ result.extension = @[]
+ result.nested_type = @[]
+ result.enum_type = @[]
+ result.extension_range = @[]
+ result.oneof_decl = @[]
+ result.options = nil
+ result.reserved_range = @[]
+ result.reserved_name = @[]
+
+proc clearname*(message: google_protobuf_DescriptorProto) =
+ message.name = ""
+ excl(message.hasField, [1])
+
+proc hasname*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 1)
+
+proc setname*(message: google_protobuf_DescriptorProto, value: string) =
+ message.name = value
+ incl(message.hasField, 1)
+
+proc name*(message: google_protobuf_DescriptorProto): string {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_DescriptorProto, value: string) {.inline.} =
+ setname(message, value)
+
+proc clearfield*(message: google_protobuf_DescriptorProto) =
+ message.field = @[]
+ excl(message.hasField, [2])
+
+proc hasfield*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 2) or (len(message.field) > 0)
+
+proc setfield*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_FieldDescriptorProto]) =
+ message.field = value
+ incl(message.hasField, 2)
+
+proc addfield*(message: google_protobuf_DescriptorProto, value: google_protobuf_FieldDescriptorProto) =
+ add(message.field, value)
+ incl(message.hasField, 2)
+
+proc field*(message: google_protobuf_DescriptorProto): seq[google_protobuf_FieldDescriptorProto] {.inline.} =
+ message.field
+
+proc `field=`*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_FieldDescriptorProto]) {.inline.} =
+ setfield(message, value)
+
+proc clearextension*(message: google_protobuf_DescriptorProto) =
+ message.extension = @[]
+ excl(message.hasField, [6])
+
+proc hasextension*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 6) or (len(message.extension) > 0)
+
+proc setextension*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_FieldDescriptorProto]) =
+ message.extension = value
+ incl(message.hasField, 6)
+
+proc addextension*(message: google_protobuf_DescriptorProto, value: google_protobuf_FieldDescriptorProto) =
+ add(message.extension, value)
+ incl(message.hasField, 6)
+
+proc extension*(message: google_protobuf_DescriptorProto): seq[google_protobuf_FieldDescriptorProto] {.inline.} =
+ message.extension
+
+proc `extension=`*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_FieldDescriptorProto]) {.inline.} =
+ setextension(message, value)
+
+proc clearnested_type*(message: google_protobuf_DescriptorProto) =
+ message.nested_type = @[]
+ excl(message.hasField, [3])
+
+proc hasnested_type*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 3) or (len(message.nested_type) > 0)
+
+proc setnested_type*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_DescriptorProto]) =
+ message.nested_type = value
+ incl(message.hasField, 3)
+
+proc addnested_type*(message: google_protobuf_DescriptorProto, value: google_protobuf_DescriptorProto) =
+ add(message.nested_type, value)
+ incl(message.hasField, 3)
+
+proc nested_type*(message: google_protobuf_DescriptorProto): seq[google_protobuf_DescriptorProto] {.inline.} =
+ message.nested_type
+
+proc `nested_type=`*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_DescriptorProto]) {.inline.} =
+ setnested_type(message, value)
+
+proc clearenum_type*(message: google_protobuf_DescriptorProto) =
+ message.enum_type = @[]
+ excl(message.hasField, [4])
+
+proc hasenum_type*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 4) or (len(message.enum_type) > 0)
+
+proc setenum_type*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_EnumDescriptorProto]) =
+ message.enum_type = value
+ incl(message.hasField, 4)
+
+proc addenum_type*(message: google_protobuf_DescriptorProto, value: google_protobuf_EnumDescriptorProto) =
+ add(message.enum_type, value)
+ incl(message.hasField, 4)
+
+proc enum_type*(message: google_protobuf_DescriptorProto): seq[google_protobuf_EnumDescriptorProto] {.inline.} =
+ message.enum_type
+
+proc `enum_type=`*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_EnumDescriptorProto]) {.inline.} =
+ setenum_type(message, value)
+
+proc clearextension_range*(message: google_protobuf_DescriptorProto) =
+ message.extension_range = @[]
+ excl(message.hasField, [5])
+
+proc hasextension_range*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 5) or (len(message.extension_range) > 0)
+
+proc setextension_range*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_DescriptorProto_ExtensionRange]) =
+ message.extension_range = value
+ incl(message.hasField, 5)
+
+proc addextension_range*(message: google_protobuf_DescriptorProto, value: google_protobuf_DescriptorProto_ExtensionRange) =
+ add(message.extension_range, value)
+ incl(message.hasField, 5)
+
+proc extension_range*(message: google_protobuf_DescriptorProto): seq[google_protobuf_DescriptorProto_ExtensionRange] {.inline.} =
+ message.extension_range
+
+proc `extension_range=`*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_DescriptorProto_ExtensionRange]) {.inline.} =
+ setextension_range(message, value)
+
+proc clearoneof_decl*(message: google_protobuf_DescriptorProto) =
+ message.oneof_decl = @[]
+ excl(message.hasField, [8])
+
+proc hasoneof_decl*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 8) or (len(message.oneof_decl) > 0)
+
+proc setoneof_decl*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_OneofDescriptorProto]) =
+ message.oneof_decl = value
+ incl(message.hasField, 8)
+
+proc addoneof_decl*(message: google_protobuf_DescriptorProto, value: google_protobuf_OneofDescriptorProto) =
+ add(message.oneof_decl, value)
+ incl(message.hasField, 8)
+
+proc oneof_decl*(message: google_protobuf_DescriptorProto): seq[google_protobuf_OneofDescriptorProto] {.inline.} =
+ message.oneof_decl
+
+proc `oneof_decl=`*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_OneofDescriptorProto]) {.inline.} =
+ setoneof_decl(message, value)
+
+proc clearoptions*(message: google_protobuf_DescriptorProto) =
+ message.options = nil
+ excl(message.hasField, [7])
+
+proc hasoptions*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 7)
+
+proc setoptions*(message: google_protobuf_DescriptorProto, value: google_protobuf_MessageOptions) =
+ message.options = value
+ incl(message.hasField, 7)
+
+proc options*(message: google_protobuf_DescriptorProto): google_protobuf_MessageOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_DescriptorProto, value: google_protobuf_MessageOptions) {.inline.} =
+ setoptions(message, value)
+
+proc clearreserved_range*(message: google_protobuf_DescriptorProto) =
+ message.reserved_range = @[]
+ excl(message.hasField, [9])
+
+proc hasreserved_range*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 9) or (len(message.reserved_range) > 0)
+
+proc setreserved_range*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_DescriptorProto_ReservedRange]) =
+ message.reserved_range = value
+ incl(message.hasField, 9)
+
+proc addreserved_range*(message: google_protobuf_DescriptorProto, value: google_protobuf_DescriptorProto_ReservedRange) =
+ add(message.reserved_range, value)
+ incl(message.hasField, 9)
+
+proc reserved_range*(message: google_protobuf_DescriptorProto): seq[google_protobuf_DescriptorProto_ReservedRange] {.inline.} =
+ message.reserved_range
+
+proc `reserved_range=`*(message: google_protobuf_DescriptorProto, value: seq[google_protobuf_DescriptorProto_ReservedRange]) {.inline.} =
+ setreserved_range(message, value)
+
+proc clearreserved_name*(message: google_protobuf_DescriptorProto) =
+ message.reserved_name = @[]
+ excl(message.hasField, [10])
+
+proc hasreserved_name*(message: google_protobuf_DescriptorProto): bool =
+ result = contains(message.hasField, 10) or (len(message.reserved_name) > 0)
+
+proc setreserved_name*(message: google_protobuf_DescriptorProto, value: seq[string]) =
+ message.reserved_name = value
+ incl(message.hasField, 10)
+
+proc addreserved_name*(message: google_protobuf_DescriptorProto, value: string) =
+ add(message.reserved_name, value)
+ incl(message.hasField, 10)
+
+proc reserved_name*(message: google_protobuf_DescriptorProto): seq[string] {.inline.} =
+ message.reserved_name
+
+proc `reserved_name=`*(message: google_protobuf_DescriptorProto, value: seq[string]) {.inline.} =
+ setreserved_name(message, value)
+
+proc sizeOfgoogle_protobuf_DescriptorProto*(message: google_protobuf_DescriptorProto): uint64 =
+ if hasname(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name)
+ for value in message.field:
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_FieldDescriptorProto(value))
+ for value in message.extension:
+ result = result + sizeOfTag(6, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_FieldDescriptorProto(value))
+ for value in message.nested_type:
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_DescriptorProto(value))
+ for value in message.enum_type:
+ result = result + sizeOfTag(4, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_EnumDescriptorProto(value))
+ for value in message.extension_range:
+ result = result + sizeOfTag(5, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_DescriptorProto_ExtensionRange(value))
+ for value in message.oneof_decl:
+ result = result + sizeOfTag(8, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_OneofDescriptorProto(value))
+ if hasoptions(message):
+ result = result + sizeOfTag(7, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_MessageOptions(message.options))
+ for value in message.reserved_range:
+ result = result + sizeOfTag(9, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_DescriptorProto_ReservedRange(value))
+ for value in message.reserved_name:
+ result = result + sizeOfTag(10, WireType.LengthDelimited)
+ result = result + sizeOfString(value)
+
+proc writegoogle_protobuf_DescriptorProto*(stream: ProtobufStream, message: google_protobuf_DescriptorProto) =
+ if hasname(message):
+ writeString(stream, message.name, 1)
+ for value in message.field:
+ writeMessage(stream, value, 2)
+ for value in message.extension:
+ writeMessage(stream, value, 6)
+ for value in message.nested_type:
+ writeMessage(stream, value, 3)
+ for value in message.enum_type:
+ writeMessage(stream, value, 4)
+ for value in message.extension_range:
+ writeMessage(stream, value, 5)
+ for value in message.oneof_decl:
+ writeMessage(stream, value, 8)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 7)
+ for value in message.reserved_range:
+ writeMessage(stream, value, 9)
+ for value in message.reserved_name:
+ writeString(stream, value, 10)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_DescriptorProto*(stream: ProtobufStream): google_protobuf_DescriptorProto =
+ result = newgoogle_protobuf_DescriptorProto()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addfield(result, newgoogle_protobuf_FieldDescriptorProto(data))
+ of 6:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addextension(result, newgoogle_protobuf_FieldDescriptorProto(data))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addnested_type(result, newgoogle_protobuf_DescriptorProto(data))
+ of 4:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addenum_type(result, newgoogle_protobuf_EnumDescriptorProto(data))
+ of 5:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addextension_range(result, newgoogle_protobuf_DescriptorProto_ExtensionRange(data))
+ of 8:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addoneof_decl(result, newgoogle_protobuf_OneofDescriptorProto(data))
+ of 7:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_MessageOptions(data))
+ of 9:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addreserved_range(result, newgoogle_protobuf_DescriptorProto_ReservedRange(data))
+ of 10:
+ expectWireType(wireType, WireType.LengthDelimited)
+ addreserved_name(result, readString(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_DescriptorProto): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_DescriptorProto(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_DescriptorProto*(data: string): google_protobuf_DescriptorProto =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_DescriptorProto(pbs)
+
+
+proc newgoogle_protobuf_FileOptions*(): google_protobuf_FileOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.java_package = ""
+ result.java_outer_classname = ""
+ result.java_multiple_files = false
+ result.java_generate_equals_and_hash = false
+ result.java_string_check_utf8 = false
+ result.optimize_for = google_protobuf_FileOptions_OptimizeMode.SPEED
+ result.go_package = ""
+ result.cc_generic_services = false
+ result.java_generic_services = false
+ result.py_generic_services = false
+ result.php_generic_services = false
+ result.deprecated = false
+ result.cc_enable_arenas = false
+ result.objc_class_prefix = ""
+ result.csharp_namespace = ""
+ result.swift_prefix = ""
+ result.php_class_prefix = ""
+ result.php_namespace = ""
+ result.uninterpreted_option = @[]
+
+proc clearjava_package*(message: google_protobuf_FileOptions) =
+ message.java_package = ""
+ excl(message.hasField, [1])
+
+proc hasjava_package*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 1)
+
+proc setjava_package*(message: google_protobuf_FileOptions, value: string) =
+ message.java_package = value
+ incl(message.hasField, 1)
+
+proc java_package*(message: google_protobuf_FileOptions): string {.inline.} =
+ message.java_package
+
+proc `java_package=`*(message: google_protobuf_FileOptions, value: string) {.inline.} =
+ setjava_package(message, value)
+
+proc clearjava_outer_classname*(message: google_protobuf_FileOptions) =
+ message.java_outer_classname = ""
+ excl(message.hasField, [8])
+
+proc hasjava_outer_classname*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 8)
+
+proc setjava_outer_classname*(message: google_protobuf_FileOptions, value: string) =
+ message.java_outer_classname = value
+ incl(message.hasField, 8)
+
+proc java_outer_classname*(message: google_protobuf_FileOptions): string {.inline.} =
+ message.java_outer_classname
+
+proc `java_outer_classname=`*(message: google_protobuf_FileOptions, value: string) {.inline.} =
+ setjava_outer_classname(message, value)
+
+proc clearjava_multiple_files*(message: google_protobuf_FileOptions) =
+ message.java_multiple_files = false
+ excl(message.hasField, [10])
+
+proc hasjava_multiple_files*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 10)
+
+proc setjava_multiple_files*(message: google_protobuf_FileOptions, value: bool) =
+ message.java_multiple_files = value
+ incl(message.hasField, 10)
+
+proc java_multiple_files*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.java_multiple_files
+
+proc `java_multiple_files=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setjava_multiple_files(message, value)
+
+proc clearjava_generate_equals_and_hash*(message: google_protobuf_FileOptions) =
+ message.java_generate_equals_and_hash = false
+ excl(message.hasField, [20])
+
+proc hasjava_generate_equals_and_hash*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 20)
+
+proc setjava_generate_equals_and_hash*(message: google_protobuf_FileOptions, value: bool) =
+ message.java_generate_equals_and_hash = value
+ incl(message.hasField, 20)
+
+proc java_generate_equals_and_hash*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.java_generate_equals_and_hash
+
+proc `java_generate_equals_and_hash=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setjava_generate_equals_and_hash(message, value)
+
+proc clearjava_string_check_utf8*(message: google_protobuf_FileOptions) =
+ message.java_string_check_utf8 = false
+ excl(message.hasField, [27])
+
+proc hasjava_string_check_utf8*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 27)
+
+proc setjava_string_check_utf8*(message: google_protobuf_FileOptions, value: bool) =
+ message.java_string_check_utf8 = value
+ incl(message.hasField, 27)
+
+proc java_string_check_utf8*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.java_string_check_utf8
+
+proc `java_string_check_utf8=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setjava_string_check_utf8(message, value)
+
+proc clearoptimize_for*(message: google_protobuf_FileOptions) =
+ message.optimize_for = google_protobuf_FileOptions_OptimizeMode.SPEED
+ excl(message.hasField, [9])
+
+proc hasoptimize_for*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 9)
+
+proc setoptimize_for*(message: google_protobuf_FileOptions, value: google_protobuf_FileOptions_OptimizeMode) =
+ message.optimize_for = value
+ incl(message.hasField, 9)
+
+proc optimize_for*(message: google_protobuf_FileOptions): google_protobuf_FileOptions_OptimizeMode {.inline.} =
+ message.optimize_for
+
+proc `optimize_for=`*(message: google_protobuf_FileOptions, value: google_protobuf_FileOptions_OptimizeMode) {.inline.} =
+ setoptimize_for(message, value)
+
+proc cleargo_package*(message: google_protobuf_FileOptions) =
+ message.go_package = ""
+ excl(message.hasField, [11])
+
+proc hasgo_package*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 11)
+
+proc setgo_package*(message: google_protobuf_FileOptions, value: string) =
+ message.go_package = value
+ incl(message.hasField, 11)
+
+proc go_package*(message: google_protobuf_FileOptions): string {.inline.} =
+ message.go_package
+
+proc `go_package=`*(message: google_protobuf_FileOptions, value: string) {.inline.} =
+ setgo_package(message, value)
+
+proc clearcc_generic_services*(message: google_protobuf_FileOptions) =
+ message.cc_generic_services = false
+ excl(message.hasField, [16])
+
+proc hascc_generic_services*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 16)
+
+proc setcc_generic_services*(message: google_protobuf_FileOptions, value: bool) =
+ message.cc_generic_services = value
+ incl(message.hasField, 16)
+
+proc cc_generic_services*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.cc_generic_services
+
+proc `cc_generic_services=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setcc_generic_services(message, value)
+
+proc clearjava_generic_services*(message: google_protobuf_FileOptions) =
+ message.java_generic_services = false
+ excl(message.hasField, [17])
+
+proc hasjava_generic_services*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 17)
+
+proc setjava_generic_services*(message: google_protobuf_FileOptions, value: bool) =
+ message.java_generic_services = value
+ incl(message.hasField, 17)
+
+proc java_generic_services*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.java_generic_services
+
+proc `java_generic_services=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setjava_generic_services(message, value)
+
+proc clearpy_generic_services*(message: google_protobuf_FileOptions) =
+ message.py_generic_services = false
+ excl(message.hasField, [18])
+
+proc haspy_generic_services*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 18)
+
+proc setpy_generic_services*(message: google_protobuf_FileOptions, value: bool) =
+ message.py_generic_services = value
+ incl(message.hasField, 18)
+
+proc py_generic_services*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.py_generic_services
+
+proc `py_generic_services=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setpy_generic_services(message, value)
+
+proc clearphp_generic_services*(message: google_protobuf_FileOptions) =
+ message.php_generic_services = false
+ excl(message.hasField, [42])
+
+proc hasphp_generic_services*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 42)
+
+proc setphp_generic_services*(message: google_protobuf_FileOptions, value: bool) =
+ message.php_generic_services = value
+ incl(message.hasField, 42)
+
+proc php_generic_services*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.php_generic_services
+
+proc `php_generic_services=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setphp_generic_services(message, value)
+
+proc cleardeprecated*(message: google_protobuf_FileOptions) =
+ message.deprecated = false
+ excl(message.hasField, [23])
+
+proc hasdeprecated*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 23)
+
+proc setdeprecated*(message: google_protobuf_FileOptions, value: bool) =
+ message.deprecated = value
+ incl(message.hasField, 23)
+
+proc deprecated*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.deprecated
+
+proc `deprecated=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setdeprecated(message, value)
+
+proc clearcc_enable_arenas*(message: google_protobuf_FileOptions) =
+ message.cc_enable_arenas = false
+ excl(message.hasField, [31])
+
+proc hascc_enable_arenas*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 31)
+
+proc setcc_enable_arenas*(message: google_protobuf_FileOptions, value: bool) =
+ message.cc_enable_arenas = value
+ incl(message.hasField, 31)
+
+proc cc_enable_arenas*(message: google_protobuf_FileOptions): bool {.inline.} =
+ message.cc_enable_arenas
+
+proc `cc_enable_arenas=`*(message: google_protobuf_FileOptions, value: bool) {.inline.} =
+ setcc_enable_arenas(message, value)
+
+proc clearobjc_class_prefix*(message: google_protobuf_FileOptions) =
+ message.objc_class_prefix = ""
+ excl(message.hasField, [36])
+
+proc hasobjc_class_prefix*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 36)
+
+proc setobjc_class_prefix*(message: google_protobuf_FileOptions, value: string) =
+ message.objc_class_prefix = value
+ incl(message.hasField, 36)
+
+proc objc_class_prefix*(message: google_protobuf_FileOptions): string {.inline.} =
+ message.objc_class_prefix
+
+proc `objc_class_prefix=`*(message: google_protobuf_FileOptions, value: string) {.inline.} =
+ setobjc_class_prefix(message, value)
+
+proc clearcsharp_namespace*(message: google_protobuf_FileOptions) =
+ message.csharp_namespace = ""
+ excl(message.hasField, [37])
+
+proc hascsharp_namespace*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 37)
+
+proc setcsharp_namespace*(message: google_protobuf_FileOptions, value: string) =
+ message.csharp_namespace = value
+ incl(message.hasField, 37)
+
+proc csharp_namespace*(message: google_protobuf_FileOptions): string {.inline.} =
+ message.csharp_namespace
+
+proc `csharp_namespace=`*(message: google_protobuf_FileOptions, value: string) {.inline.} =
+ setcsharp_namespace(message, value)
+
+proc clearswift_prefix*(message: google_protobuf_FileOptions) =
+ message.swift_prefix = ""
+ excl(message.hasField, [39])
+
+proc hasswift_prefix*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 39)
+
+proc setswift_prefix*(message: google_protobuf_FileOptions, value: string) =
+ message.swift_prefix = value
+ incl(message.hasField, 39)
+
+proc swift_prefix*(message: google_protobuf_FileOptions): string {.inline.} =
+ message.swift_prefix
+
+proc `swift_prefix=`*(message: google_protobuf_FileOptions, value: string) {.inline.} =
+ setswift_prefix(message, value)
+
+proc clearphp_class_prefix*(message: google_protobuf_FileOptions) =
+ message.php_class_prefix = ""
+ excl(message.hasField, [40])
+
+proc hasphp_class_prefix*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 40)
+
+proc setphp_class_prefix*(message: google_protobuf_FileOptions, value: string) =
+ message.php_class_prefix = value
+ incl(message.hasField, 40)
+
+proc php_class_prefix*(message: google_protobuf_FileOptions): string {.inline.} =
+ message.php_class_prefix
+
+proc `php_class_prefix=`*(message: google_protobuf_FileOptions, value: string) {.inline.} =
+ setphp_class_prefix(message, value)
+
+proc clearphp_namespace*(message: google_protobuf_FileOptions) =
+ message.php_namespace = ""
+ excl(message.hasField, [41])
+
+proc hasphp_namespace*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 41)
+
+proc setphp_namespace*(message: google_protobuf_FileOptions, value: string) =
+ message.php_namespace = value
+ incl(message.hasField, 41)
+
+proc php_namespace*(message: google_protobuf_FileOptions): string {.inline.} =
+ message.php_namespace
+
+proc `php_namespace=`*(message: google_protobuf_FileOptions, value: string) {.inline.} =
+ setphp_namespace(message, value)
+
+proc clearuninterpreted_option*(message: google_protobuf_FileOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_FileOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_FileOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_FileOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_FileOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_FileOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_FileOptions*(message: google_protobuf_FileOptions): uint64 =
+ if hasjava_package(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.java_package)
+ if hasjava_outer_classname(message):
+ result = result + sizeOfTag(8, WireType.LengthDelimited)
+ result = result + sizeOfString(message.java_outer_classname)
+ if hasjava_multiple_files(message):
+ result = result + sizeOfTag(10, WireType.Varint)
+ result = result + sizeOfBool(message.java_multiple_files)
+ if hasjava_generate_equals_and_hash(message):
+ result = result + sizeOfTag(20, WireType.Varint)
+ result = result + sizeOfBool(message.java_generate_equals_and_hash)
+ if hasjava_string_check_utf8(message):
+ result = result + sizeOfTag(27, WireType.Varint)
+ result = result + sizeOfBool(message.java_string_check_utf8)
+ if hasoptimize_for(message):
+ result = result + sizeOfTag(9, WireType.Varint)
+ result = result + sizeOfEnum[google_protobuf_FileOptions_OptimizeMode](message.optimize_for)
+ if hasgo_package(message):
+ result = result + sizeOfTag(11, WireType.LengthDelimited)
+ result = result + sizeOfString(message.go_package)
+ if hascc_generic_services(message):
+ result = result + sizeOfTag(16, WireType.Varint)
+ result = result + sizeOfBool(message.cc_generic_services)
+ if hasjava_generic_services(message):
+ result = result + sizeOfTag(17, WireType.Varint)
+ result = result + sizeOfBool(message.java_generic_services)
+ if haspy_generic_services(message):
+ result = result + sizeOfTag(18, WireType.Varint)
+ result = result + sizeOfBool(message.py_generic_services)
+ if hasphp_generic_services(message):
+ result = result + sizeOfTag(42, WireType.Varint)
+ result = result + sizeOfBool(message.php_generic_services)
+ if hasdeprecated(message):
+ result = result + sizeOfTag(23, WireType.Varint)
+ result = result + sizeOfBool(message.deprecated)
+ if hascc_enable_arenas(message):
+ result = result + sizeOfTag(31, WireType.Varint)
+ result = result + sizeOfBool(message.cc_enable_arenas)
+ if hasobjc_class_prefix(message):
+ result = result + sizeOfTag(36, WireType.LengthDelimited)
+ result = result + sizeOfString(message.objc_class_prefix)
+ if hascsharp_namespace(message):
+ result = result + sizeOfTag(37, WireType.LengthDelimited)
+ result = result + sizeOfString(message.csharp_namespace)
+ if hasswift_prefix(message):
+ result = result + sizeOfTag(39, WireType.LengthDelimited)
+ result = result + sizeOfString(message.swift_prefix)
+ if hasphp_class_prefix(message):
+ result = result + sizeOfTag(40, WireType.LengthDelimited)
+ result = result + sizeOfString(message.php_class_prefix)
+ if hasphp_namespace(message):
+ result = result + sizeOfTag(41, WireType.LengthDelimited)
+ result = result + sizeOfString(message.php_namespace)
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_FileOptions*(stream: ProtobufStream, message: google_protobuf_FileOptions) =
+ if hasjava_package(message):
+ writeString(stream, message.java_package, 1)
+ if hasjava_outer_classname(message):
+ writeString(stream, message.java_outer_classname, 8)
+ if hasjava_multiple_files(message):
+ writeBool(stream, message.java_multiple_files, 10)
+ if hasjava_generate_equals_and_hash(message):
+ writeBool(stream, message.java_generate_equals_and_hash, 20)
+ if hasjava_string_check_utf8(message):
+ writeBool(stream, message.java_string_check_utf8, 27)
+ if hasoptimize_for(message):
+ writeEnum(stream, message.optimize_for, 9)
+ if hasgo_package(message):
+ writeString(stream, message.go_package, 11)
+ if hascc_generic_services(message):
+ writeBool(stream, message.cc_generic_services, 16)
+ if hasjava_generic_services(message):
+ writeBool(stream, message.java_generic_services, 17)
+ if haspy_generic_services(message):
+ writeBool(stream, message.py_generic_services, 18)
+ if hasphp_generic_services(message):
+ writeBool(stream, message.php_generic_services, 42)
+ if hasdeprecated(message):
+ writeBool(stream, message.deprecated, 23)
+ if hascc_enable_arenas(message):
+ writeBool(stream, message.cc_enable_arenas, 31)
+ if hasobjc_class_prefix(message):
+ writeString(stream, message.objc_class_prefix, 36)
+ if hascsharp_namespace(message):
+ writeString(stream, message.csharp_namespace, 37)
+ if hasswift_prefix(message):
+ writeString(stream, message.swift_prefix, 39)
+ if hasphp_class_prefix(message):
+ writeString(stream, message.php_class_prefix, 40)
+ if hasphp_namespace(message):
+ writeString(stream, message.php_namespace, 41)
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_FileOptions*(stream: ProtobufStream): google_protobuf_FileOptions =
+ result = newgoogle_protobuf_FileOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setjava_package(result, readString(stream))
+ of 8:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setjava_outer_classname(result, readString(stream))
+ of 10:
+ expectWireType(wireType, WireType.Varint)
+ setjava_multiple_files(result, readBool(stream))
+ of 20:
+ expectWireType(wireType, WireType.Varint)
+ setjava_generate_equals_and_hash(result, readBool(stream))
+ of 27:
+ expectWireType(wireType, WireType.Varint)
+ setjava_string_check_utf8(result, readBool(stream))
+ of 9:
+ expectWireType(wireType, WireType.Varint)
+ setoptimize_for(result, readEnum[google_protobuf_FileOptions_OptimizeMode](stream))
+ of 11:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setgo_package(result, readString(stream))
+ of 16:
+ expectWireType(wireType, WireType.Varint)
+ setcc_generic_services(result, readBool(stream))
+ of 17:
+ expectWireType(wireType, WireType.Varint)
+ setjava_generic_services(result, readBool(stream))
+ of 18:
+ expectWireType(wireType, WireType.Varint)
+ setpy_generic_services(result, readBool(stream))
+ of 42:
+ expectWireType(wireType, WireType.Varint)
+ setphp_generic_services(result, readBool(stream))
+ of 23:
+ expectWireType(wireType, WireType.Varint)
+ setdeprecated(result, readBool(stream))
+ of 31:
+ expectWireType(wireType, WireType.Varint)
+ setcc_enable_arenas(result, readBool(stream))
+ of 36:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setobjc_class_prefix(result, readString(stream))
+ of 37:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setcsharp_namespace(result, readString(stream))
+ of 39:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setswift_prefix(result, readString(stream))
+ of 40:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setphp_class_prefix(result, readString(stream))
+ of 41:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setphp_namespace(result, readString(stream))
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_FileOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_FileOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_FileOptions*(data: string): google_protobuf_FileOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_FileOptions(pbs)
+
+
+proc newgoogle_protobuf_ServiceOptions*(): google_protobuf_ServiceOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.deprecated = false
+ result.uninterpreted_option = @[]
+
+proc cleardeprecated*(message: google_protobuf_ServiceOptions) =
+ message.deprecated = false
+ excl(message.hasField, [33])
+
+proc hasdeprecated*(message: google_protobuf_ServiceOptions): bool =
+ result = contains(message.hasField, 33)
+
+proc setdeprecated*(message: google_protobuf_ServiceOptions, value: bool) =
+ message.deprecated = value
+ incl(message.hasField, 33)
+
+proc deprecated*(message: google_protobuf_ServiceOptions): bool {.inline.} =
+ message.deprecated
+
+proc `deprecated=`*(message: google_protobuf_ServiceOptions, value: bool) {.inline.} =
+ setdeprecated(message, value)
+
+proc clearuninterpreted_option*(message: google_protobuf_ServiceOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_ServiceOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_ServiceOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_ServiceOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_ServiceOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_ServiceOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_ServiceOptions*(message: google_protobuf_ServiceOptions): uint64 =
+ if hasdeprecated(message):
+ result = result + sizeOfTag(33, WireType.Varint)
+ result = result + sizeOfBool(message.deprecated)
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_ServiceOptions*(stream: ProtobufStream, message: google_protobuf_ServiceOptions) =
+ if hasdeprecated(message):
+ writeBool(stream, message.deprecated, 33)
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_ServiceOptions*(stream: ProtobufStream): google_protobuf_ServiceOptions =
+ result = newgoogle_protobuf_ServiceOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 33:
+ expectWireType(wireType, WireType.Varint)
+ setdeprecated(result, readBool(stream))
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_ServiceOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_ServiceOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_ServiceOptions*(data: string): google_protobuf_ServiceOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_ServiceOptions(pbs)
+
+
+proc newgoogle_protobuf_MethodOptions*(): google_protobuf_MethodOptions =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.deprecated = false
+ result.idempotency_level = google_protobuf_MethodOptions_IdempotencyLevel.IDEMPOTENCY_UNKNOWN
+ result.uninterpreted_option = @[]
+
+proc cleardeprecated*(message: google_protobuf_MethodOptions) =
+ message.deprecated = false
+ excl(message.hasField, [33])
+
+proc hasdeprecated*(message: google_protobuf_MethodOptions): bool =
+ result = contains(message.hasField, 33)
+
+proc setdeprecated*(message: google_protobuf_MethodOptions, value: bool) =
+ message.deprecated = value
+ incl(message.hasField, 33)
+
+proc deprecated*(message: google_protobuf_MethodOptions): bool {.inline.} =
+ message.deprecated
+
+proc `deprecated=`*(message: google_protobuf_MethodOptions, value: bool) {.inline.} =
+ setdeprecated(message, value)
+
+proc clearidempotency_level*(message: google_protobuf_MethodOptions) =
+ message.idempotency_level = google_protobuf_MethodOptions_IdempotencyLevel.IDEMPOTENCY_UNKNOWN
+ excl(message.hasField, [34])
+
+proc hasidempotency_level*(message: google_protobuf_MethodOptions): bool =
+ result = contains(message.hasField, 34)
+
+proc setidempotency_level*(message: google_protobuf_MethodOptions, value: google_protobuf_MethodOptions_IdempotencyLevel) =
+ message.idempotency_level = value
+ incl(message.hasField, 34)
+
+proc idempotency_level*(message: google_protobuf_MethodOptions): google_protobuf_MethodOptions_IdempotencyLevel {.inline.} =
+ message.idempotency_level
+
+proc `idempotency_level=`*(message: google_protobuf_MethodOptions, value: google_protobuf_MethodOptions_IdempotencyLevel) {.inline.} =
+ setidempotency_level(message, value)
+
+proc clearuninterpreted_option*(message: google_protobuf_MethodOptions) =
+ message.uninterpreted_option = @[]
+ excl(message.hasField, [999])
+
+proc hasuninterpreted_option*(message: google_protobuf_MethodOptions): bool =
+ result = contains(message.hasField, 999) or (len(message.uninterpreted_option) > 0)
+
+proc setuninterpreted_option*(message: google_protobuf_MethodOptions, value: seq[google_protobuf_UninterpretedOption]) =
+ message.uninterpreted_option = value
+ incl(message.hasField, 999)
+
+proc adduninterpreted_option*(message: google_protobuf_MethodOptions, value: google_protobuf_UninterpretedOption) =
+ add(message.uninterpreted_option, value)
+ incl(message.hasField, 999)
+
+proc uninterpreted_option*(message: google_protobuf_MethodOptions): seq[google_protobuf_UninterpretedOption] {.inline.} =
+ message.uninterpreted_option
+
+proc `uninterpreted_option=`*(message: google_protobuf_MethodOptions, value: seq[google_protobuf_UninterpretedOption]) {.inline.} =
+ setuninterpreted_option(message, value)
+
+proc sizeOfgoogle_protobuf_MethodOptions*(message: google_protobuf_MethodOptions): uint64 =
+ if hasdeprecated(message):
+ result = result + sizeOfTag(33, WireType.Varint)
+ result = result + sizeOfBool(message.deprecated)
+ if hasidempotency_level(message):
+ result = result + sizeOfTag(34, WireType.Varint)
+ result = result + sizeOfEnum[google_protobuf_MethodOptions_IdempotencyLevel](message.idempotency_level)
+ for value in message.uninterpreted_option:
+ result = result + sizeOfTag(999, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_UninterpretedOption(value))
+
+proc writegoogle_protobuf_MethodOptions*(stream: ProtobufStream, message: google_protobuf_MethodOptions) =
+ if hasdeprecated(message):
+ writeBool(stream, message.deprecated, 33)
+ if hasidempotency_level(message):
+ writeEnum(stream, message.idempotency_level, 34)
+ for value in message.uninterpreted_option:
+ writeMessage(stream, value, 999)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_MethodOptions*(stream: ProtobufStream): google_protobuf_MethodOptions =
+ result = newgoogle_protobuf_MethodOptions()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 33:
+ expectWireType(wireType, WireType.Varint)
+ setdeprecated(result, readBool(stream))
+ of 34:
+ expectWireType(wireType, WireType.Varint)
+ setidempotency_level(result, readEnum[google_protobuf_MethodOptions_IdempotencyLevel](stream))
+ of 999:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ adduninterpreted_option(result, newgoogle_protobuf_UninterpretedOption(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_MethodOptions): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_MethodOptions(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_MethodOptions*(data: string): google_protobuf_MethodOptions =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_MethodOptions(pbs)
+
+
+proc newgoogle_protobuf_MethodDescriptorProto*(): google_protobuf_MethodDescriptorProto =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = ""
+ result.input_type = ""
+ result.output_type = ""
+ result.options = nil
+ result.client_streaming = false
+ result.server_streaming = false
+
+proc clearname*(message: google_protobuf_MethodDescriptorProto) =
+ message.name = ""
+ excl(message.hasField, [1])
+
+proc hasname*(message: google_protobuf_MethodDescriptorProto): bool =
+ result = contains(message.hasField, 1)
+
+proc setname*(message: google_protobuf_MethodDescriptorProto, value: string) =
+ message.name = value
+ incl(message.hasField, 1)
+
+proc name*(message: google_protobuf_MethodDescriptorProto): string {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_MethodDescriptorProto, value: string) {.inline.} =
+ setname(message, value)
+
+proc clearinput_type*(message: google_protobuf_MethodDescriptorProto) =
+ message.input_type = ""
+ excl(message.hasField, [2])
+
+proc hasinput_type*(message: google_protobuf_MethodDescriptorProto): bool =
+ result = contains(message.hasField, 2)
+
+proc setinput_type*(message: google_protobuf_MethodDescriptorProto, value: string) =
+ message.input_type = value
+ incl(message.hasField, 2)
+
+proc input_type*(message: google_protobuf_MethodDescriptorProto): string {.inline.} =
+ message.input_type
+
+proc `input_type=`*(message: google_protobuf_MethodDescriptorProto, value: string) {.inline.} =
+ setinput_type(message, value)
+
+proc clearoutput_type*(message: google_protobuf_MethodDescriptorProto) =
+ message.output_type = ""
+ excl(message.hasField, [3])
+
+proc hasoutput_type*(message: google_protobuf_MethodDescriptorProto): bool =
+ result = contains(message.hasField, 3)
+
+proc setoutput_type*(message: google_protobuf_MethodDescriptorProto, value: string) =
+ message.output_type = value
+ incl(message.hasField, 3)
+
+proc output_type*(message: google_protobuf_MethodDescriptorProto): string {.inline.} =
+ message.output_type
+
+proc `output_type=`*(message: google_protobuf_MethodDescriptorProto, value: string) {.inline.} =
+ setoutput_type(message, value)
+
+proc clearoptions*(message: google_protobuf_MethodDescriptorProto) =
+ message.options = nil
+ excl(message.hasField, [4])
+
+proc hasoptions*(message: google_protobuf_MethodDescriptorProto): bool =
+ result = contains(message.hasField, 4)
+
+proc setoptions*(message: google_protobuf_MethodDescriptorProto, value: google_protobuf_MethodOptions) =
+ message.options = value
+ incl(message.hasField, 4)
+
+proc options*(message: google_protobuf_MethodDescriptorProto): google_protobuf_MethodOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_MethodDescriptorProto, value: google_protobuf_MethodOptions) {.inline.} =
+ setoptions(message, value)
+
+proc clearclient_streaming*(message: google_protobuf_MethodDescriptorProto) =
+ message.client_streaming = false
+ excl(message.hasField, [5])
+
+proc hasclient_streaming*(message: google_protobuf_MethodDescriptorProto): bool =
+ result = contains(message.hasField, 5)
+
+proc setclient_streaming*(message: google_protobuf_MethodDescriptorProto, value: bool) =
+ message.client_streaming = value
+ incl(message.hasField, 5)
+
+proc client_streaming*(message: google_protobuf_MethodDescriptorProto): bool {.inline.} =
+ message.client_streaming
+
+proc `client_streaming=`*(message: google_protobuf_MethodDescriptorProto, value: bool) {.inline.} =
+ setclient_streaming(message, value)
+
+proc clearserver_streaming*(message: google_protobuf_MethodDescriptorProto) =
+ message.server_streaming = false
+ excl(message.hasField, [6])
+
+proc hasserver_streaming*(message: google_protobuf_MethodDescriptorProto): bool =
+ result = contains(message.hasField, 6)
+
+proc setserver_streaming*(message: google_protobuf_MethodDescriptorProto, value: bool) =
+ message.server_streaming = value
+ incl(message.hasField, 6)
+
+proc server_streaming*(message: google_protobuf_MethodDescriptorProto): bool {.inline.} =
+ message.server_streaming
+
+proc `server_streaming=`*(message: google_protobuf_MethodDescriptorProto, value: bool) {.inline.} =
+ setserver_streaming(message, value)
+
+proc sizeOfgoogle_protobuf_MethodDescriptorProto*(message: google_protobuf_MethodDescriptorProto): uint64 =
+ if hasname(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name)
+ if hasinput_type(message):
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfString(message.input_type)
+ if hasoutput_type(message):
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfString(message.output_type)
+ if hasoptions(message):
+ result = result + sizeOfTag(4, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_MethodOptions(message.options))
+ if hasclient_streaming(message):
+ result = result + sizeOfTag(5, WireType.Varint)
+ result = result + sizeOfBool(message.client_streaming)
+ if hasserver_streaming(message):
+ result = result + sizeOfTag(6, WireType.Varint)
+ result = result + sizeOfBool(message.server_streaming)
+
+proc writegoogle_protobuf_MethodDescriptorProto*(stream: ProtobufStream, message: google_protobuf_MethodDescriptorProto) =
+ if hasname(message):
+ writeString(stream, message.name, 1)
+ if hasinput_type(message):
+ writeString(stream, message.input_type, 2)
+ if hasoutput_type(message):
+ writeString(stream, message.output_type, 3)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 4)
+ if hasclient_streaming(message):
+ writeBool(stream, message.client_streaming, 5)
+ if hasserver_streaming(message):
+ writeBool(stream, message.server_streaming, 6)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_MethodDescriptorProto*(stream: ProtobufStream): google_protobuf_MethodDescriptorProto =
+ result = newgoogle_protobuf_MethodDescriptorProto()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setinput_type(result, readString(stream))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setoutput_type(result, readString(stream))
+ of 4:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_MethodOptions(data))
+ of 5:
+ expectWireType(wireType, WireType.Varint)
+ setclient_streaming(result, readBool(stream))
+ of 6:
+ expectWireType(wireType, WireType.Varint)
+ setserver_streaming(result, readBool(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_MethodDescriptorProto): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_MethodDescriptorProto(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_MethodDescriptorProto*(data: string): google_protobuf_MethodDescriptorProto =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_MethodDescriptorProto(pbs)
+
+
+proc newgoogle_protobuf_ServiceDescriptorProto*(): google_protobuf_ServiceDescriptorProto =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = ""
+ result.fmethod = @[]
+ result.options = nil
+
+proc clearname*(message: google_protobuf_ServiceDescriptorProto) =
+ message.name = ""
+ excl(message.hasField, [1])
+
+proc hasname*(message: google_protobuf_ServiceDescriptorProto): bool =
+ result = contains(message.hasField, 1)
+
+proc setname*(message: google_protobuf_ServiceDescriptorProto, value: string) =
+ message.name = value
+ incl(message.hasField, 1)
+
+proc name*(message: google_protobuf_ServiceDescriptorProto): string {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_ServiceDescriptorProto, value: string) {.inline.} =
+ setname(message, value)
+
+proc clearfmethod*(message: google_protobuf_ServiceDescriptorProto) =
+ message.fmethod = @[]
+ excl(message.hasField, [2])
+
+proc hasfmethod*(message: google_protobuf_ServiceDescriptorProto): bool =
+ result = contains(message.hasField, 2) or (len(message.fmethod) > 0)
+
+proc setfmethod*(message: google_protobuf_ServiceDescriptorProto, value: seq[google_protobuf_MethodDescriptorProto]) =
+ message.fmethod = value
+ incl(message.hasField, 2)
+
+proc addfmethod*(message: google_protobuf_ServiceDescriptorProto, value: google_protobuf_MethodDescriptorProto) =
+ add(message.fmethod, value)
+ incl(message.hasField, 2)
+
+proc fmethod*(message: google_protobuf_ServiceDescriptorProto): seq[google_protobuf_MethodDescriptorProto] {.inline.} =
+ message.fmethod
+
+proc `fmethod=`*(message: google_protobuf_ServiceDescriptorProto, value: seq[google_protobuf_MethodDescriptorProto]) {.inline.} =
+ setfmethod(message, value)
+
+proc clearoptions*(message: google_protobuf_ServiceDescriptorProto) =
+ message.options = nil
+ excl(message.hasField, [3])
+
+proc hasoptions*(message: google_protobuf_ServiceDescriptorProto): bool =
+ result = contains(message.hasField, 3)
+
+proc setoptions*(message: google_protobuf_ServiceDescriptorProto, value: google_protobuf_ServiceOptions) =
+ message.options = value
+ incl(message.hasField, 3)
+
+proc options*(message: google_protobuf_ServiceDescriptorProto): google_protobuf_ServiceOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_ServiceDescriptorProto, value: google_protobuf_ServiceOptions) {.inline.} =
+ setoptions(message, value)
+
+proc sizeOfgoogle_protobuf_ServiceDescriptorProto*(message: google_protobuf_ServiceDescriptorProto): uint64 =
+ if hasname(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name)
+ for value in message.fmethod:
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_MethodDescriptorProto(value))
+ if hasoptions(message):
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_ServiceOptions(message.options))
+
+proc writegoogle_protobuf_ServiceDescriptorProto*(stream: ProtobufStream, message: google_protobuf_ServiceDescriptorProto) =
+ if hasname(message):
+ writeString(stream, message.name, 1)
+ for value in message.fmethod:
+ writeMessage(stream, value, 2)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 3)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_ServiceDescriptorProto*(stream: ProtobufStream): google_protobuf_ServiceDescriptorProto =
+ result = newgoogle_protobuf_ServiceDescriptorProto()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addfmethod(result, newgoogle_protobuf_MethodDescriptorProto(data))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_ServiceOptions(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_ServiceDescriptorProto): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_ServiceDescriptorProto(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_ServiceDescriptorProto*(data: string): google_protobuf_ServiceDescriptorProto =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_ServiceDescriptorProto(pbs)
+
+
+proc newgoogle_protobuf_FileDescriptorProto*(): google_protobuf_FileDescriptorProto =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.name = ""
+ result.package = ""
+ result.dependency = @[]
+ result.public_dependency = @[]
+ result.weak_dependency = @[]
+ result.message_type = @[]
+ result.enum_type = @[]
+ result.service = @[]
+ result.extension = @[]
+ result.options = nil
+ result.source_code_info = nil
+ result.syntax = ""
+
+proc clearname*(message: google_protobuf_FileDescriptorProto) =
+ message.name = ""
+ excl(message.hasField, [1])
+
+proc hasname*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 1)
+
+proc setname*(message: google_protobuf_FileDescriptorProto, value: string) =
+ message.name = value
+ incl(message.hasField, 1)
+
+proc name*(message: google_protobuf_FileDescriptorProto): string {.inline.} =
+ message.name
+
+proc `name=`*(message: google_protobuf_FileDescriptorProto, value: string) {.inline.} =
+ setname(message, value)
+
+proc clearpackage*(message: google_protobuf_FileDescriptorProto) =
+ message.package = ""
+ excl(message.hasField, [2])
+
+proc haspackage*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 2)
+
+proc setpackage*(message: google_protobuf_FileDescriptorProto, value: string) =
+ message.package = value
+ incl(message.hasField, 2)
+
+proc package*(message: google_protobuf_FileDescriptorProto): string {.inline.} =
+ message.package
+
+proc `package=`*(message: google_protobuf_FileDescriptorProto, value: string) {.inline.} =
+ setpackage(message, value)
+
+proc cleardependency*(message: google_protobuf_FileDescriptorProto) =
+ message.dependency = @[]
+ excl(message.hasField, [3])
+
+proc hasdependency*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 3) or (len(message.dependency) > 0)
+
+proc setdependency*(message: google_protobuf_FileDescriptorProto, value: seq[string]) =
+ message.dependency = value
+ incl(message.hasField, 3)
+
+proc adddependency*(message: google_protobuf_FileDescriptorProto, value: string) =
+ add(message.dependency, value)
+ incl(message.hasField, 3)
+
+proc dependency*(message: google_protobuf_FileDescriptorProto): seq[string] {.inline.} =
+ message.dependency
+
+proc `dependency=`*(message: google_protobuf_FileDescriptorProto, value: seq[string]) {.inline.} =
+ setdependency(message, value)
+
+proc clearpublic_dependency*(message: google_protobuf_FileDescriptorProto) =
+ message.public_dependency = @[]
+ excl(message.hasField, [10])
+
+proc haspublic_dependency*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 10) or (len(message.public_dependency) > 0)
+
+proc setpublic_dependency*(message: google_protobuf_FileDescriptorProto, value: seq[int32]) =
+ message.public_dependency = value
+ incl(message.hasField, 10)
+
+proc addpublic_dependency*(message: google_protobuf_FileDescriptorProto, value: int32) =
+ add(message.public_dependency, value)
+ incl(message.hasField, 10)
+
+proc public_dependency*(message: google_protobuf_FileDescriptorProto): seq[int32] {.inline.} =
+ message.public_dependency
+
+proc `public_dependency=`*(message: google_protobuf_FileDescriptorProto, value: seq[int32]) {.inline.} =
+ setpublic_dependency(message, value)
+
+proc clearweak_dependency*(message: google_protobuf_FileDescriptorProto) =
+ message.weak_dependency = @[]
+ excl(message.hasField, [11])
+
+proc hasweak_dependency*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 11) or (len(message.weak_dependency) > 0)
+
+proc setweak_dependency*(message: google_protobuf_FileDescriptorProto, value: seq[int32]) =
+ message.weak_dependency = value
+ incl(message.hasField, 11)
+
+proc addweak_dependency*(message: google_protobuf_FileDescriptorProto, value: int32) =
+ add(message.weak_dependency, value)
+ incl(message.hasField, 11)
+
+proc weak_dependency*(message: google_protobuf_FileDescriptorProto): seq[int32] {.inline.} =
+ message.weak_dependency
+
+proc `weak_dependency=`*(message: google_protobuf_FileDescriptorProto, value: seq[int32]) {.inline.} =
+ setweak_dependency(message, value)
+
+proc clearmessage_type*(message: google_protobuf_FileDescriptorProto) =
+ message.message_type = @[]
+ excl(message.hasField, [4])
+
+proc hasmessage_type*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 4) or (len(message.message_type) > 0)
+
+proc setmessage_type*(message: google_protobuf_FileDescriptorProto, value: seq[google_protobuf_DescriptorProto]) =
+ message.message_type = value
+ incl(message.hasField, 4)
+
+proc addmessage_type*(message: google_protobuf_FileDescriptorProto, value: google_protobuf_DescriptorProto) =
+ add(message.message_type, value)
+ incl(message.hasField, 4)
+
+proc message_type*(message: google_protobuf_FileDescriptorProto): seq[google_protobuf_DescriptorProto] {.inline.} =
+ message.message_type
+
+proc `message_type=`*(message: google_protobuf_FileDescriptorProto, value: seq[google_protobuf_DescriptorProto]) {.inline.} =
+ setmessage_type(message, value)
+
+proc clearenum_type*(message: google_protobuf_FileDescriptorProto) =
+ message.enum_type = @[]
+ excl(message.hasField, [5])
+
+proc hasenum_type*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 5) or (len(message.enum_type) > 0)
+
+proc setenum_type*(message: google_protobuf_FileDescriptorProto, value: seq[google_protobuf_EnumDescriptorProto]) =
+ message.enum_type = value
+ incl(message.hasField, 5)
+
+proc addenum_type*(message: google_protobuf_FileDescriptorProto, value: google_protobuf_EnumDescriptorProto) =
+ add(message.enum_type, value)
+ incl(message.hasField, 5)
+
+proc enum_type*(message: google_protobuf_FileDescriptorProto): seq[google_protobuf_EnumDescriptorProto] {.inline.} =
+ message.enum_type
+
+proc `enum_type=`*(message: google_protobuf_FileDescriptorProto, value: seq[google_protobuf_EnumDescriptorProto]) {.inline.} =
+ setenum_type(message, value)
+
+proc clearservice*(message: google_protobuf_FileDescriptorProto) =
+ message.service = @[]
+ excl(message.hasField, [6])
+
+proc hasservice*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 6) or (len(message.service) > 0)
+
+proc setservice*(message: google_protobuf_FileDescriptorProto, value: seq[google_protobuf_ServiceDescriptorProto]) =
+ message.service = value
+ incl(message.hasField, 6)
+
+proc addservice*(message: google_protobuf_FileDescriptorProto, value: google_protobuf_ServiceDescriptorProto) =
+ add(message.service, value)
+ incl(message.hasField, 6)
+
+proc service*(message: google_protobuf_FileDescriptorProto): seq[google_protobuf_ServiceDescriptorProto] {.inline.} =
+ message.service
+
+proc `service=`*(message: google_protobuf_FileDescriptorProto, value: seq[google_protobuf_ServiceDescriptorProto]) {.inline.} =
+ setservice(message, value)
+
+proc clearextension*(message: google_protobuf_FileDescriptorProto) =
+ message.extension = @[]
+ excl(message.hasField, [7])
+
+proc hasextension*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 7) or (len(message.extension) > 0)
+
+proc setextension*(message: google_protobuf_FileDescriptorProto, value: seq[google_protobuf_FieldDescriptorProto]) =
+ message.extension = value
+ incl(message.hasField, 7)
+
+proc addextension*(message: google_protobuf_FileDescriptorProto, value: google_protobuf_FieldDescriptorProto) =
+ add(message.extension, value)
+ incl(message.hasField, 7)
+
+proc extension*(message: google_protobuf_FileDescriptorProto): seq[google_protobuf_FieldDescriptorProto] {.inline.} =
+ message.extension
+
+proc `extension=`*(message: google_protobuf_FileDescriptorProto, value: seq[google_protobuf_FieldDescriptorProto]) {.inline.} =
+ setextension(message, value)
+
+proc clearoptions*(message: google_protobuf_FileDescriptorProto) =
+ message.options = nil
+ excl(message.hasField, [8])
+
+proc hasoptions*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 8)
+
+proc setoptions*(message: google_protobuf_FileDescriptorProto, value: google_protobuf_FileOptions) =
+ message.options = value
+ incl(message.hasField, 8)
+
+proc options*(message: google_protobuf_FileDescriptorProto): google_protobuf_FileOptions {.inline.} =
+ message.options
+
+proc `options=`*(message: google_protobuf_FileDescriptorProto, value: google_protobuf_FileOptions) {.inline.} =
+ setoptions(message, value)
+
+proc clearsource_code_info*(message: google_protobuf_FileDescriptorProto) =
+ message.source_code_info = nil
+ excl(message.hasField, [9])
+
+proc hassource_code_info*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 9)
+
+proc setsource_code_info*(message: google_protobuf_FileDescriptorProto, value: google_protobuf_SourceCodeInfo) =
+ message.source_code_info = value
+ incl(message.hasField, 9)
+
+proc source_code_info*(message: google_protobuf_FileDescriptorProto): google_protobuf_SourceCodeInfo {.inline.} =
+ message.source_code_info
+
+proc `source_code_info=`*(message: google_protobuf_FileDescriptorProto, value: google_protobuf_SourceCodeInfo) {.inline.} =
+ setsource_code_info(message, value)
+
+proc clearsyntax*(message: google_protobuf_FileDescriptorProto) =
+ message.syntax = ""
+ excl(message.hasField, [12])
+
+proc hassyntax*(message: google_protobuf_FileDescriptorProto): bool =
+ result = contains(message.hasField, 12)
+
+proc setsyntax*(message: google_protobuf_FileDescriptorProto, value: string) =
+ message.syntax = value
+ incl(message.hasField, 12)
+
+proc syntax*(message: google_protobuf_FileDescriptorProto): string {.inline.} =
+ message.syntax
+
+proc `syntax=`*(message: google_protobuf_FileDescriptorProto, value: string) {.inline.} =
+ setsyntax(message, value)
+
+proc sizeOfgoogle_protobuf_FileDescriptorProto*(message: google_protobuf_FileDescriptorProto): uint64 =
+ if hasname(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfString(message.name)
+ if haspackage(message):
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfString(message.package)
+ for value in message.dependency:
+ result = result + sizeOfTag(3, WireType.LengthDelimited)
+ result = result + sizeOfString(value)
+ if haspublic_dependency(message):
+ result = result + sizeOfTag(10, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(packedFieldSize(message.public_dependency, FieldType.Int32))
+ if hasweak_dependency(message):
+ result = result + sizeOfTag(11, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(packedFieldSize(message.weak_dependency, FieldType.Int32))
+ for value in message.message_type:
+ result = result + sizeOfTag(4, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_DescriptorProto(value))
+ for value in message.enum_type:
+ result = result + sizeOfTag(5, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_EnumDescriptorProto(value))
+ for value in message.service:
+ result = result + sizeOfTag(6, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_ServiceDescriptorProto(value))
+ for value in message.extension:
+ result = result + sizeOfTag(7, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_FieldDescriptorProto(value))
+ if hasoptions(message):
+ result = result + sizeOfTag(8, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_FileOptions(message.options))
+ if hassource_code_info(message):
+ result = result + sizeOfTag(9, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_SourceCodeInfo(message.source_code_info))
+ if hassyntax(message):
+ result = result + sizeOfTag(12, WireType.LengthDelimited)
+ result = result + sizeOfString(message.syntax)
+
+proc writegoogle_protobuf_FileDescriptorProto*(stream: ProtobufStream, message: google_protobuf_FileDescriptorProto) =
+ if hasname(message):
+ writeString(stream, message.name, 1)
+ if haspackage(message):
+ writeString(stream, message.package, 2)
+ for value in message.dependency:
+ writeString(stream, value, 3)
+ for value in message.public_dependency:
+ writeInt32(stream, value, 10)
+ for value in message.weak_dependency:
+ writeInt32(stream, value, 11)
+ for value in message.message_type:
+ writeMessage(stream, value, 4)
+ for value in message.enum_type:
+ writeMessage(stream, value, 5)
+ for value in message.service:
+ writeMessage(stream, value, 6)
+ for value in message.extension:
+ writeMessage(stream, value, 7)
+ if hasoptions(message):
+ writeMessage(stream, message.options, 8)
+ if hassource_code_info(message):
+ writeMessage(stream, message.source_code_info, 9)
+ if hassyntax(message):
+ writeString(stream, message.syntax, 12)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_FileDescriptorProto*(stream: ProtobufStream): google_protobuf_FileDescriptorProto =
+ result = newgoogle_protobuf_FileDescriptorProto()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setname(result, readString(stream))
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setpackage(result, readString(stream))
+ of 3:
+ expectWireType(wireType, WireType.LengthDelimited)
+ adddependency(result, readString(stream))
+ of 10:
+ expectWireType(wireType, WireType.Varint, WireType.LengthDelimited)
+ if wireType == WireType.LengthDelimited:
+ let
+ size = readVarint(stream)
+ start = uint64(getPosition(stream))
+ var consumed = 0'u64
+ while consumed < size:
+ addpublic_dependency(result, readInt32(stream))
+ consumed = uint64(getPosition(stream)) - start
+ if consumed != size:
+ raise newException(Exception, "packed field size mismatch")
+ else:
+ addpublic_dependency(result, readInt32(stream))
+ of 11:
+ expectWireType(wireType, WireType.Varint, WireType.LengthDelimited)
+ if wireType == WireType.LengthDelimited:
+ let
+ size = readVarint(stream)
+ start = uint64(getPosition(stream))
+ var consumed = 0'u64
+ while consumed < size:
+ addweak_dependency(result, readInt32(stream))
+ consumed = uint64(getPosition(stream)) - start
+ if consumed != size:
+ raise newException(Exception, "packed field size mismatch")
+ else:
+ addweak_dependency(result, readInt32(stream))
+ of 4:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addmessage_type(result, newgoogle_protobuf_DescriptorProto(data))
+ of 5:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addenum_type(result, newgoogle_protobuf_EnumDescriptorProto(data))
+ of 6:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addservice(result, newgoogle_protobuf_ServiceDescriptorProto(data))
+ of 7:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addextension(result, newgoogle_protobuf_FieldDescriptorProto(data))
+ of 8:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setoptions(result, newgoogle_protobuf_FileOptions(data))
+ of 9:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ setsource_code_info(result, newgoogle_protobuf_SourceCodeInfo(data))
+ of 12:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setsyntax(result, readString(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_FileDescriptorProto): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_FileDescriptorProto(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_FileDescriptorProto*(data: string): google_protobuf_FileDescriptorProto =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_FileDescriptorProto(pbs)
+
+
+proc newgoogle_protobuf_FileDescriptorSet*(): google_protobuf_FileDescriptorSet =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.file = @[]
+
+proc clearfile*(message: google_protobuf_FileDescriptorSet) =
+ message.file = @[]
+ excl(message.hasField, [1])
+
+proc hasfile*(message: google_protobuf_FileDescriptorSet): bool =
+ result = contains(message.hasField, 1) or (len(message.file) > 0)
+
+proc setfile*(message: google_protobuf_FileDescriptorSet, value: seq[google_protobuf_FileDescriptorProto]) =
+ message.file = value
+ incl(message.hasField, 1)
+
+proc addfile*(message: google_protobuf_FileDescriptorSet, value: google_protobuf_FileDescriptorProto) =
+ add(message.file, value)
+ incl(message.hasField, 1)
+
+proc file*(message: google_protobuf_FileDescriptorSet): seq[google_protobuf_FileDescriptorProto] {.inline.} =
+ message.file
+
+proc `file=`*(message: google_protobuf_FileDescriptorSet, value: seq[google_protobuf_FileDescriptorProto]) {.inline.} =
+ setfile(message, value)
+
+proc sizeOfgoogle_protobuf_FileDescriptorSet*(message: google_protobuf_FileDescriptorSet): uint64 =
+ for value in message.file:
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_FileDescriptorProto(value))
+
+proc writegoogle_protobuf_FileDescriptorSet*(stream: ProtobufStream, message: google_protobuf_FileDescriptorSet) =
+ for value in message.file:
+ writeMessage(stream, value, 1)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_FileDescriptorSet*(stream: ProtobufStream): google_protobuf_FileDescriptorSet =
+ result = newgoogle_protobuf_FileDescriptorSet()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addfile(result, newgoogle_protobuf_FileDescriptorProto(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_FileDescriptorSet): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_FileDescriptorSet(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_FileDescriptorSet*(data: string): google_protobuf_FileDescriptorSet =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_FileDescriptorSet(pbs)
+
+
+proc newgoogle_protobuf_GeneratedCodeInfo_Annotation*(): google_protobuf_GeneratedCodeInfo_Annotation =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.path = @[]
+ result.source_file = ""
+ result.begin = 0
+ result.fend = 0
+
+proc clearpath*(message: google_protobuf_GeneratedCodeInfo_Annotation) =
+ message.path = @[]
+ excl(message.hasField, [1])
+
+proc haspath*(message: google_protobuf_GeneratedCodeInfo_Annotation): bool =
+ result = contains(message.hasField, 1) or (len(message.path) > 0)
+
+proc setpath*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: seq[int32]) =
+ message.path = value
+ incl(message.hasField, 1)
+
+proc addpath*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: int32) =
+ add(message.path, value)
+ incl(message.hasField, 1)
+
+proc path*(message: google_protobuf_GeneratedCodeInfo_Annotation): seq[int32] {.inline.} =
+ message.path
+
+proc `path=`*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: seq[int32]) {.inline.} =
+ setpath(message, value)
+
+proc clearsource_file*(message: google_protobuf_GeneratedCodeInfo_Annotation) =
+ message.source_file = ""
+ excl(message.hasField, [2])
+
+proc hassource_file*(message: google_protobuf_GeneratedCodeInfo_Annotation): bool =
+ result = contains(message.hasField, 2)
+
+proc setsource_file*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: string) =
+ message.source_file = value
+ incl(message.hasField, 2)
+
+proc source_file*(message: google_protobuf_GeneratedCodeInfo_Annotation): string {.inline.} =
+ message.source_file
+
+proc `source_file=`*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: string) {.inline.} =
+ setsource_file(message, value)
+
+proc clearbegin*(message: google_protobuf_GeneratedCodeInfo_Annotation) =
+ message.begin = 0
+ excl(message.hasField, [3])
+
+proc hasbegin*(message: google_protobuf_GeneratedCodeInfo_Annotation): bool =
+ result = contains(message.hasField, 3)
+
+proc setbegin*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: int32) =
+ message.begin = value
+ incl(message.hasField, 3)
+
+proc begin*(message: google_protobuf_GeneratedCodeInfo_Annotation): int32 {.inline.} =
+ message.begin
+
+proc `begin=`*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: int32) {.inline.} =
+ setbegin(message, value)
+
+proc clearfend*(message: google_protobuf_GeneratedCodeInfo_Annotation) =
+ message.fend = 0
+ excl(message.hasField, [4])
+
+proc hasfend*(message: google_protobuf_GeneratedCodeInfo_Annotation): bool =
+ result = contains(message.hasField, 4)
+
+proc setfend*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: int32) =
+ message.fend = value
+ incl(message.hasField, 4)
+
+proc fend*(message: google_protobuf_GeneratedCodeInfo_Annotation): int32 {.inline.} =
+ message.fend
+
+proc `fend=`*(message: google_protobuf_GeneratedCodeInfo_Annotation, value: int32) {.inline.} =
+ setfend(message, value)
+
+proc sizeOfgoogle_protobuf_GeneratedCodeInfo_Annotation*(message: google_protobuf_GeneratedCodeInfo_Annotation): uint64 =
+ if haspath(message):
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(packedFieldSize(message.path, FieldType.Int32))
+ if hassource_file(message):
+ result = result + sizeOfTag(2, WireType.LengthDelimited)
+ result = result + sizeOfString(message.source_file)
+ if hasbegin(message):
+ result = result + sizeOfTag(3, WireType.Varint)
+ result = result + sizeOfInt32(message.begin)
+ if hasfend(message):
+ result = result + sizeOfTag(4, WireType.Varint)
+ result = result + sizeOfInt32(message.fend)
+
+proc writegoogle_protobuf_GeneratedCodeInfo_Annotation*(stream: ProtobufStream, message: google_protobuf_GeneratedCodeInfo_Annotation) =
+ if haspath(message):
+ writeTag(stream, 1, WireType.LengthDelimited)
+ writeVarint(stream, packedFieldSize(message.path, FieldType.Int32))
+ for value in message.path:
+ writeInt32(stream, value)
+ if hassource_file(message):
+ writeString(stream, message.source_file, 2)
+ if hasbegin(message):
+ writeInt32(stream, message.begin, 3)
+ if hasfend(message):
+ writeInt32(stream, message.fend, 4)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_GeneratedCodeInfo_Annotation*(stream: ProtobufStream): google_protobuf_GeneratedCodeInfo_Annotation =
+ result = newgoogle_protobuf_GeneratedCodeInfo_Annotation()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.Varint, WireType.LengthDelimited)
+ if wireType == WireType.LengthDelimited:
+ let
+ size = readVarint(stream)
+ start = uint64(getPosition(stream))
+ var consumed = 0'u64
+ while consumed < size:
+ addpath(result, readInt32(stream))
+ consumed = uint64(getPosition(stream)) - start
+ if consumed != size:
+ raise newException(Exception, "packed field size mismatch")
+ else:
+ addpath(result, readInt32(stream))
+ of 2:
+ expectWireType(wireType, WireType.LengthDelimited)
+ setsource_file(result, readString(stream))
+ of 3:
+ expectWireType(wireType, WireType.Varint)
+ setbegin(result, readInt32(stream))
+ of 4:
+ expectWireType(wireType, WireType.Varint)
+ setfend(result, readInt32(stream))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_GeneratedCodeInfo_Annotation): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_GeneratedCodeInfo_Annotation(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_GeneratedCodeInfo_Annotation*(data: string): google_protobuf_GeneratedCodeInfo_Annotation =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_GeneratedCodeInfo_Annotation(pbs)
+
+
+proc newgoogle_protobuf_GeneratedCodeInfo*(): google_protobuf_GeneratedCodeInfo =
+ new(result)
+ result.hasField = initIntSet()
+ result.unknownFields = @[]
+ result.annotation = @[]
+
+proc clearannotation*(message: google_protobuf_GeneratedCodeInfo) =
+ message.annotation = @[]
+ excl(message.hasField, [1])
+
+proc hasannotation*(message: google_protobuf_GeneratedCodeInfo): bool =
+ result = contains(message.hasField, 1) or (len(message.annotation) > 0)
+
+proc setannotation*(message: google_protobuf_GeneratedCodeInfo, value: seq[google_protobuf_GeneratedCodeInfo_Annotation]) =
+ message.annotation = value
+ incl(message.hasField, 1)
+
+proc addannotation*(message: google_protobuf_GeneratedCodeInfo, value: google_protobuf_GeneratedCodeInfo_Annotation) =
+ add(message.annotation, value)
+ incl(message.hasField, 1)
+
+proc annotation*(message: google_protobuf_GeneratedCodeInfo): seq[google_protobuf_GeneratedCodeInfo_Annotation] {.inline.} =
+ message.annotation
+
+proc `annotation=`*(message: google_protobuf_GeneratedCodeInfo, value: seq[google_protobuf_GeneratedCodeInfo_Annotation]) {.inline.} =
+ setannotation(message, value)
+
+proc sizeOfgoogle_protobuf_GeneratedCodeInfo*(message: google_protobuf_GeneratedCodeInfo): uint64 =
+ for value in message.annotation:
+ result = result + sizeOfTag(1, WireType.LengthDelimited)
+ result = result + sizeOfLengthDelimited(sizeOfgoogle_protobuf_GeneratedCodeInfo_Annotation(value))
+
+proc writegoogle_protobuf_GeneratedCodeInfo*(stream: ProtobufStream, message: google_protobuf_GeneratedCodeInfo) =
+ for value in message.annotation:
+ writeMessage(stream, value, 1)
+ writeUnknownFields(stream, message.unknownFields)
+
+proc readgoogle_protobuf_GeneratedCodeInfo*(stream: ProtobufStream): google_protobuf_GeneratedCodeInfo =
+ result = newgoogle_protobuf_GeneratedCodeInfo()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = wireType(tag)
+ case fieldNumber(tag)
+ of 0:
+ raise newException(InvalidFieldNumberError, "Invalid field number: 0")
+ of 1:
+ expectWireType(wireType, WireType.LengthDelimited)
+ let data = readLengthDelimited(stream)
+ addannotation(result, newgoogle_protobuf_GeneratedCodeInfo_Annotation(data))
+ else: readUnknownField(stream, tag, result.unknownFields)
+
+proc serialize*(message: google_protobuf_GeneratedCodeInfo): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writegoogle_protobuf_GeneratedCodeInfo(pbs, message)
+ result = ss.data
+
+proc newgoogle_protobuf_GeneratedCodeInfo*(data: string): google_protobuf_GeneratedCodeInfo =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readgoogle_protobuf_GeneratedCodeInfo(pbs)
+
+
diff --git a/nimpb/compiler/generator.nim b/nimpb/compiler/generator.nim
new file mode 100644
index 0000000..ea3531a
--- /dev/null
+++ b/nimpb/compiler/generator.nim
@@ -0,0 +1,1084 @@
+import algorithm
+import os
+import pegs
+import sequtils
+import sets
+import strformat
+import strutils
+import tables
+
+import descriptor_pb
+
+import ../nimpb
+
+type
+ Names = distinct seq[string]
+
+ Enum = ref object
+ names: Names
+ values: seq[tuple[name: string, number: int]]
+ defaultValue: string
+
+ Field = ref object
+ number: int
+ name: string
+ label: google_protobuf_FieldDescriptorProto_Label
+ ftype: google_protobuf_FieldDescriptorProto_Type
+ typeName: string
+ packed: bool
+ oneof: Oneof
+ mapEntry: Message
+ defaultValue: string
+ message: Message
+ jsonName: string
+
+ Message = ref object
+ names: Names
+ fields: seq[Field]
+ oneofs: seq[Oneof]
+ mapEntry: bool
+ file: ProtoFile
+
+ Oneof = ref object
+ name: string
+ fields: seq[Field]
+
+ ProcessedFile = ref object
+ name: string
+ data: string
+
+ ProtoFile = ref object
+ fdesc: google_protobuf_FileDescriptorProto
+ enums: seq[Enum]
+ messages: seq[Message]
+ syntax: Syntax
+ dependencies: seq[ProtoFile]
+ serviceGenerator: ServiceGenerator
+
+ Syntax {.pure.} = enum
+ Proto2
+ Proto3
+
+ ServiceGenerator* = proc (service: Service): string
+
+ Service* = ref object
+ name*: string
+ package*: string
+ methods*: seq[ServiceMethod]
+
+ ServiceMethod* = ref object
+ name*: string
+ inputType*: string
+ outputType*: string
+ clientStreaming*: bool
+ serverStreaming*: bool
+
+when defined(debug):
+ proc log(msg: string) =
+ stderr.write(msg)
+ stderr.write("\n")
+else:
+ proc log(msg: string) = discard
+
+proc initNamesFromTypeName(typename: string): Names =
+ if typename[0] != '.':
+ raise newException(Exception, "relative names not supported")
+ let parts = split(typename[1..^1], ".")
+ result = Names(parts)
+
+proc `$`(names: Names): string =
+ let n = seq[string](names)
+ result = join(n, "_")
+
+proc add(names: var Names, s: string) =
+ add(seq[string](names), s)
+
+proc `&`(names: Names, s: string): Names =
+ result = names
+ add(result, s)
+
+proc isRepeated(field: Field): bool =
+ result = field.label == google_protobuf_FieldDescriptorProtoLabel.LabelRepeated
+
+proc isMessage(field: Field): bool =
+ result = field.ftype == google_protobuf_FieldDescriptorProtoType.TypeMessage
+
+proc isEnum(field: Field): bool =
+ result = field.ftype == google_protobuf_FieldDescriptorProtoType.TypeEnum
+
+proc isNumeric(field: Field): bool =
+ case field.ftype
+ of google_protobuf_FieldDescriptorProtoType.TypeDouble, google_protobuf_FieldDescriptorProtoType.TypeFloat,
+ google_protobuf_FieldDescriptorProtoType.TypeInt64, google_protobuf_FieldDescriptorProtoType.TypeUInt64,
+ google_protobuf_FieldDescriptorProtoType.TypeInt32, google_protobuf_FieldDescriptorProtoType.TypeFixed64,
+ google_protobuf_FieldDescriptorProtoType.TypeFixed32, google_protobuf_FieldDescriptorProtoType.TypeBool,
+ google_protobuf_FieldDescriptorProtoType.TypeUInt32, google_protobuf_FieldDescriptorProtoType.TypeEnum,
+ google_protobuf_FieldDescriptorProtoType.TypeSFixed32, google_protobuf_FieldDescriptorProtoType.TypeSFixed64,
+ google_protobuf_FieldDescriptorProtoType.TypeSInt32, google_protobuf_FieldDescriptorProtoType.TypeSInt64:
+ result = true
+ else: discard
+
+proc isMapEntry(message: Message): bool =
+ result = message.mapEntry
+
+proc isMapEntry(field: Field): bool =
+ result = field.mapEntry != nil
+
+proc nimTypeName(field: Field): string =
+ case field.ftype
+ of google_protobuf_FieldDescriptorProtoType.TypeDouble: result = "float64"
+ of google_protobuf_FieldDescriptorProtoType.TypeFloat: result = "float32"
+ of google_protobuf_FieldDescriptorProtoType.TypeInt64: result = "int64"
+ of google_protobuf_FieldDescriptorProtoType.TypeUInt64: result = "uint64"
+ of google_protobuf_FieldDescriptorProtoType.TypeInt32: result = "int32"
+ of google_protobuf_FieldDescriptorProtoType.TypeFixed64: result = "uint64"
+ of google_protobuf_FieldDescriptorProtoType.TypeFixed32: result = "uint32"
+ of google_protobuf_FieldDescriptorProtoType.TypeBool: result = "bool"
+ of google_protobuf_FieldDescriptorProtoType.TypeString: result = "string"
+ of google_protobuf_FieldDescriptorProtoType.TypeGroup: result = ""
+ of google_protobuf_FieldDescriptorProtoType.TypeMessage: result = field.typeName
+ of google_protobuf_FieldDescriptorProtoType.TypeBytes: result = "bytes"
+ of google_protobuf_FieldDescriptorProtoType.TypeUInt32: result = "uint32"
+ of google_protobuf_FieldDescriptorProtoType.TypeEnum: result = field.typeName
+ of google_protobuf_FieldDescriptorProtoType.TypeSFixed32: result = "int32"
+ of google_protobuf_FieldDescriptorProtoType.TypeSFixed64: result = "int64"
+ of google_protobuf_FieldDescriptorProtoType.TypeSInt32: result = "int32"
+ of google_protobuf_FieldDescriptorProtoType.TypeSInt64: result = "int64"
+
+proc mapKeyType(field: Field): string =
+ for f in field.mapEntry.fields:
+ if f.name == "key":
+ return f.nimTypeName
+
+proc mapValueField(field: Field): Field =
+ for f in field.mapEntry.fields:
+ if f.name == "value":
+ return f
+
+proc mapValueType(field: Field): string =
+ for f in field.mapEntry.fields:
+ if f.name == "value":
+ return f.nimTypeName
+
+proc `$`(ft: google_protobuf_FieldDescriptorProtoType): string =
+ case ft
+ of google_protobuf_FieldDescriptorProtoType.TypeDouble: result = "Double"
+ of google_protobuf_FieldDescriptorProtoType.TypeFloat: result = "Float"
+ of google_protobuf_FieldDescriptorProtoType.TypeInt64: result = "Int64"
+ of google_protobuf_FieldDescriptorProtoType.TypeUInt64: result = "UInt64"
+ of google_protobuf_FieldDescriptorProtoType.TypeInt32: result = "Int32"
+ of google_protobuf_FieldDescriptorProtoType.TypeFixed64: result = "Fixed64"
+ of google_protobuf_FieldDescriptorProtoType.TypeFixed32: result = "Fixed32"
+ of google_protobuf_FieldDescriptorProtoType.TypeBool: result = "Bool"
+ of google_protobuf_FieldDescriptorProtoType.TypeString: result = "String"
+ of google_protobuf_FieldDescriptorProtoType.TypeGroup: result = "Group"
+ of google_protobuf_FieldDescriptorProtoType.TypeMessage: result = "Message"
+ of google_protobuf_FieldDescriptorProtoType.TypeBytes: result = "Bytes"
+ of google_protobuf_FieldDescriptorProtoType.TypeUInt32: result = "UInt32"
+ of google_protobuf_FieldDescriptorProtoType.TypeEnum: result = "Enum"
+ of google_protobuf_FieldDescriptorProtoType.TypeSFixed32: result = "SFixed32"
+ of google_protobuf_FieldDescriptorProtoType.TypeSFixed64: result = "SFixed64"
+ of google_protobuf_FieldDescriptorProtoType.TypeSInt32: result = "SInt32"
+ of google_protobuf_FieldDescriptorProtoType.TypeSInt64: result = "SInt64"
+
+proc defaultValue(ftype: google_protobuf_FieldDescriptorProto_Type): string =
+ case ftype
+ of google_protobuf_FieldDescriptorProtoType.TypeDouble: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeFloat: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeInt64: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeUInt64: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeInt32: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeFixed64: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeFixed32: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeBool: result = "false"
+ of google_protobuf_FieldDescriptorProtoType.TypeString: result = "\"\""
+ of google_protobuf_FieldDescriptorProtoType.TypeGroup: result = ""
+ of google_protobuf_FieldDescriptorProtoType.TypeMessage: result = "nil"
+ of google_protobuf_FieldDescriptorProtoType.TypeBytes: result = "bytes(\"\")"
+ of google_protobuf_FieldDescriptorProtoType.TypeUInt32: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeEnum: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeSFixed32: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeSFixed64: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeSInt32: result = "0"
+ of google_protobuf_FieldDescriptorProtoType.TypeSInt64: result = "0"
+
+proc findEnum(file: ProtoFile, typeName: string): Enum =
+ for e in file.enums:
+ if $e.names == typeName:
+ return e
+ for dep in file.dependencies:
+ result = findEnum(dep, typeName)
+ if result != nil:
+ break
+
+proc defaultValue(field: Field): string =
+ if field.defaultValue != nil:
+ if isEnum(field):
+ return &"{field.typeName}.{field.defaultValue}"
+ elif field.ftype == google_protobuf_FieldDescriptorProtoType.TypeString:
+ return escape(field.defaultValue)
+ else:
+ return field.defaultValue
+ elif isMapEntry(field):
+ return &"newTable[{field.mapKeyType}, {field.mapValueType}]()"
+ elif isRepeated(field):
+ return "@[]"
+ elif isEnum(field):
+ let e = findEnum(field.message.file, field.typeName)
+ if e != nil:
+ result = e.defaultValue
+ else:
+ result = &"cast[{field.typeName}](0)"
+ else:
+ result = defaultValue(field.ftype)
+
+proc wiretypeStr(field: Field): string =
+ result = "WireType."
+ case field.ftype
+ of google_protobuf_FieldDescriptorProtoType.TypeDouble: result &= "Fixed64"
+ of google_protobuf_FieldDescriptorProtoType.TypeFloat: result &= "Fixed32"
+ of google_protobuf_FieldDescriptorProtoType.TypeInt64: result &= "Varint"
+ of google_protobuf_FieldDescriptorProtoType.TypeUInt64: result &= "Varint"
+ of google_protobuf_FieldDescriptorProtoType.TypeInt32: result &= "Varint"
+ of google_protobuf_FieldDescriptorProtoType.TypeFixed64: result &= "Fixed64"
+ of google_protobuf_FieldDescriptorProtoType.TypeFixed32: result &= "Fixed32"
+ of google_protobuf_FieldDescriptorProtoType.TypeBool: result &= "Varint"
+ of google_protobuf_FieldDescriptorProtoType.TypeString: result &= "LengthDelimited"
+ of google_protobuf_FieldDescriptorProtoType.TypeGroup: result &= ""
+ of google_protobuf_FieldDescriptorProtoType.TypeMessage: result &= "LengthDelimited"
+ of google_protobuf_FieldDescriptorProtoType.TypeBytes: result &= "LengthDelimited"
+ of google_protobuf_FieldDescriptorProtoType.TypeUInt32: result &= "Varint"
+ of google_protobuf_FieldDescriptorProtoType.TypeEnum: result &= &"Varint"
+ of google_protobuf_FieldDescriptorProtoType.TypeSFixed32: result &= "Fixed32"
+ of google_protobuf_FieldDescriptorProtoType.TypeSFixed64: result &= "Fixed64"
+ of google_protobuf_FieldDescriptorProtoType.TypeSInt32: result &= "Varint"
+ of google_protobuf_FieldDescriptorProtoType.TypeSInt64: result &= "Varint"
+
+proc fieldTypeStr(field: Field): string =
+ result = "FieldType." & $field.ftype
+
+proc isKeyword(s: string): bool =
+ case s
+ of "addr", "and", "as", "asm", "bind", "block", "break", "case", "cast",
+ "concept", "const", "continue", "converter", "defer", "discard",
+ "distinct", "div", "do", "elif", "else", "end", "enum", "except",
+ "export", "finally", "for", "from", "func", "if", "import", "in",
+ "include", "interface", "is", "isnot", "iterator", "let", "macro",
+ "method", "mixin", "mod", "nil", "not", "notin", "object", "of", "or",
+ "out", "proc", "ptr", "raise", "ref", "return", "shl", "shr", "static",
+ "template", "try", "tuple", "type", "using", "var", "when", "while",
+ "xor", "yield":
+ result = true
+ else:
+ result = false
+
+proc writeProc(field: Field): string =
+ if isMapEntry(field):
+ result = &"write{field.typeName}KV"
+ elif isMessage(field):
+ result = "writeMessage"
+ elif isEnum(field):
+ result = "writeEnum"
+ else:
+ result = &"write{field.typeName}"
+
+proc readProc(field: Field): string =
+ if isMapEntry(field):
+ result = &"read{field.typeName}KV"
+ elif isEnum(field):
+ result = &"readEnum[{field.typeName}]"
+ else:
+ result = &"read{field.typeName}"
+
+proc sizeOfProc(field: Field): string =
+ if isMapEntry(field):
+ result = &"sizeOf{field.typeName}KV"
+ elif isEnum(field):
+ result = &"sizeOfEnum[{field.typeName}]"
+ else:
+ result = &"sizeOf{field.typeName}"
+
+proc newField(file: ProtoFile, message: Message, desc: google_protobuf_FieldDescriptorProto): Field =
+ new(result)
+
+ result.name = desc.name
+ result.number = desc.number
+ result.label = desc.label
+ result.ftype = desc.ftype
+ result.typeName = ""
+ result.packed = false
+ result.mapEntry = nil
+ result.message = message
+
+ # Identifiers cannot start/end with underscore
+ removePrefix(result.name, '_')
+ removeSuffix(result.name, '_')
+
+ # Consecutive underscores are not allowed
+ result.name = replace(result.name, peg"'_' '_'+", "_")
+
+ if isKeyword(result.name):
+ result.name = "f" & result.name
+
+ if isRepeated(result) and isNumeric(result):
+ if hasOptions(desc):
+ if hasPacked(desc.options):
+ result.packed = desc.options.packed
+ else:
+ result.packed =
+ if file.syntax == Syntax.Proto2:
+ false
+ else:
+ true
+ else:
+ result.packed =
+ if file.syntax == Syntax.Proto2:
+ false
+ else:
+ true
+
+ if hasOneof_index(desc):
+ result.oneof = message.oneofs[desc.oneof_index]
+ add(result.oneof.fields, result)
+
+ if isMessage(result) or isEnum(result):
+ result.typeName = $initNamesFromTypeName(desc.type_name)
+ else:
+ result.typeName = $result.ftype
+
+ if hasDefaultValue(desc):
+ result.defaultValue = desc.default_value
+
+ if hasJsonName(desc):
+ result.jsonName = desc.jsonName
+
+ log(&"newField {result.name} {$result.ftype} {result.typeName} PACKED={result.packed} SYNTAX={file.syntax}")
+
+proc newOneof(name: string): Oneof =
+ new(result)
+ result.fields = @[]
+ result.name = name
+
+proc newMessage(file: ProtoFile, names: Names, desc: google_protobuf_DescriptorProto): Message =
+ new(result)
+
+ result.names = names
+ result.fields = @[]
+ result.oneofs = @[]
+ result.mapEntry = false
+ result.file = file
+
+ if hasOptions(desc) and hasMapEntry(desc.options):
+ result.mapEntry = desc.options.mapEntry
+
+ log(&"newMessage {$result.names}")
+
+ for oneof in desc.oneof_decl:
+ add(result.oneofs, newOneof(oneof.name))
+
+ for field in desc.field:
+ add(result.fields, newField(file, result, field))
+
+proc fixMapEntry(file: ProtoFile, message: Message): bool =
+ for field in message.fields:
+ for msg in file.messages:
+ if $msg.names == field.typeName:
+ if msg.mapEntry:
+ log(&"fixing map {field.name} {msg.names}")
+ field.mapEntry = msg
+ result = true
+
+proc newEnum(names: Names, desc: google_protobuf_EnumDescriptorProto): Enum =
+ new(result)
+
+ result.names = names & desc.name
+ result.values = @[]
+
+ log(&"newEnum {$result.names}")
+
+ for value in desc.value:
+ add(result.values, (value.name, int(value.number)))
+
+ result.defaultValue = &"{result.names}.{result.values[0].name}"
+
+ type EnumValue = tuple[name: string, number: int]
+
+ sort(result.values, proc (x, y: EnumValue): int =
+ system.cmp(x.number, y.number)
+ )
+
+proc newService(service: google_protobuf_ServiceDescriptorProto,
+ file: ProtoFile): Service =
+ new(result)
+ result.name = service.name
+ result.package = file.fdesc.package
+ result.methods = @[]
+
+ for meth in service.fmethod:
+ var m: ServiceMethod
+ new(m)
+
+ m.name = meth.name
+ m.inputType = $initNamesFromTypeName(meth.inputType)
+ m.outputType = $initNamesFromTypeName(meth.outputType)
+ m.clientStreaming = meth.clientStreaming
+ m.serverStreaming = meth.serverStreaming
+
+ add(result.methods, m)
+
+iterator messages(desc: google_protobuf_DescriptorProto, names: Names): tuple[names: Names, desc: google_protobuf_DescriptorProto] =
+ var stack: seq[tuple[names: Names, desc: google_protobuf_DescriptorProto]] = @[]
+
+ for nested in desc.nested_type:
+ add(stack, (names, nested))
+
+ while len(stack) > 0:
+ let (names, submsg) = pop(stack)
+
+ let subnames = names & submsg.name
+ yield (subnames, submsg)
+
+ for desc in submsg.nested_type:
+ add(stack, (subnames, desc))
+
+iterator messages(fdesc: google_protobuf_FileDescriptorProto, names: Names): tuple[names: Names, desc: google_protobuf_DescriptorProto] =
+ for desc in fdesc.message_type:
+ let subnames = names & desc.name
+ yield (subnames, desc)
+
+ for x in messages(desc, subnames):
+ yield x
+
+proc quoteReserved(name: string): string =
+ case name
+ of "type": result = &"`{name}`"
+ else: result = name
+
+proc accessor(field: Field): string =
+ if field.oneof != nil:
+ result = &"{field.oneof.name}.{quoteReserved(field.name)}"
+ else:
+ result = quoteReserved(field.name)
+
+proc dependencies(field: Field): seq[string] =
+ result = @[]
+
+ if isMessage(field) or isEnum(field):
+ add(result, field.typeName)
+
+proc dependencies(message: Message): seq[string] =
+ result = @[]
+
+ for field in message.fields:
+ add(result, dependencies(field))
+
+proc toposort(graph: TableRef[string, HashSet[string]]): seq[string] =
+ type State = enum Unknown, Gray, Black
+
+ var
+ enter = toSeq(keys(graph))
+ state = newTable[string, State]()
+ order: seq[string] = @[]
+
+ proc dfs(node: string) =
+ state[node] = Gray
+ if node in graph:
+ for k in graph[node]:
+ let sk =
+ if k in state:
+ state[k]
+ else:
+ Unknown
+
+ if sk == Gray:
+ # cycle
+ continue
+ elif sk == Black:
+ continue
+
+ let idx = find(enter, k)
+ if idx != -1:
+ delete(enter, idx)
+
+ dfs(k)
+ insert(order, node, 0)
+ state[node] = Black
+
+ while len(enter) > 0:
+ dfs(pop(enter))
+
+ result = order
+
+iterator sortDependencies(messages: seq[Message]): Message =
+ let
+ deps = newTable[string, HashSet[string]]()
+ byname = newTable[string, Message]()
+
+ for message in messages:
+ deps[$message.names] = toSet(dependencies(message))
+ byname[$message.names] = message
+
+ let order = reversed(toposort(deps))
+
+ for name in order:
+ if name in byname:
+ yield byname[name]
+
+proc parseFile(name: string, fdesc: google_protobuf_FileDescriptorProto): ProtoFile =
+ log(&"parsing {name}")
+
+ new(result)
+
+ result.fdesc = fdesc
+ result.messages = @[]
+ result.enums = @[]
+ result.dependencies = @[]
+
+ if hasSyntax(fdesc):
+ if fdesc.syntax == "proto2":
+ result.syntax = Syntax.Proto2
+ elif fdesc.syntax == "proto3":
+ result.syntax = Syntax.Proto3
+ else:
+ raise newException(Exception, "unrecognized syntax: " & fdesc.syntax)
+ else:
+ result.syntax = Syntax.Proto2
+
+ let basename =
+ if hasPackage(fdesc):
+ Names(split(fdesc.package, "."))
+ else:
+ Names(@[])
+
+ for e in fdesc.enum_type:
+ add(result.enums, newEnum(basename, e))
+
+ for name, message in messages(fdesc, basename):
+ add(result.messages, newMessage(result, name, message))
+
+ for e in message.enum_type:
+ add(result.enums, newEnum(name, e))
+
+proc addLine(s: var string, line: string) =
+ if not isNilOrWhitespace(line):
+ s &= line
+ s &= "\n"
+
+iterator genType(e: Enum): string =
+ yield &"{e.names}* {{.pure.}} = enum"
+ for item in e.values:
+ let (name, number) = item
+ yield indent(&"{name} = {number}", 4)
+
+proc fullType(field: Field): string =
+ if isMapEntry(field):
+ result = &"TableRef[{field.mapKeyType}, {field.mapValueType}]"
+ else:
+ result = field.nimTypeName
+ if isRepeated(field):
+ result = &"seq[{result}]"
+
+proc mapKeyField(message: Message): Field =
+ for field in message.fields:
+ if field.name == "key":
+ return field
+
+proc mapValueField(message: Message): Field =
+ for field in message.fields:
+ if field.name == "value":
+ return field
+
+iterator genType(message: Message): string =
+ if not isMapEntry(message):
+ yield &"{message.names}* = ref {message.names}Obj"
+ yield &"{message.names}Obj* = object of RootObj"
+ yield indent(&"hasField: IntSet", 4)
+ yield indent(&"unknownFields: seq[UnknownField]", 4)
+
+ for field in message.fields:
+ if isMapEntry(field):
+ yield indent(&"{field.name}: TableRef[{mapKeyType(field)}, {mapValueType(field)}]", 4)
+ elif field.oneof == nil:
+ yield indent(&"{quoteReserved(field.name)}: {field.fullType}", 4)
+
+ for oneof in message.oneofs:
+ yield indent(&"{oneof.name}: {message.names}_{oneof.name}_OneOf", 4)
+
+ for oneof in message.oneofs:
+ yield ""
+ yield &"{message.names}_{oneof.name}_OneOf* {{.union.}} = object"
+ for field in oneof.fields:
+ yield indent(&"{quoteReserved(field.name)}: {field.fullType}", 4)
+
+iterator genNewMessageProc(msg: Message): string =
+ yield &"proc new{msg.names}*(): {msg.names} ="
+ yield indent("new(result)", 4)
+ yield indent("result.hasField = initIntSet()", 4)
+ yield indent("result.unknownFields = @[]", 4)
+ for field in msg.fields:
+ yield indent(&"result.{field.accessor} = {defaultValue(field)}", 4)
+ yield ""
+
+iterator oneofSiblings(field: Field): Field =
+ if field.oneof != nil:
+ for sibling in field.oneof.fields:
+ if sibling == field:
+ continue
+ yield sibling
+
+iterator genClearFieldProc(msg: Message, field: Field): string =
+ yield &"proc clear{field.name}*(message: {msg.names}) ="
+ yield indent(&"message.{field.accessor} = {defaultValue(field)}", 4)
+ var numbers: seq[int] = @[field.number]
+ for sibling in oneofSiblings(field):
+ add(numbers, sibling.number)
+ yield indent(&"excl(message.hasField, [{join(numbers, \", \")}])", 4)
+ yield ""
+
+iterator genHasFieldProc(msg: Message, field: Field): string =
+ yield &"proc has{field.name}*(message: {msg.names}): bool ="
+ var check = indent(&"result = contains(message.hasField, {field.number})", 4)
+ if isRepeated(field) or isMapEntry(field):
+ check = &"{check} or (len(message.{field.accessor}) > 0)"
+ yield check
+ yield ""
+
+iterator genSetFieldProc(msg: Message, field: Field): string =
+ yield &"proc set{field.name}*(message: {msg.names}, value: {field.fullType}) ="
+ yield indent(&"message.{field.accessor} = value", 4)
+ yield indent(&"incl(message.hasField, {field.number})", 4)
+ var numbers: seq[int] = @[]
+ for sibling in oneofSiblings(field):
+ add(numbers, sibling.number)
+ if len(numbers) > 0:
+ yield indent(&"excl(message.hasField, [{join(numbers, \", \")}])", 4)
+ yield ""
+
+iterator genAddToFieldProc(msg: Message, field: Field): string =
+ yield &"proc add{field.name}*(message: {msg.names}, value: {field.nimTypeName}) ="
+ yield indent(&"add(message.{field.name}, value)", 4)
+ yield indent(&"incl(message.hasField, {field.number})", 4)
+ yield ""
+
+iterator genFieldAccessorProcs(msg: Message, field: Field): string =
+ yield &"proc {quoteReserved(field.name)}*(message: {msg.names}): {field.fullType} {{.inline.}} ="
+ yield indent(&"message.{field.accessor}", 4)
+ yield ""
+
+ yield &"proc `{field.name}=`*(message: {msg.names}, value: {field.fullType}) {{.inline.}} ="
+ yield indent(&"set{field.name}(message, value)", 4)
+ yield ""
+
+iterator genWriteMapKVProc(msg: Message): string =
+ let
+ key = mapKeyField(msg)
+ value = mapValueField(msg)
+
+ yield &"proc write{msg.names}KV(stream: ProtobufStream, key: {key.fullType}, value: {value.fullType}) ="
+ yield indent(&"{key.writeProc}(stream, key, {key.number})", 4)
+ yield indent(&"{value.writeProc}(stream, value, {value.number})", 4)
+ yield ""
+
+iterator genWriteMessageProc(msg: Message): string =
+ yield &"proc write{msg.names}*(stream: ProtobufStream, message: {msg.names}) ="
+
+ for field in msg.fields:
+ if isMapEntry(field):
+ yield indent(&"for key, value in message.{field.name}:", 4)
+ yield indent(&"writeTag(stream, {field.number}, {wiretypeStr(field)})", 8)
+ yield indent(&"writeVarint(stream, {field.sizeOfProc}(key, value))", 8)
+ yield indent(&"{field.writeProc}(stream, key, value)", 8)
+ elif isRepeated(field):
+ if field.packed:
+ yield indent(&"if has{field.name}(message):", 4)
+ yield indent(&"writeTag(stream, {field.number}, WireType.LengthDelimited)", 8)
+ yield indent(&"writeVarint(stream, packedFieldSize(message.{field.name}, {field.fieldTypeStr}))", 8)
+ yield indent(&"for value in message.{field.name}:", 8)
+ yield indent(&"{field.writeProc}(stream, value)", 12)
+ else:
+ yield indent(&"for value in message.{field.name}:", 4)
+ yield indent(&"{field.writeProc}(stream, value, {field.number})", 8)
+ else:
+ yield indent(&"if has{field.name}(message):", 4)
+ yield indent(&"{field.writeProc}(stream, message.{field.accessor}, {field.number})", 8)
+
+ yield indent("writeUnknownFields(stream, message.unknownFields)", 4)
+
+ yield ""
+
+iterator genReadMapKVProc(msg: Message): string =
+ let
+ key = mapKeyField(msg)
+ value = mapValueField(msg)
+
+ yield &"proc read{msg.names}KV(stream: ProtobufStream, tbl: TableRef[{key.fullType}, {value.fullType}]) ="
+
+ yield indent(&"var", 4)
+ yield indent(&"key: {key.fullType}", 8)
+ yield indent("gotKey = false", 8)
+ yield indent(&"value: {value.fullType}", 8)
+ yield indent("gotValue = false", 8)
+ yield indent("while not atEnd(stream):", 4)
+ yield indent("let", 8)
+ yield indent("tag = readTag(stream)", 12)
+ yield indent("wireType = wireType(tag)", 12)
+ yield indent("case fieldNumber(tag)", 8)
+ yield indent(&"of {key.number}:", 8)
+ yield indent(&"key = {key.readProc}(stream)", 12)
+ yield indent("gotKey = true", 12)
+ yield indent(&"of {value.number}:", 8)
+ if isMessage(value):
+ yield indent("let", 12)
+ yield indent("size = readVarint(stream)", 16)
+ yield indent("data = safeReadStr(stream, int(size))", 16)
+ yield indent("pbs = newProtobufStream(newStringStream(data))", 16)
+ yield indent(&"value = {value.readProc}(pbs)", 12)
+ else:
+ yield indent(&"value = {value.readProc}(stream)", 12)
+ yield indent("gotValue = true", 12)
+ yield indent("else: skipField(stream, wireType)", 8)
+ yield indent("if not gotKey:", 4)
+ yield indent(&"raise newException(Exception, \"missing key\")", 8)
+ yield indent("if not gotValue:", 4)
+ yield indent(&"raise newException(Exception, \"missing value\")", 8)
+ yield indent("tbl[key] = value", 4)
+ yield ""
+
+iterator genReadMessageProc(msg: Message): string =
+ yield &"proc read{msg.names}*(stream: ProtobufStream): {msg.names} ="
+ yield indent(&"result = new{msg.names}()", 4)
+ yield indent("while not atEnd(stream):", 4)
+ yield indent("let", 8)
+ yield indent("tag = readTag(stream)", 12)
+ yield indent("wireType = wireType(tag)", 12)
+ yield indent("case fieldNumber(tag)", 8)
+ yield indent("of 0:", 8)
+ yield indent("raise newException(InvalidFieldNumberError, \"Invalid field number: 0\")", 12)
+ for field in msg.fields:
+ let
+ setter =
+ if isRepeated(field):
+ &"add{field.name}"
+ else:
+ &"set{field.name}"
+ yield indent(&"of {field.number}:", 8)
+ if isRepeated(field):
+ if isMapEntry(field):
+ yield indent(&"expectWireType(wireType, {field.wiretypeStr})", 12)
+ yield indent("let", 12)
+ yield indent("size = readVarint(stream)", 16)
+ yield indent("data = safeReadStr(stream, int(size))", 16)
+ yield indent("pbs = newProtobufStream(newStringStream(data))", 16)
+ yield indent(&"{field.readProc}(pbs, result.{field.name})", 12)
+ elif isNumeric(field):
+ yield indent(&"expectWireType(wireType, {field.wiretypeStr}, WireType.LengthDelimited)", 12)
+ yield indent("if wireType == WireType.LengthDelimited:", 12)
+ yield indent("let", 16)
+ yield indent("size = readVarint(stream)", 20)
+ yield indent("start = uint64(getPosition(stream))", 20)
+ yield indent("var consumed = 0'u64", 16)
+ yield indent("while consumed < size:", 16)
+ yield indent(&"{setter}(result, {field.readProc}(stream))", 20)
+ yield indent("consumed = uint64(getPosition(stream)) - start", 20)
+ yield indent("if consumed != size:", 16)
+ yield indent("raise newException(Exception, \"packed field size mismatch\")", 20)
+ yield indent("else:", 12)
+ yield indent(&"{setter}(result, {field.readProc}(stream))", 16)
+ elif isMessage(field):
+ yield indent(&"expectWireType(wireType, {field.wiretypeStr})", 12)
+ yield indent(&"let data = readLengthDelimited(stream)", 12)
+ yield indent(&"{setter}(result, new{field.typeName}(data))", 12)
+ else:
+ yield indent(&"expectWireType(wireType, {field.wiretypeStr})", 12)
+ yield indent(&"{setter}(result, {field.readProc}(stream))", 12)
+ else:
+ yield indent(&"expectWireType(wireType, {field.wiretypeStr})", 12)
+ if isMessage(field):
+ yield indent("let data = readLengthDelimited(stream)", 12)
+ yield indent(&"{setter}(result, new{field.typeName}(data))", 12)
+ else:
+ yield indent(&"{setter}(result, {field.readProc}(stream))", 12)
+ yield indent("else: readUnknownField(stream, tag, result.unknownFields)", 8)
+ yield ""
+
+iterator genSizeOfMapKVProc(message: Message): string =
+ let
+ key = mapKeyField(message)
+ value = mapValueField(message)
+
+ yield &"proc sizeOf{message.names}KV(key: {key.fullType}, value: {value.fullType}): uint64 ="
+
+ # Key (cannot be message or other complex field)
+ yield indent(&"result = result + sizeOfTag({key.number}, {key.wiretypeStr})", 4)
+ yield indent(&"result = result + {key.sizeOfProc}(key)", 4)
+
+ # Value
+ yield indent(&"result = result + sizeOfTag({value.number}, {value.wiretypeStr})", 4)
+ if isMessage(value):
+ yield indent(&"result = result + sizeOfLengthDelimited({value.sizeOfProc}(value))", 4)
+ else:
+ yield indent(&"result = result + {value.sizeOfProc}(value)", 4)
+
+ yield ""
+
+iterator genSizeOfMessageProc(msg: Message): string =
+ yield &"proc sizeOf{msg.names}*(message: {msg.names}): uint64 ="
+ for field in msg.fields:
+ if isMapEntry(field):
+ yield indent(&"if has{field.name}(message):", 4)
+ yield indent(&"var sizeOfKV = 0'u64", 8)
+ yield indent(&"for key, value in message.{field.name}:", 8)
+ yield indent(&"sizeOfKV = sizeOfKV + {field.sizeOfProc}(key, value)", 12)
+ yield indent(&"result = result + sizeOfTag({field.number}, {field.wiretypeStr})", 8)
+ yield indent(&"result = result + sizeOfLengthDelimited(sizeOfKV)", 8)
+ elif isRepeated(field):
+ if isNumeric(field):
+ yield indent(&"if has{field.name}(message):", 4)
+ yield indent(&"result = result + sizeOfTag({field.number}, WireType.LengthDelimited)", 8)
+ yield indent(&"result = result + sizeOfLengthDelimited(packedFieldSize(message.{field.name}, {field.fieldTypeStr}))", 8)
+ else:
+ yield indent(&"for value in message.{field.name}:", 4)
+ yield indent(&"result = result + sizeOfTag({field.number}, {field.wiretypeStr})", 8)
+ if isMessage(field):
+ yield indent(&"result = result + sizeOfLengthDelimited({field.sizeOfProc}(value))", 8)
+ else:
+ yield indent(&"result = result + {field.sizeOfProc}(value)", 8)
+ else:
+ yield indent(&"if has{field.name}(message):", 4)
+ yield indent(&"result = result + sizeOfTag({field.number}, {field.wiretypeStr})", 8)
+ if isMessage(field):
+ yield indent(&"result = result + sizeOfLengthDelimited({field.sizeOfProc}(message.{field.accessor}))", 8)
+ else:
+ yield indent(&"result = result + {field.sizeOfProc}(message.{field.accessor})", 8)
+
+ yield indent("for field in message.unknownFields:", 4)
+ yield indent("result = result + sizeOfUnknownField(field)", 8)
+
+ yield ""
+
+proc shouldGenerateJsonProcs(typeName: string): bool =
+ const wktsHavingCustomProcs = [
+ "google_protobuf_Any",
+ "google_protobuf_BoolValue",
+ "google_protobuf_BytesValue",
+ "google_protobuf_DoubleValue",
+ "google_protobuf_Duration",
+ "google_protobuf_FieldMask",
+ "google_protobuf_FloatValue",
+ "google_protobuf_Int32Value",
+ "google_protobuf_Int64Value",
+ "google_protobuf_ListValue",
+ "google_protobuf_NullValue",
+ "google_protobuf_StringValue",
+ "google_protobuf_Struct",
+ "google_protobuf_Timestamp",
+ "google_protobuf_UInt32Value",
+ "google_protobuf_UInt64Value",
+ "google_protobuf_Value",
+ ]
+
+ return typeName notin wktsHavingCustomProcs
+
+iterator genMessageToJsonProc(msg: Message): string =
+ yield &"proc toJson*(message: {msg.names}): JsonNode ="
+ yield indent("result = newJObject()", 4)
+
+ proc fieldToJson(field: Field, v: string): string =
+ case field.ftype
+ of google_protobuf_FieldDescriptorProto_Type.TypeMessage,
+ google_protobuf_FieldDescriptorProto_Type.TypeInt64,
+ google_protobuf_FieldDescriptorProto_Type.TypeUInt64,
+ google_protobuf_FieldDescriptorProto_Type.TypeSFixed64,
+ google_protobuf_FieldDescriptorProto_Type.TypeFixed64,
+ google_protobuf_FieldDescriptorProto_Type.TypeDouble,
+ google_protobuf_FieldDescriptorProto_Type.TypeFloat:
+ result = &"toJson({v})"
+ of google_protobuf_FieldDescriptorProto_Type.TypeEnum:
+ result = &"%(${v})"
+ else:
+ result = &"%{v}"
+
+ for field in msg.fields:
+ yield indent(&"if has{field.name}(message):", 4)
+ if isMapEntry(field):
+ yield indent("let obj = newJObject()", 8)
+ yield indent(&"for key, value in message.{field.name}:", 8)
+ let f = mapValueField(field)
+ let j = fieldToJson(f, "value")
+ yield indent(&"obj[$key] = {j}", 12)
+ yield indent(&"result[\"{field.jsonName}\"] = obj", 8)
+ elif isRepeated(field):
+ yield indent(&"let arr = newJArray()", 8)
+ yield indent(&"for value in message.{field.name}:", 8)
+ let v = fieldToJson(field, "value")
+ yield indent(&"add(arr, {v})", 12)
+ yield indent(&"result[\"{field.jsonName}\"] = arr", 8)
+ else:
+ let v = fieldToJson(field, &"message.{field.name}")
+ yield indent(&"result[\"{field.jsonName}\"] = {v}", 8)
+
+ yield ""
+
+iterator genMessageProcForwards(msg: Message): string =
+ # TODO: can we be more intelligent and only forward declare the minimum set
+ # of procs?
+ if not isMapEntry(msg):
+ yield &"proc new{msg.names}*(): {msg.names}"
+ yield &"proc new{msg.names}*(data: string): {msg.names}"
+ yield &"proc write{msg.names}*(stream: ProtobufStream, message: {msg.names})"
+ yield &"proc read{msg.names}*(stream: ProtobufStream): {msg.names}"
+ yield &"proc sizeOf{msg.names}*(message: {msg.names}): uint64"
+ if shouldGenerateJsonProcs($msg.names):
+ yield &"proc toJson*(message: {msg.names}): JsonNode"
+ else:
+ let
+ key = mapKeyField(msg)
+ value = mapValueField(msg)
+
+ yield &"proc write{msg.names}KV(stream: ProtobufStream, key: {key.fullType}, value: {value.fullType})"
+ yield &"proc read{msg.names}KV(stream: ProtobufStream, tbl: TableRef[{key.fullType}, {value.fullType}])"
+ yield &"proc sizeOf{msg.names}KV(key: {key.fullType}, value: {value.fullType}): uint64"
+
+iterator genProcs(msg: Message): string =
+ if isMapEntry(msg):
+ for line in genSizeOfMapKVProc(msg): yield line
+ for line in genWriteMapKVProc(msg): yield line
+ for line in genReadMapKVProc(msg): yield line
+ else:
+ for line in genNewMessageProc(msg): yield line
+
+ for field in msg.fields:
+ for line in genClearFieldProc(msg, field): yield line
+ for line in genHasFieldProc(msg, field): yield line
+ for line in genSetFieldProc(msg, field): yield line
+
+ if isRepeated(field) and not isMapEntry(field):
+ for line in genAddToFieldProc(msg, field): yield line
+
+ for line in genFieldAccessorProcs(msg, field): yield line
+
+ for line in genSizeOfMessageProc(msg): yield line
+ for line in genWriteMessageProc(msg): yield line
+ for line in genReadMessageProc(msg): yield line
+
+ if shouldGenerateJsonProcs($msg.names):
+ for line in genMessageToJsonProc(msg): yield line
+
+ yield &"proc serialize*(message: {msg.names}): string ="
+ yield indent("let", 4)
+ yield indent("ss = newStringStream()", 8)
+ yield indent("pbs = newProtobufStream(ss)", 8)
+ yield indent(&"write{msg.names}(pbs, message)", 4)
+ yield indent("result = ss.data", 4)
+ yield ""
+
+ yield &"proc new{msg.names}*(data: string): {msg.names} ="
+ yield indent("let", 4)
+ yield indent("ss = newStringStream(data)", 8)
+ yield indent("pbs = newProtobufStream(ss)", 8)
+ yield indent(&"result = read{msg.names}(pbs)", 4)
+ yield ""
+
+proc processFile(fdesc: google_protobuf_FileDescriptorProto,
+ otherFiles: TableRef[string, ProtoFile],
+ serviceGenerator: ServiceGenerator): ProcessedFile =
+ var (dir, name, _) = splitFile(fdesc.name)
+ var pbfilename = (dir / name) & "_pb.nim"
+
+ log(&"processing {fdesc.name}: {pbfilename}")
+
+ new(result)
+ result.name = pbfilename
+ result.data = ""
+
+ let parsed = parseFile(fdesc.name, fdesc)
+
+ for dep in fdesc.dependency:
+ if dep in otherFiles:
+ add(parsed.dependencies, otherFiles[dep])
+
+ var hasMaps = false
+ for message in parsed.messages:
+ let tmp = fixMapEntry(parsed, message)
+ if tmp:
+ hasMaps = true
+
+ addLine(result.data, "# Generated by protoc_gen_nim. Do not edit!")
+ addLine(result.data, "")
+ addLine(result.data, "import base64")
+ addLine(result.data, "import intsets")
+ addLine(result.data, "import json")
+ if hasMaps:
+ addLine(result.data, "import tables")
+ addLine(result.data, "export tables")
+ addLine(result.data, "")
+ addLine(result.data, "import nimpb/nimpb")
+ addLine(result.data, "import nimpb/json as nimpb_json")
+ addLine(result.data, "")
+
+ for dep in fdesc.dependency:
+ var (dir, depname, _) = splitFile(dep)
+
+ if dir == "google/protobuf":
+ dir = "nimpb/wkt"
+
+ var deppbname = (dir / depname) & "_pb"
+ addLine(result.data, &"import {deppbname}")
+
+ if hasDependency(fdesc):
+ addLine(result.data, "")
+
+ addLine(result.data, "type")
+
+ for e in parsed.enums:
+ for line in genType(e): addLine(result.data, indent(line, 4))
+
+ for message in parsed.messages:
+ for line in genType(message): addLine(result.data, indent(line, 4))
+
+ addLine(result.data, "")
+
+ for message in sortDependencies(parsed.messages):
+ for line in genMessageProcForwards(message):
+ addLine(result.data, line)
+ addLine(result.data, "")
+
+ for message in sortDependencies(parsed.messages):
+ for line in genProcs(message):
+ addLine(result.data, line)
+ addLine(result.data, "")
+
+ if serviceGenerator != nil:
+ for serviceDesc in fdesc.service:
+ let service = newService(serviceDesc, parsed)
+ addLine(result.data, "")
+ add(result.data, serviceGenerator(service))
+
+proc processFileDescriptorSet*(filename: string,
+ outdir: string,
+ protos: openArray[string],
+ serviceGenerator: ServiceGenerator) =
+ let s = newProtobufStream(newFileStream(filename, fmRead))
+
+ let fileSet = readgoogle_protobuf_FileDescriptorSet(s)
+
+ var otherFiles = newTable[string, ProtoFile]()
+
+ for file in fileSet.file:
+ add(otherFiles, file.name, parseFile(file.name, file))
+
+ # Protoc does not provide full paths for files in FileDescriptorSet. So it
+ # can be that fileSet.file.name might match any file in protos. So we will
+ # try to match the bare name and the named joined with the path of the first
+ # file.
+ let basePath = parentDir(protos[0])
+
+ for file in fileSet.file:
+ if (file.name in protos) or ((basePath / file.name) in protos):
+ let processedFile = processFile(file, otherFiles, serviceGenerator)
+
+ let fullPath = outdir / processedFile.name
+
+ createDir(parentDir(fullPath))
+
+ writeFile(fullPath, processedFile.data)
diff --git a/nimpb/compiler/nimpb_build.nim b/nimpb/compiler/nimpb_build.nim
new file mode 100644
index 0000000..1abb3f3
--- /dev/null
+++ b/nimpb/compiler/nimpb_build.nim
@@ -0,0 +1,44 @@
+import os
+import osproc
+import strformat
+import strutils
+
+import compiler
+
+proc usage() {.noreturn.} =
+ echo(&"""
+{getAppFilename()} --out=OUTDIR [-IPATH [-IPATH]...] PROTOFILE...
+
+ --out The output directory for the generated files
+ -I Add a path to the set of include paths
+""")
+ quit(QuitFailure)
+
+var includes: seq[string] = @[]
+var protos: seq[string] = @[]
+var outdir: string
+
+if paramCount() == 0:
+ usage()
+
+for idx in 1..paramCount():
+ let param = paramStr(idx)
+
+ if param.startsWith("-I"):
+ add(includes, param[2..^1])
+ elif param.startsWith("--out="):
+ outdir = param[6..^1]
+ elif param == "--help":
+ usage()
+ else:
+ add(protos, param)
+
+if outdir == nil:
+ echo("error: --out is required")
+ quit(QuitFailure)
+
+if len(protos) == 0:
+ echo("error: no input files")
+ quit(QuitFailure)
+
+compileProtos(protos, includes, outdir)
diff --git a/src/nimpb/json.nim b/nimpb/json.nim
index 28cd0f5..28cd0f5 100644
--- a/src/nimpb/json.nim
+++ b/nimpb/json.nim
diff --git a/src/nimpb/nimpb.nim b/nimpb/nimpb.nim
index 4363c7d..4363c7d 100644
--- a/src/nimpb/nimpb.nim
+++ b/nimpb/nimpb.nim
diff --git a/src/nimpb/wkt/any_pb.nim b/nimpb/wkt/any_pb.nim
index aa6f56c..f7613e0 100644
--- a/src/nimpb/wkt/any_pb.nim
+++ b/nimpb/wkt/any_pb.nim
@@ -5,7 +5,6 @@ import intsets
import json
import nimpb/nimpb
-import nimpb/json as nimpb_json
type
google_protobuf_Any* = ref google_protobuf_AnyObj
diff --git a/src/nimpb/wkt/api_pb.nim b/nimpb/wkt/api_pb.nim
index 28f5b2b..28f5b2b 100644
--- a/src/nimpb/wkt/api_pb.nim
+++ b/nimpb/wkt/api_pb.nim
diff --git a/src/nimpb/wkt/duration_pb.nim b/nimpb/wkt/duration_pb.nim
index d15aeee..d15aeee 100644
--- a/src/nimpb/wkt/duration_pb.nim
+++ b/nimpb/wkt/duration_pb.nim
diff --git a/src/nimpb/wkt/empty_pb.nim b/nimpb/wkt/empty_pb.nim
index c53cb03..c53cb03 100644
--- a/src/nimpb/wkt/empty_pb.nim
+++ b/nimpb/wkt/empty_pb.nim
diff --git a/src/nimpb/wkt/field_mask_pb.nim b/nimpb/wkt/field_mask_pb.nim
index e925416..e925416 100644
--- a/src/nimpb/wkt/field_mask_pb.nim
+++ b/nimpb/wkt/field_mask_pb.nim
diff --git a/src/nimpb/wkt/source_context_pb.nim b/nimpb/wkt/source_context_pb.nim
index 815da98..815da98 100644
--- a/src/nimpb/wkt/source_context_pb.nim
+++ b/nimpb/wkt/source_context_pb.nim
diff --git a/src/nimpb/wkt/struct_pb.nim b/nimpb/wkt/struct_pb.nim
index 2a38f6d..2a38f6d 100644
--- a/src/nimpb/wkt/struct_pb.nim
+++ b/nimpb/wkt/struct_pb.nim
diff --git a/src/nimpb/wkt/timestamp_pb.nim b/nimpb/wkt/timestamp_pb.nim
index 5f00154..5f00154 100644
--- a/src/nimpb/wkt/timestamp_pb.nim
+++ b/nimpb/wkt/timestamp_pb.nim
diff --git a/src/nimpb/wkt/type_pb.nim b/nimpb/wkt/type_pb.nim
index efb7d26..efb7d26 100644
--- a/src/nimpb/wkt/type_pb.nim
+++ b/nimpb/wkt/type_pb.nim
diff --git a/src/nimpb/wkt/wrappers_pb.nim b/nimpb/wkt/wrappers_pb.nim
index d1b5f80..d1b5f80 100644
--- a/src/nimpb/wkt/wrappers_pb.nim
+++ b/nimpb/wkt/wrappers_pb.nim
diff --git a/tests/nim.cfg b/tests/nim.cfg
index a119208..0f840a1 100644
--- a/tests/nim.cfg
+++ b/tests/nim.cfg
@@ -1 +1 @@
---path:"../src"
+--path:".."