diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2018-04-30 21:38:22 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2018-04-30 21:38:22 +0300 |
| commit | ee952098da537187d011a135e23b079756480f6f (patch) | |
| tree | 82915e40aa617e5a97bcb9607c1666357a12de8c | |
| parent | 59654d7c4955114732fe911b016961d780bf8393 (diff) | |
| download | nimpb-ee952098da537187d011a135e23b079756480f6f.tar.gz nimpb-ee952098da537187d011a135e23b079756480f6f.zip | |
First try at somewhat working Any
Now users can register their own types to work with Any. WKT's are automatically
registered. User messages can be packed into an Any and unpacked from an Any.
Then there's support for converting Any to/from JSON with user types and WKT's.
The conformance test suite looks always better and better:
Required.Proto3.JsonInput.Int32FieldLeadingZero
Required.Proto3.JsonInput.Int32FieldNegativeWithLeadingZero
Required.Proto3.JsonInput.Struct.ProtobufOutput
Required.Proto3.JsonInput.Uint64FieldMaxValueNotQuoted.JsonOutput
Required.Proto3.JsonInput.Uint64FieldMaxValueNotQuoted.ProtobufOutput
Required.Proto3.JsonInput.ValueAcceptNull.JsonOutput
Required.Proto3.JsonInput.ValueAcceptNull.ProtobufOutput
Required.Proto3.ProtobufInput.RepeatedScalarSelectsLast.DOUBLE.JsonOutput
Required.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.JsonOutput
CONFORMANCE SUITE FAILED: 594 successes, 194 skipped, 0 expected failures, 9
unexpected failures.
| -rw-r--r-- | nimpb/compiler/generator.nim | 21 | ||||
| -rw-r--r-- | nimpb/nimpb.nim | 8 | ||||
| -rw-r--r-- | nimpb/wkt/any.nim | 292 | ||||
| -rw-r--r-- | nimpb/wkt/any_pb.nim | 10 | ||||
| -rw-r--r-- | nimpb/wkt/api_pb.nim | 42 | ||||
| -rw-r--r-- | nimpb/wkt/descriptor_pb.nim | 270 | ||||
| -rw-r--r-- | nimpb/wkt/duration.nim | 3 | ||||
| -rw-r--r-- | nimpb/wkt/duration_pb.nim | 10 | ||||
| -rw-r--r-- | nimpb/wkt/empty_pb.nim | 14 | ||||
| -rw-r--r-- | nimpb/wkt/field_mask.nim | 3 | ||||
| -rw-r--r-- | nimpb/wkt/field_mask_pb.nim | 10 | ||||
| -rw-r--r-- | nimpb/wkt/source_context_pb.nim | 14 | ||||
| -rw-r--r-- | nimpb/wkt/struct.nim | 6 | ||||
| -rw-r--r-- | nimpb/wkt/struct_pb.nim | 30 | ||||
| -rw-r--r-- | nimpb/wkt/timestamp.nim | 3 | ||||
| -rw-r--r-- | nimpb/wkt/timestamp_pb.nim | 10 | ||||
| -rw-r--r-- | nimpb/wkt/type_pb.nim | 70 | ||||
| -rw-r--r-- | nimpb/wkt/utils.nim | 11 | ||||
| -rw-r--r-- | nimpb/wkt/wrappers.nim | 11 | ||||
| -rw-r--r-- | nimpb/wkt/wrappers_pb.nim | 90 | ||||
| -rw-r--r-- | tests/conformance/conformance_nim.nim | 3 |
21 files changed, 897 insertions, 34 deletions
diff --git a/nimpb/compiler/generator.nim b/nimpb/compiler/generator.nim index 83ef893..7590bde 100644 --- a/nimpb/compiler/generator.nim +++ b/nimpb/compiler/generator.nim @@ -685,6 +685,7 @@ iterator genNewMessageProc(msg: Message): string = yield &"proc new{msg.names}*(): {msg.names} =" yield indent("new(result)", 4) yield indent("initMessage(result[])", 4) + yield indent(&"result.procs = {msg.names}Procs()", 4) for field in msg.fields: if field.oneof == nil: yield indent(&"result.{field.accessor} = {defaultValue(field)}", 4) @@ -1125,12 +1126,32 @@ iterator genMessageProcForwards(msg: Message): string = yield &"proc read{msg.names}KV(stream: Stream, tbl: TableRef[{key.fullType}, {value.fullType}])" yield &"proc sizeOf{msg.names}KV(key: {key.fullType}, value: {value.fullType}): uint64" +iterator genMessageProcImpls(msg: Message): string = + yield &"proc read{msg.names}Impl(stream: Stream): Message = read{msg.names}(stream)" + yield &"proc write{msg.names}Impl(stream: Stream, msg: Message) = write{msg.names}(stream, {msg.names}(msg))" + if msg.file.syntax == Syntax.Proto3 and shouldGenerateJsonProcs($msg.names): + yield &"proc toJson{msg.names}Impl(msg: Message): JsonNode = toJson({msg.names}(msg))" + yield &"proc fromJson{msg.names}Impl(node: JsonNode): Message = parse{msg.names}(node)" + yield "" + yield &"proc {msg.names}Procs*(): MessageProcs =" + yield &" result.readImpl = read{msg.names}Impl" + yield &" result.writeImpl = write{msg.names}Impl" + if msg.file.syntax == Syntax.Proto3 and shouldGenerateJsonProcs($msg.names): + yield &" result.toJsonImpl = toJson{msg.names}Impl" + yield &" result.fromJsonImpl = fromJson{msg.names}Impl" + yield "" + 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: + yield &"proc fullyQualifiedName*(T: typedesc[{msg.names}]): string = \"{join(seq[string](msg.names), \".\")}\"" + yield "" + + for line in genMessageProcImpls(msg): yield line + for line in genNewMessageProc(msg): yield line for field in msg.fields: diff --git a/nimpb/nimpb.nim b/nimpb/nimpb.nim index f00bc87..228ac35 100644 --- a/nimpb/nimpb.nim +++ b/nimpb/nimpb.nim @@ -1,5 +1,6 @@ import endians import intsets +import std/json import macros import streams import strutils @@ -67,6 +68,13 @@ type MessageObj* = object of RootObj hasField: IntSet unknownFields: seq[UnknownField] + procs*: MessageProcs + + MessageProcs* = object + readImpl*: proc (stream: Stream): Message + writeImpl*: proc (stream: Stream, msg: Message) + toJsonImpl*: proc (msg: Message): JsonNode + fromJsonImpl*: proc (node: JsonNode): Message proc wiretype*(ft: FieldType): WireType = case ft diff --git a/nimpb/wkt/any.nim b/nimpb/wkt/any.nim index 6cf40a7..768a8d4 100644 --- a/nimpb/wkt/any.nim +++ b/nimpb/wkt/any.nim @@ -1,52 +1,276 @@ import json +import tables import duration +import empty_pb import field_mask import struct import timestamp +import wrappers include any_pb +import utils -proc toJson*(message: google_protobuf_Any): JsonNode = - case message.typeUrl - of "type.googleapis.com/google.protobuf.Duration": - let duration = newGoogleProtobufDuration(message.value) - result = newJObject() - result["@type"] = %message.typeUrl +var + typeRegistry = newTable[string, MessageProcs]() + +proc registerType*(prefix, typeName: string, procs: MessageProcs) = + ## Register message procs to the type registry. + ## + ## The type registry associates a type url with message procs. The type url + ## is constructed from the prefix and typeName by joining them with a + ## forward slash. + typeRegistry[prefix & "/" & typeName] = procs + +template registerType*(T: typedesc) = + ## Register a type to the type registry. + ## + ## This is a convenience template around the registerType() proc. The prefix + ## used is "type.googleapis.com". + var procs = `T Procs`() + registerType("type.googleapis.com", fullyQualifiedName(T), procs) + +template registerType*(prefix: string, T: typedesc) = + ## Register a type to the type registry with a custom prefix. + var procs = `T Procs`() + registerType(prefix, fullyQualifiedName(T), procs) + +template pack*(msg: typed): google_protobuf_Any = + ## Pack a message into an Any. + var + any = newgoogle_protobuf_Any() + any.typeUrl = "type.googleapis.com/" & fullyQualifiedName(type(msg)) + any.value = cast[seq[byte]](serialize(msg)) + any + +template pack*(msg: typed, prefix: string): google_protobuf_Any = + ## Pack a message into an Any with a custom prefix. + var + any = newgoogle_protobuf_Any() + any.typeUrl = prefix & "/" & fullyQualifiedName(type(msg)) + any.value = cast[seq[byte]](serialize(msg)) + any + +proc unpack*(src: google_protobuf_Any): Message = + ## Unpack an Any into a message based on the typeUrl of the Any. + ## + ## The typeUrl must exist in the type registry. + if src.typeUrl notin typeRegistry: + raise newException(KeyError, "unknown type url: " & src.typeUrl) + + let + procs = typeRegistry[src.typeUrl] + ss = newStringStream(cast[string](src.value)) + + result = procs.readImpl(ss) + +proc getTypenameFromTypeUrl*(typeUrl: string): string = + ## Extract the type name from a type url. + ## + ## Returns the last slash delimited part of the type url. + let slashIndex = rfind(typeUrl, '/') + if slashIndex != -1: + result = typeUrl[slashIndex+1..^1] + else: + result = typeUrl + +proc toJson*(msg: google_protobuf_Any): JsonNode = + ## Convert an Any into JSON. + ## + ## If the embedded message is a well known type, the conversion should + ## succeed if the values in the message are valid. + ## + ## Otherwise, the type url of the embedded message has to be registered in + ## the type registry, so that this procs knows how to convert the embedded + ## message into JSON. + result = newJObject() + result["@type"] = %msg.typeUrl + + let typeName = getTypenameFromTypeUrl(msg.typeUrl) + + case typeName + of "google.protobuf.Duration": + let duration = newgoogle_protobuf_Duration(cast[string](msg.value)) result["value"] = toJson(duration) - of "type.googleapis.com/google.protobuf.Empty": - result = newJObject() - result["@type"] = %message.typeUrl + of "google.protobuf.Empty": result["value"] = newJObject() - of "type.googleapis.com/google.protobuf.FieldMask": - let mask = newGoogleProtobufFieldMask(message.value) - result = newJObject() - result["@type"] = %message.typeUrl + of "google.protobuf.FieldMask": + let mask = newgoogle_protobuf_FieldMask(cast[string](msg.value)) result["value"] = toJson(mask) - of "type.googleapis.com/google.protobuf.Struct": - let struct = newGoogleProtobufStruct(message.value) - result = newJObject() - result["@type"] = %message.typeUrl + of "google.protobuf.Struct": + let struct = newgoogle_protobuf_Struct(cast[string](msg.value)) result["value"] = toJson(struct) - of "type.googleapis.com/google.protobuf.Value": - let value = newGoogleProtobufValue(message.value) - result = newJObject() - result["@type"] = %message.typeUrl - result["value"] = toJson(value) - of "type.googleapis.com/google.protobuf.ListValue": - let lst = newGoogleProtobufListValue(message.value) - result = newJObject() - result["@type"] = %message.typeUrl + of "google.protobuf.Value": + let value = newgoogle_protobuf_Value(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.ListValue": + let lst = newgoogle_protobuf_ListValue(cast[string](msg.value)) result["value"] = toJson(lst) - of "type.googleapis.com/google.protobuf.Timestamp": - let value = newGoogleProtobufTimestamp(message.value) - result = newJObject() - result["@type"] = %message.typeUrl + of "google.protobuf.Timestamp": + let value = newgoogle_protobuf_Timestamp(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.DoubleValue": + let value = newgoogle_protobuf_DoubleValue(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.FloatValue": + let value = newgoogle_protobuf_FloatValue(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.Int64Value": + let value = newgoogle_protobuf_Int64Value(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.UInt64Value": + let value = newgoogle_protobuf_UInt64Value(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.Int32Value": + let value = newgoogle_protobuf_Int32Value(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.UInt32Value": + let value = newgoogle_protobuf_UInt32Value(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.BoolValue": + let value = newgoogle_protobuf_BoolValue(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.StringValue": + let value = newgoogle_protobuf_StringValue(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.BytesValue": + let value = newgoogle_protobuf_BytesValue(cast[string](msg.value)) + result["value"] = toJson(value) + of "google.protobuf.Any": + let value = newgoogle_protobuf_Any(cast[string](msg.value)) result["value"] = toJson(value) else: - result = newJObject() - result["typeUrl"] = %message.typeUrl - result["value"] = %message.value + if msg.typeUrl notin typeRegistry: + raise newException(nimpb_json.ParseError, + "unknown type url: " & msg.typeUrl) + + let + procs = typeRegistry[msg.typeUrl] + ss = newStringStream(cast[string](msg.value)) + submsg = procs.readImpl(ss) + node = procs.toJsonImpl(submsg) + + for k, v in node: + result[k] = v proc parsegoogle_protobuf_Any*(node: JsonNode): google_protobuf_Any = - raise newException(nimpb_json.ParseError, "not supported yet") + ## Convert JSON into an Any. + ## + ## If the JSON represents a well known type, the conversion should succeed + ## if the JSON is valid and represents a valid message. + ## + ## Otherwise, the type url of the embedded message needs to be registered + ## in the type registry, so that this procs knows how to convert the JSON + ## into a correct message. + if node.kind != JObject: + raise newException(nimpb_json.ParseError, "object expected") + + if "@type" notin node: + raise newException(nimpb_json.ParseError, "@type not present") + + if node["@type"].kind != JString: + raise newException(nimpb_json.ParseError, + "@type is not a string (it's " & $node["@type"].kind & ")") + + let typeUrl = node["@type"].str + let typeName = getTypenameFromTypeUrl(typeUrl) + + var + subMessageData: string + + case typeName + of "google.protobuf.Duration": + let submsg = parsegoogle_protobuf_Duration(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.FieldMask": + let submsg = parsegoogle_protobuf_FieldMask(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.Struct": + let submsg = parsegoogle_protobuf_Struct(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.Value": + let submsg = parsegoogle_protobuf_Value(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.ListValue": + let submsg = parsegoogle_protobuf_ListValue(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.NullValue": + # TODO: ? + # let submsg = parsegoogle_protobuf_NullValue(node["value"]) + # subMessageData = serialize(submsg) + discard + of "google.protobuf.Timestamp": + let submsg = parsegoogle_protobuf_Timestamp(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.DoubleValue": + let submsg = parsegoogle_protobuf_DoubleValue(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.FloatValue": + let submsg = parsegoogle_protobuf_FloatValue(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.Int64Value": + let submsg = parsegoogle_protobuf_Int64Value(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.UInt64Value": + let submsg = parsegoogle_protobuf_UInt64Value(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.Int32Value": + let submsg = parsegoogle_protobuf_Int32Value(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.UInt32Value": + let submsg = parsegoogle_protobuf_UInt32Value(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.BoolValue": + let submsg = parsegoogle_protobuf_BoolValue(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.StringValue": + let submsg = parsegoogle_protobuf_StringValue(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.BytesValue": + let submsg = parsegoogle_protobuf_BytesValue(node["value"]) + subMessageData = serialize(submsg) + of "google.protobuf.Any": + let submsg = parsegoogle_protobuf_Any(node["value"]) + subMessageData = serialize(submsg) + else: + if typeUrl notin typeRegistry: + raise newException(nimpb_json.ParseError, + "unknown type url: " & typeUrl) + + let + procs = typeRegistry[typeUrl] + submsg = procs.fromJsonImpl(node) + ss = newStringStream() + + procs.writeImpl(ss, submsg) + + subMessageData = ss.data + + result = newgoogle_protobuf_Any() + result.typeUrl = typeUrl + result.value = cast[seq[byte]](subMessageData) + +declareJsonProcs(google_protobuf_Any) + +# Register the Well Known Types to the type registry automatically. + +template registerWkt(T: typedesc) = + var procs = `T ProcsWithJson`() + registerType("type.googleapis.com", fullyQualifiedName(T), procs) + +registerWkt(google_protobuf_Duration) +registerWkt(google_protobuf_FieldMask) +registerWkt(google_protobuf_Struct) +registerWkt(google_protobuf_Value) +registerWkt(google_protobuf_ListValue) +registerWkt(google_protobuf_Timestamp) +registerWkt(google_protobuf_DoubleValue) +registerWkt(google_protobuf_FloatValue) +registerWkt(google_protobuf_Int64Value) +registerWkt(google_protobuf_UInt64Value) +registerWkt(google_protobuf_Int32Value) +registerWkt(google_protobuf_UInt32Value) +registerWkt(google_protobuf_BoolValue) +registerWkt(google_protobuf_StringValue) +registerWkt(google_protobuf_BytesValue) +registerWkt(google_protobuf_Any) diff --git a/nimpb/wkt/any_pb.nim b/nimpb/wkt/any_pb.nim index 440d2b3..92376cf 100644 --- a/nimpb/wkt/any_pb.nim +++ b/nimpb/wkt/any_pb.nim @@ -21,9 +21,19 @@ proc writegoogle_protobuf_Any*(stream: Stream, message: google_protobuf_Any) proc readgoogle_protobuf_Any*(stream: Stream): google_protobuf_Any proc sizeOfgoogle_protobuf_Any*(message: google_protobuf_Any): uint64 +proc fullyQualifiedName*(T: typedesc[google_protobuf_Any]): string = "google.protobuf.Any" + +proc readgoogle_protobuf_AnyImpl(stream: Stream): Message = readgoogle_protobuf_Any(stream) +proc writegoogle_protobuf_AnyImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Any(stream, google_protobuf_Any(msg)) + +proc google_protobuf_AnyProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_AnyImpl + result.writeImpl = writegoogle_protobuf_AnyImpl + proc newgoogle_protobuf_Any*(): google_protobuf_Any = new(result) initMessage(result[]) + result.procs = google_protobuf_AnyProcs() result.typeUrl = "" result.value = @[] diff --git a/nimpb/wkt/api_pb.nim b/nimpb/wkt/api_pb.nim index 1aff6f2..47137e5 100644 --- a/nimpb/wkt/api_pb.nim +++ b/nimpb/wkt/api_pb.nim @@ -62,9 +62,23 @@ proc sizeOfgoogle_protobuf_Api*(message: google_protobuf_Api): uint64 proc toJson*(message: google_protobuf_Api): JsonNode proc parsegoogle_protobuf_Api*(obj: JsonNode): google_protobuf_Api +proc fullyQualifiedName*(T: typedesc[google_protobuf_Method]): string = "google.protobuf.Method" + +proc readgoogle_protobuf_MethodImpl(stream: Stream): Message = readgoogle_protobuf_Method(stream) +proc writegoogle_protobuf_MethodImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Method(stream, google_protobuf_Method(msg)) +proc toJsongoogle_protobuf_MethodImpl(msg: Message): JsonNode = toJson(google_protobuf_Method(msg)) +proc fromJsongoogle_protobuf_MethodImpl(node: JsonNode): Message = parsegoogle_protobuf_Method(node) + +proc google_protobuf_MethodProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_MethodImpl + result.writeImpl = writegoogle_protobuf_MethodImpl + result.toJsonImpl = toJsongoogle_protobuf_MethodImpl + result.fromJsonImpl = fromJsongoogle_protobuf_MethodImpl + proc newgoogle_protobuf_Method*(): google_protobuf_Method = new(result) initMessage(result[]) + result.procs = google_protobuf_MethodProcs() result.name = "" result.requestTypeUrl = "" result.requestStreaming = false @@ -306,9 +320,23 @@ proc newgoogle_protobuf_Method*(data: seq[byte]): google_protobuf_Method = result = readgoogle_protobuf_Method(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_Mixin]): string = "google.protobuf.Mixin" + +proc readgoogle_protobuf_MixinImpl(stream: Stream): Message = readgoogle_protobuf_Mixin(stream) +proc writegoogle_protobuf_MixinImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Mixin(stream, google_protobuf_Mixin(msg)) +proc toJsongoogle_protobuf_MixinImpl(msg: Message): JsonNode = toJson(google_protobuf_Mixin(msg)) +proc fromJsongoogle_protobuf_MixinImpl(node: JsonNode): Message = parsegoogle_protobuf_Mixin(node) + +proc google_protobuf_MixinProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_MixinImpl + result.writeImpl = writegoogle_protobuf_MixinImpl + result.toJsonImpl = toJsongoogle_protobuf_MixinImpl + result.fromJsonImpl = fromJsongoogle_protobuf_MixinImpl + proc newgoogle_protobuf_Mixin*(): google_protobuf_Mixin = new(result) initMessage(result[]) + result.procs = google_protobuf_MixinProcs() result.name = "" result.root = "" @@ -405,9 +433,23 @@ proc newgoogle_protobuf_Mixin*(data: seq[byte]): google_protobuf_Mixin = result = readgoogle_protobuf_Mixin(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_Api]): string = "google.protobuf.Api" + +proc readgoogle_protobuf_ApiImpl(stream: Stream): Message = readgoogle_protobuf_Api(stream) +proc writegoogle_protobuf_ApiImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Api(stream, google_protobuf_Api(msg)) +proc toJsongoogle_protobuf_ApiImpl(msg: Message): JsonNode = toJson(google_protobuf_Api(msg)) +proc fromJsongoogle_protobuf_ApiImpl(node: JsonNode): Message = parsegoogle_protobuf_Api(node) + +proc google_protobuf_ApiProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_ApiImpl + result.writeImpl = writegoogle_protobuf_ApiImpl + result.toJsonImpl = toJsongoogle_protobuf_ApiImpl + result.fromJsonImpl = fromJsongoogle_protobuf_ApiImpl + proc newgoogle_protobuf_Api*(): google_protobuf_Api = new(result) initMessage(result[]) + result.procs = google_protobuf_ApiProcs() result.name = "" result.methods = @[] result.options = @[] diff --git a/nimpb/wkt/descriptor_pb.nim b/nimpb/wkt/descriptor_pb.nim index 1627079..f7ee2f2 100644 --- a/nimpb/wkt/descriptor_pb.nim +++ b/nimpb/wkt/descriptor_pb.nim @@ -414,9 +414,19 @@ proc writegoogle_protobuf_GeneratedCodeInfo*(stream: Stream, message: google_pro proc readgoogle_protobuf_GeneratedCodeInfo*(stream: Stream): google_protobuf_GeneratedCodeInfo proc sizeOfgoogle_protobuf_GeneratedCodeInfo*(message: google_protobuf_GeneratedCodeInfo): uint64 +proc fullyQualifiedName*(T: typedesc[google_protobuf_UninterpretedOption_NamePart]): string = "google.protobuf.UninterpretedOption.NamePart" + +proc readgoogle_protobuf_UninterpretedOption_NamePartImpl(stream: Stream): Message = readgoogle_protobuf_UninterpretedOption_NamePart(stream) +proc writegoogle_protobuf_UninterpretedOption_NamePartImpl(stream: Stream, msg: Message) = writegoogle_protobuf_UninterpretedOption_NamePart(stream, google_protobuf_UninterpretedOption_NamePart(msg)) + +proc google_protobuf_UninterpretedOption_NamePartProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_UninterpretedOption_NamePartImpl + result.writeImpl = writegoogle_protobuf_UninterpretedOption_NamePartImpl + proc newgoogle_protobuf_UninterpretedOption_NamePart*(): google_protobuf_UninterpretedOption_NamePart = new(result) initMessage(result[]) + result.procs = google_protobuf_UninterpretedOption_NamePartProcs() result.namePart = "" result.isExtension = false @@ -504,9 +514,19 @@ proc newgoogle_protobuf_UninterpretedOption_NamePart*(data: seq[byte]): google_p result = readgoogle_protobuf_UninterpretedOption_NamePart(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_UninterpretedOption]): string = "google.protobuf.UninterpretedOption" + +proc readgoogle_protobuf_UninterpretedOptionImpl(stream: Stream): Message = readgoogle_protobuf_UninterpretedOption(stream) +proc writegoogle_protobuf_UninterpretedOptionImpl(stream: Stream, msg: Message) = writegoogle_protobuf_UninterpretedOption(stream, google_protobuf_UninterpretedOption(msg)) + +proc google_protobuf_UninterpretedOptionProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_UninterpretedOptionImpl + result.writeImpl = writegoogle_protobuf_UninterpretedOptionImpl + proc newgoogle_protobuf_UninterpretedOption*(): google_protobuf_UninterpretedOption = new(result) initMessage(result[]) + result.procs = google_protobuf_UninterpretedOptionProcs() result.name = @[] result.identifierValue = "" result.positiveIntValue = 0 @@ -728,9 +748,19 @@ proc newgoogle_protobuf_UninterpretedOption*(data: seq[byte]): google_protobuf_U result = readgoogle_protobuf_UninterpretedOption(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_EnumValueOptions]): string = "google.protobuf.EnumValueOptions" + +proc readgoogle_protobuf_EnumValueOptionsImpl(stream: Stream): Message = readgoogle_protobuf_EnumValueOptions(stream) +proc writegoogle_protobuf_EnumValueOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_EnumValueOptions(stream, google_protobuf_EnumValueOptions(msg)) + +proc google_protobuf_EnumValueOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_EnumValueOptionsImpl + result.writeImpl = writegoogle_protobuf_EnumValueOptionsImpl + proc newgoogle_protobuf_EnumValueOptions*(): google_protobuf_EnumValueOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_EnumValueOptionsProcs() result.deprecated = false result.uninterpretedOption = @[] @@ -822,9 +852,19 @@ proc newgoogle_protobuf_EnumValueOptions*(data: seq[byte]): google_protobuf_Enum result = readgoogle_protobuf_EnumValueOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_EnumValueDescriptorProto]): string = "google.protobuf.EnumValueDescriptorProto" + +proc readgoogle_protobuf_EnumValueDescriptorProtoImpl(stream: Stream): Message = readgoogle_protobuf_EnumValueDescriptorProto(stream) +proc writegoogle_protobuf_EnumValueDescriptorProtoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_EnumValueDescriptorProto(stream, google_protobuf_EnumValueDescriptorProto(msg)) + +proc google_protobuf_EnumValueDescriptorProtoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_EnumValueDescriptorProtoImpl + result.writeImpl = writegoogle_protobuf_EnumValueDescriptorProtoImpl + proc newgoogle_protobuf_EnumValueDescriptorProto*(): google_protobuf_EnumValueDescriptorProto = new(result) initMessage(result[]) + result.procs = google_protobuf_EnumValueDescriptorProtoProcs() result.name = "" result.number = 0 result.options = nil @@ -939,9 +979,19 @@ proc newgoogle_protobuf_EnumValueDescriptorProto*(data: seq[byte]): google_proto result = readgoogle_protobuf_EnumValueDescriptorProto(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_EnumDescriptorProto_EnumReservedRange]): string = "google.protobuf.EnumDescriptorProto.EnumReservedRange" + +proc readgoogle_protobuf_EnumDescriptorProto_EnumReservedRangeImpl(stream: Stream): Message = readgoogle_protobuf_EnumDescriptorProto_EnumReservedRange(stream) +proc writegoogle_protobuf_EnumDescriptorProto_EnumReservedRangeImpl(stream: Stream, msg: Message) = writegoogle_protobuf_EnumDescriptorProto_EnumReservedRange(stream, google_protobuf_EnumDescriptorProto_EnumReservedRange(msg)) + +proc google_protobuf_EnumDescriptorProto_EnumReservedRangeProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_EnumDescriptorProto_EnumReservedRangeImpl + result.writeImpl = writegoogle_protobuf_EnumDescriptorProto_EnumReservedRangeImpl + proc newgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(): google_protobuf_EnumDescriptorProto_EnumReservedRange = new(result) initMessage(result[]) + result.procs = google_protobuf_EnumDescriptorProto_EnumReservedRangeProcs() result.start = 0 result.fend = 0 @@ -1029,9 +1079,19 @@ proc newgoogle_protobuf_EnumDescriptorProto_EnumReservedRange*(data: seq[byte]): result = readgoogle_protobuf_EnumDescriptorProto_EnumReservedRange(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_EnumOptions]): string = "google.protobuf.EnumOptions" + +proc readgoogle_protobuf_EnumOptionsImpl(stream: Stream): Message = readgoogle_protobuf_EnumOptions(stream) +proc writegoogle_protobuf_EnumOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_EnumOptions(stream, google_protobuf_EnumOptions(msg)) + +proc google_protobuf_EnumOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_EnumOptionsImpl + result.writeImpl = writegoogle_protobuf_EnumOptionsImpl + proc newgoogle_protobuf_EnumOptions*(): google_protobuf_EnumOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_EnumOptionsProcs() result.allowAlias = false result.deprecated = false result.uninterpretedOption = @[] @@ -1149,9 +1209,19 @@ proc newgoogle_protobuf_EnumOptions*(data: seq[byte]): google_protobuf_EnumOptio result = readgoogle_protobuf_EnumOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_EnumDescriptorProto]): string = "google.protobuf.EnumDescriptorProto" + +proc readgoogle_protobuf_EnumDescriptorProtoImpl(stream: Stream): Message = readgoogle_protobuf_EnumDescriptorProto(stream) +proc writegoogle_protobuf_EnumDescriptorProtoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_EnumDescriptorProto(stream, google_protobuf_EnumDescriptorProto(msg)) + +proc google_protobuf_EnumDescriptorProtoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_EnumDescriptorProtoImpl + result.writeImpl = writegoogle_protobuf_EnumDescriptorProtoImpl + proc newgoogle_protobuf_EnumDescriptorProto*(): google_protobuf_EnumDescriptorProto = new(result) initMessage(result[]) + result.procs = google_protobuf_EnumDescriptorProtoProcs() result.name = "" result.value = @[] result.options = nil @@ -1329,9 +1399,19 @@ proc newgoogle_protobuf_EnumDescriptorProto*(data: seq[byte]): google_protobuf_E result = readgoogle_protobuf_EnumDescriptorProto(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_ExtensionRangeOptions]): string = "google.protobuf.ExtensionRangeOptions" + +proc readgoogle_protobuf_ExtensionRangeOptionsImpl(stream: Stream): Message = readgoogle_protobuf_ExtensionRangeOptions(stream) +proc writegoogle_protobuf_ExtensionRangeOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_ExtensionRangeOptions(stream, google_protobuf_ExtensionRangeOptions(msg)) + +proc google_protobuf_ExtensionRangeOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_ExtensionRangeOptionsImpl + result.writeImpl = writegoogle_protobuf_ExtensionRangeOptionsImpl + proc newgoogle_protobuf_ExtensionRangeOptions*(): google_protobuf_ExtensionRangeOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_ExtensionRangeOptionsProcs() result.uninterpretedOption = @[] proc clearuninterpretedOption*(message: google_protobuf_ExtensionRangeOptions) = @@ -1397,9 +1477,19 @@ proc newgoogle_protobuf_ExtensionRangeOptions*(data: seq[byte]): google_protobuf result = readgoogle_protobuf_ExtensionRangeOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_SourceCodeInfo_Location]): string = "google.protobuf.SourceCodeInfo.Location" + +proc readgoogle_protobuf_SourceCodeInfo_LocationImpl(stream: Stream): Message = readgoogle_protobuf_SourceCodeInfo_Location(stream) +proc writegoogle_protobuf_SourceCodeInfo_LocationImpl(stream: Stream, msg: Message) = writegoogle_protobuf_SourceCodeInfo_Location(stream, google_protobuf_SourceCodeInfo_Location(msg)) + +proc google_protobuf_SourceCodeInfo_LocationProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_SourceCodeInfo_LocationImpl + result.writeImpl = writegoogle_protobuf_SourceCodeInfo_LocationImpl + proc newgoogle_protobuf_SourceCodeInfo_Location*(): google_protobuf_SourceCodeInfo_Location = new(result) initMessage(result[]) + result.procs = google_protobuf_SourceCodeInfo_LocationProcs() result.path = @[] result.span = @[] result.leadingComments = "" @@ -1602,9 +1692,19 @@ proc newgoogle_protobuf_SourceCodeInfo_Location*(data: seq[byte]): google_protob result = readgoogle_protobuf_SourceCodeInfo_Location(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_SourceCodeInfo]): string = "google.protobuf.SourceCodeInfo" + +proc readgoogle_protobuf_SourceCodeInfoImpl(stream: Stream): Message = readgoogle_protobuf_SourceCodeInfo(stream) +proc writegoogle_protobuf_SourceCodeInfoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_SourceCodeInfo(stream, google_protobuf_SourceCodeInfo(msg)) + +proc google_protobuf_SourceCodeInfoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_SourceCodeInfoImpl + result.writeImpl = writegoogle_protobuf_SourceCodeInfoImpl + proc newgoogle_protobuf_SourceCodeInfo*(): google_protobuf_SourceCodeInfo = new(result) initMessage(result[]) + result.procs = google_protobuf_SourceCodeInfoProcs() result.location = @[] proc clearlocation*(message: google_protobuf_SourceCodeInfo) = @@ -1670,9 +1770,19 @@ proc newgoogle_protobuf_SourceCodeInfo*(data: seq[byte]): google_protobuf_Source result = readgoogle_protobuf_SourceCodeInfo(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_FieldOptions]): string = "google.protobuf.FieldOptions" + +proc readgoogle_protobuf_FieldOptionsImpl(stream: Stream): Message = readgoogle_protobuf_FieldOptions(stream) +proc writegoogle_protobuf_FieldOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_FieldOptions(stream, google_protobuf_FieldOptions(msg)) + +proc google_protobuf_FieldOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_FieldOptionsImpl + result.writeImpl = writegoogle_protobuf_FieldOptionsImpl + proc newgoogle_protobuf_FieldOptions*(): google_protobuf_FieldOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_FieldOptionsProcs() result.ctype = google_protobuf_FieldOptions_CType.STRING result.packed = false result.jstype = google_protobuf_FieldOptions_JSType.JS_NORMAL @@ -1894,9 +2004,19 @@ proc newgoogle_protobuf_FieldOptions*(data: seq[byte]): google_protobuf_FieldOpt result = readgoogle_protobuf_FieldOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_FieldDescriptorProto]): string = "google.protobuf.FieldDescriptorProto" + +proc readgoogle_protobuf_FieldDescriptorProtoImpl(stream: Stream): Message = readgoogle_protobuf_FieldDescriptorProto(stream) +proc writegoogle_protobuf_FieldDescriptorProtoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_FieldDescriptorProto(stream, google_protobuf_FieldDescriptorProto(msg)) + +proc google_protobuf_FieldDescriptorProtoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_FieldDescriptorProtoImpl + result.writeImpl = writegoogle_protobuf_FieldDescriptorProtoImpl + proc newgoogle_protobuf_FieldDescriptorProto*(): google_protobuf_FieldDescriptorProto = new(result) initMessage(result[]) + result.procs = google_protobuf_FieldDescriptorProtoProcs() result.name = "" result.number = 0 result.label = google_protobuf_FieldDescriptorProto_Label.LABEL_OPTIONAL @@ -2193,9 +2313,19 @@ proc newgoogle_protobuf_FieldDescriptorProto*(data: seq[byte]): google_protobuf_ result = readgoogle_protobuf_FieldDescriptorProto(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_DescriptorProto_ExtensionRange]): string = "google.protobuf.DescriptorProto.ExtensionRange" + +proc readgoogle_protobuf_DescriptorProto_ExtensionRangeImpl(stream: Stream): Message = readgoogle_protobuf_DescriptorProto_ExtensionRange(stream) +proc writegoogle_protobuf_DescriptorProto_ExtensionRangeImpl(stream: Stream, msg: Message) = writegoogle_protobuf_DescriptorProto_ExtensionRange(stream, google_protobuf_DescriptorProto_ExtensionRange(msg)) + +proc google_protobuf_DescriptorProto_ExtensionRangeProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_DescriptorProto_ExtensionRangeImpl + result.writeImpl = writegoogle_protobuf_DescriptorProto_ExtensionRangeImpl + proc newgoogle_protobuf_DescriptorProto_ExtensionRange*(): google_protobuf_DescriptorProto_ExtensionRange = new(result) initMessage(result[]) + result.procs = google_protobuf_DescriptorProto_ExtensionRangeProcs() result.start = 0 result.fend = 0 result.options = nil @@ -2310,9 +2440,19 @@ proc newgoogle_protobuf_DescriptorProto_ExtensionRange*(data: seq[byte]): google result = readgoogle_protobuf_DescriptorProto_ExtensionRange(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_MessageOptions]): string = "google.protobuf.MessageOptions" + +proc readgoogle_protobuf_MessageOptionsImpl(stream: Stream): Message = readgoogle_protobuf_MessageOptions(stream) +proc writegoogle_protobuf_MessageOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_MessageOptions(stream, google_protobuf_MessageOptions(msg)) + +proc google_protobuf_MessageOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_MessageOptionsImpl + result.writeImpl = writegoogle_protobuf_MessageOptionsImpl + proc newgoogle_protobuf_MessageOptions*(): google_protobuf_MessageOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_MessageOptionsProcs() result.messageSetWireFormat = false result.noStandardDescriptorAccessor = false result.deprecated = false @@ -2482,9 +2622,19 @@ proc newgoogle_protobuf_MessageOptions*(data: seq[byte]): google_protobuf_Messag result = readgoogle_protobuf_MessageOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_OneofOptions]): string = "google.protobuf.OneofOptions" + +proc readgoogle_protobuf_OneofOptionsImpl(stream: Stream): Message = readgoogle_protobuf_OneofOptions(stream) +proc writegoogle_protobuf_OneofOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_OneofOptions(stream, google_protobuf_OneofOptions(msg)) + +proc google_protobuf_OneofOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_OneofOptionsImpl + result.writeImpl = writegoogle_protobuf_OneofOptionsImpl + proc newgoogle_protobuf_OneofOptions*(): google_protobuf_OneofOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_OneofOptionsProcs() result.uninterpretedOption = @[] proc clearuninterpretedOption*(message: google_protobuf_OneofOptions) = @@ -2550,9 +2700,19 @@ proc newgoogle_protobuf_OneofOptions*(data: seq[byte]): google_protobuf_OneofOpt result = readgoogle_protobuf_OneofOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_OneofDescriptorProto]): string = "google.protobuf.OneofDescriptorProto" + +proc readgoogle_protobuf_OneofDescriptorProtoImpl(stream: Stream): Message = readgoogle_protobuf_OneofDescriptorProto(stream) +proc writegoogle_protobuf_OneofDescriptorProtoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_OneofDescriptorProto(stream, google_protobuf_OneofDescriptorProto(msg)) + +proc google_protobuf_OneofDescriptorProtoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_OneofDescriptorProtoImpl + result.writeImpl = writegoogle_protobuf_OneofDescriptorProtoImpl + proc newgoogle_protobuf_OneofDescriptorProto*(): google_protobuf_OneofDescriptorProto = new(result) initMessage(result[]) + result.procs = google_protobuf_OneofDescriptorProtoProcs() result.name = "" result.options = nil @@ -2641,9 +2801,19 @@ proc newgoogle_protobuf_OneofDescriptorProto*(data: seq[byte]): google_protobuf_ result = readgoogle_protobuf_OneofDescriptorProto(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_DescriptorProto_ReservedRange]): string = "google.protobuf.DescriptorProto.ReservedRange" + +proc readgoogle_protobuf_DescriptorProto_ReservedRangeImpl(stream: Stream): Message = readgoogle_protobuf_DescriptorProto_ReservedRange(stream) +proc writegoogle_protobuf_DescriptorProto_ReservedRangeImpl(stream: Stream, msg: Message) = writegoogle_protobuf_DescriptorProto_ReservedRange(stream, google_protobuf_DescriptorProto_ReservedRange(msg)) + +proc google_protobuf_DescriptorProto_ReservedRangeProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_DescriptorProto_ReservedRangeImpl + result.writeImpl = writegoogle_protobuf_DescriptorProto_ReservedRangeImpl + proc newgoogle_protobuf_DescriptorProto_ReservedRange*(): google_protobuf_DescriptorProto_ReservedRange = new(result) initMessage(result[]) + result.procs = google_protobuf_DescriptorProto_ReservedRangeProcs() result.start = 0 result.fend = 0 @@ -2731,9 +2901,19 @@ proc newgoogle_protobuf_DescriptorProto_ReservedRange*(data: seq[byte]): google_ result = readgoogle_protobuf_DescriptorProto_ReservedRange(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_DescriptorProto]): string = "google.protobuf.DescriptorProto" + +proc readgoogle_protobuf_DescriptorProtoImpl(stream: Stream): Message = readgoogle_protobuf_DescriptorProto(stream) +proc writegoogle_protobuf_DescriptorProtoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_DescriptorProto(stream, google_protobuf_DescriptorProto(msg)) + +proc google_protobuf_DescriptorProtoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_DescriptorProtoImpl + result.writeImpl = writegoogle_protobuf_DescriptorProtoImpl + proc newgoogle_protobuf_DescriptorProto*(): google_protobuf_DescriptorProto = new(result) initMessage(result[]) + result.procs = google_protobuf_DescriptorProtoProcs() result.name = "" result.field = @[] result.extension = @[] @@ -3061,9 +3241,19 @@ proc newgoogle_protobuf_DescriptorProto*(data: seq[byte]): google_protobuf_Descr result = readgoogle_protobuf_DescriptorProto(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_FileOptions]): string = "google.protobuf.FileOptions" + +proc readgoogle_protobuf_FileOptionsImpl(stream: Stream): Message = readgoogle_protobuf_FileOptions(stream) +proc writegoogle_protobuf_FileOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_FileOptions(stream, google_protobuf_FileOptions(msg)) + +proc google_protobuf_FileOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_FileOptionsImpl + result.writeImpl = writegoogle_protobuf_FileOptionsImpl + proc newgoogle_protobuf_FileOptions*(): google_protobuf_FileOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_FileOptionsProcs() result.javaPackage = "" result.javaOuterClassname = "" result.javaMultipleFiles = false @@ -3597,9 +3787,19 @@ proc newgoogle_protobuf_FileOptions*(data: seq[byte]): google_protobuf_FileOptio result = readgoogle_protobuf_FileOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_ServiceOptions]): string = "google.protobuf.ServiceOptions" + +proc readgoogle_protobuf_ServiceOptionsImpl(stream: Stream): Message = readgoogle_protobuf_ServiceOptions(stream) +proc writegoogle_protobuf_ServiceOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_ServiceOptions(stream, google_protobuf_ServiceOptions(msg)) + +proc google_protobuf_ServiceOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_ServiceOptionsImpl + result.writeImpl = writegoogle_protobuf_ServiceOptionsImpl + proc newgoogle_protobuf_ServiceOptions*(): google_protobuf_ServiceOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_ServiceOptionsProcs() result.deprecated = false result.uninterpretedOption = @[] @@ -3691,9 +3891,19 @@ proc newgoogle_protobuf_ServiceOptions*(data: seq[byte]): google_protobuf_Servic result = readgoogle_protobuf_ServiceOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_MethodOptions]): string = "google.protobuf.MethodOptions" + +proc readgoogle_protobuf_MethodOptionsImpl(stream: Stream): Message = readgoogle_protobuf_MethodOptions(stream) +proc writegoogle_protobuf_MethodOptionsImpl(stream: Stream, msg: Message) = writegoogle_protobuf_MethodOptions(stream, google_protobuf_MethodOptions(msg)) + +proc google_protobuf_MethodOptionsProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_MethodOptionsImpl + result.writeImpl = writegoogle_protobuf_MethodOptionsImpl + proc newgoogle_protobuf_MethodOptions*(): google_protobuf_MethodOptions = new(result) initMessage(result[]) + result.procs = google_protobuf_MethodOptionsProcs() result.deprecated = false result.idempotencyLevel = google_protobuf_MethodOptions_IdempotencyLevel.IDEMPOTENCY_UNKNOWN result.uninterpretedOption = @[] @@ -3811,9 +4021,19 @@ proc newgoogle_protobuf_MethodOptions*(data: seq[byte]): google_protobuf_MethodO result = readgoogle_protobuf_MethodOptions(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_MethodDescriptorProto]): string = "google.protobuf.MethodDescriptorProto" + +proc readgoogle_protobuf_MethodDescriptorProtoImpl(stream: Stream): Message = readgoogle_protobuf_MethodDescriptorProto(stream) +proc writegoogle_protobuf_MethodDescriptorProtoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_MethodDescriptorProto(stream, google_protobuf_MethodDescriptorProto(msg)) + +proc google_protobuf_MethodDescriptorProtoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_MethodDescriptorProtoImpl + result.writeImpl = writegoogle_protobuf_MethodDescriptorProtoImpl + proc newgoogle_protobuf_MethodDescriptorProto*(): google_protobuf_MethodDescriptorProto = new(result) initMessage(result[]) + result.procs = google_protobuf_MethodDescriptorProtoProcs() result.name = "" result.inputType = "" result.outputType = "" @@ -4006,9 +4226,19 @@ proc newgoogle_protobuf_MethodDescriptorProto*(data: seq[byte]): google_protobuf result = readgoogle_protobuf_MethodDescriptorProto(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_ServiceDescriptorProto]): string = "google.protobuf.ServiceDescriptorProto" + +proc readgoogle_protobuf_ServiceDescriptorProtoImpl(stream: Stream): Message = readgoogle_protobuf_ServiceDescriptorProto(stream) +proc writegoogle_protobuf_ServiceDescriptorProtoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_ServiceDescriptorProto(stream, google_protobuf_ServiceDescriptorProto(msg)) + +proc google_protobuf_ServiceDescriptorProtoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_ServiceDescriptorProtoImpl + result.writeImpl = writegoogle_protobuf_ServiceDescriptorProtoImpl + proc newgoogle_protobuf_ServiceDescriptorProto*(): google_protobuf_ServiceDescriptorProto = new(result) initMessage(result[]) + result.procs = google_protobuf_ServiceDescriptorProtoProcs() result.name = "" result.fmethod = @[] result.options = nil @@ -4127,9 +4357,19 @@ proc newgoogle_protobuf_ServiceDescriptorProto*(data: seq[byte]): google_protobu result = readgoogle_protobuf_ServiceDescriptorProto(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_FileDescriptorProto]): string = "google.protobuf.FileDescriptorProto" + +proc readgoogle_protobuf_FileDescriptorProtoImpl(stream: Stream): Message = readgoogle_protobuf_FileDescriptorProto(stream) +proc writegoogle_protobuf_FileDescriptorProtoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_FileDescriptorProto(stream, google_protobuf_FileDescriptorProto(msg)) + +proc google_protobuf_FileDescriptorProtoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_FileDescriptorProtoImpl + result.writeImpl = writegoogle_protobuf_FileDescriptorProtoImpl + proc newgoogle_protobuf_FileDescriptorProto*(): google_protobuf_FileDescriptorProto = new(result) initMessage(result[]) + result.procs = google_protobuf_FileDescriptorProtoProcs() result.name = "" result.package = "" result.dependency = @[] @@ -4526,9 +4766,19 @@ proc newgoogle_protobuf_FileDescriptorProto*(data: seq[byte]): google_protobuf_F result = readgoogle_protobuf_FileDescriptorProto(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_FileDescriptorSet]): string = "google.protobuf.FileDescriptorSet" + +proc readgoogle_protobuf_FileDescriptorSetImpl(stream: Stream): Message = readgoogle_protobuf_FileDescriptorSet(stream) +proc writegoogle_protobuf_FileDescriptorSetImpl(stream: Stream, msg: Message) = writegoogle_protobuf_FileDescriptorSet(stream, google_protobuf_FileDescriptorSet(msg)) + +proc google_protobuf_FileDescriptorSetProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_FileDescriptorSetImpl + result.writeImpl = writegoogle_protobuf_FileDescriptorSetImpl + proc newgoogle_protobuf_FileDescriptorSet*(): google_protobuf_FileDescriptorSet = new(result) initMessage(result[]) + result.procs = google_protobuf_FileDescriptorSetProcs() result.file = @[] proc clearfile*(message: google_protobuf_FileDescriptorSet) = @@ -4594,9 +4844,19 @@ proc newgoogle_protobuf_FileDescriptorSet*(data: seq[byte]): google_protobuf_Fil result = readgoogle_protobuf_FileDescriptorSet(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_GeneratedCodeInfo_Annotation]): string = "google.protobuf.GeneratedCodeInfo.Annotation" + +proc readgoogle_protobuf_GeneratedCodeInfo_AnnotationImpl(stream: Stream): Message = readgoogle_protobuf_GeneratedCodeInfo_Annotation(stream) +proc writegoogle_protobuf_GeneratedCodeInfo_AnnotationImpl(stream: Stream, msg: Message) = writegoogle_protobuf_GeneratedCodeInfo_Annotation(stream, google_protobuf_GeneratedCodeInfo_Annotation(msg)) + +proc google_protobuf_GeneratedCodeInfo_AnnotationProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_GeneratedCodeInfo_AnnotationImpl + result.writeImpl = writegoogle_protobuf_GeneratedCodeInfo_AnnotationImpl + proc newgoogle_protobuf_GeneratedCodeInfo_Annotation*(): google_protobuf_GeneratedCodeInfo_Annotation = new(result) initMessage(result[]) + result.procs = google_protobuf_GeneratedCodeInfo_AnnotationProcs() result.path = @[] result.sourceFile = "" result.begin = 0 @@ -4753,9 +5013,19 @@ proc newgoogle_protobuf_GeneratedCodeInfo_Annotation*(data: seq[byte]): google_p result = readgoogle_protobuf_GeneratedCodeInfo_Annotation(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_GeneratedCodeInfo]): string = "google.protobuf.GeneratedCodeInfo" + +proc readgoogle_protobuf_GeneratedCodeInfoImpl(stream: Stream): Message = readgoogle_protobuf_GeneratedCodeInfo(stream) +proc writegoogle_protobuf_GeneratedCodeInfoImpl(stream: Stream, msg: Message) = writegoogle_protobuf_GeneratedCodeInfo(stream, google_protobuf_GeneratedCodeInfo(msg)) + +proc google_protobuf_GeneratedCodeInfoProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_GeneratedCodeInfoImpl + result.writeImpl = writegoogle_protobuf_GeneratedCodeInfoImpl + proc newgoogle_protobuf_GeneratedCodeInfo*(): google_protobuf_GeneratedCodeInfo = new(result) initMessage(result[]) + result.procs = google_protobuf_GeneratedCodeInfoProcs() result.annotation = @[] proc clearannotation*(message: google_protobuf_GeneratedCodeInfo) = diff --git a/nimpb/wkt/duration.nim b/nimpb/wkt/duration.nim index 46e03d4..36620b3 100644 --- a/nimpb/wkt/duration.nim +++ b/nimpb/wkt/duration.nim @@ -3,6 +3,7 @@ import math import strutils include duration_pb +import utils proc toJson*(message: google_protobuf_Duration): JsonNode = if (message.seconds < -315_576_000_000'i64) or @@ -66,3 +67,5 @@ proc parsegoogle_protobuf_Duration*(node: JsonNode): google_protobuf_Duration = if result.seconds < 0: setNanos(result, -result.nanos) + +declareJsonProcs(google_protobuf_Duration) diff --git a/nimpb/wkt/duration_pb.nim b/nimpb/wkt/duration_pb.nim index 6359c20..72b864d 100644 --- a/nimpb/wkt/duration_pb.nim +++ b/nimpb/wkt/duration_pb.nim @@ -21,9 +21,19 @@ proc writegoogle_protobuf_Duration*(stream: Stream, message: google_protobuf_Dur proc readgoogle_protobuf_Duration*(stream: Stream): google_protobuf_Duration proc sizeOfgoogle_protobuf_Duration*(message: google_protobuf_Duration): uint64 +proc fullyQualifiedName*(T: typedesc[google_protobuf_Duration]): string = "google.protobuf.Duration" + +proc readgoogle_protobuf_DurationImpl(stream: Stream): Message = readgoogle_protobuf_Duration(stream) +proc writegoogle_protobuf_DurationImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Duration(stream, google_protobuf_Duration(msg)) + +proc google_protobuf_DurationProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_DurationImpl + result.writeImpl = writegoogle_protobuf_DurationImpl + proc newgoogle_protobuf_Duration*(): google_protobuf_Duration = new(result) initMessage(result[]) + result.procs = google_protobuf_DurationProcs() result.seconds = 0 result.nanos = 0 diff --git a/nimpb/wkt/empty_pb.nim b/nimpb/wkt/empty_pb.nim index 88ebf66..13fb31f 100644 --- a/nimpb/wkt/empty_pb.nim +++ b/nimpb/wkt/empty_pb.nim @@ -21,9 +21,23 @@ proc sizeOfgoogle_protobuf_Empty*(message: google_protobuf_Empty): uint64 proc toJson*(message: google_protobuf_Empty): JsonNode proc parsegoogle_protobuf_Empty*(obj: JsonNode): google_protobuf_Empty +proc fullyQualifiedName*(T: typedesc[google_protobuf_Empty]): string = "google.protobuf.Empty" + +proc readgoogle_protobuf_EmptyImpl(stream: Stream): Message = readgoogle_protobuf_Empty(stream) +proc writegoogle_protobuf_EmptyImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Empty(stream, google_protobuf_Empty(msg)) +proc toJsongoogle_protobuf_EmptyImpl(msg: Message): JsonNode = toJson(google_protobuf_Empty(msg)) +proc fromJsongoogle_protobuf_EmptyImpl(node: JsonNode): Message = parsegoogle_protobuf_Empty(node) + +proc google_protobuf_EmptyProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_EmptyImpl + result.writeImpl = writegoogle_protobuf_EmptyImpl + result.toJsonImpl = toJsongoogle_protobuf_EmptyImpl + result.fromJsonImpl = fromJsongoogle_protobuf_EmptyImpl + proc newgoogle_protobuf_Empty*(): google_protobuf_Empty = new(result) initMessage(result[]) + result.procs = google_protobuf_EmptyProcs() proc sizeOfgoogle_protobuf_Empty*(message: google_protobuf_Empty): uint64 = result = result + sizeOfUnknownFields(message) diff --git a/nimpb/wkt/field_mask.nim b/nimpb/wkt/field_mask.nim index 72f541b..ba12811 100644 --- a/nimpb/wkt/field_mask.nim +++ b/nimpb/wkt/field_mask.nim @@ -2,6 +2,7 @@ import json import strutils include field_mask_pb +import utils const LowerCaseLetters = {'a'..'z'} @@ -64,3 +65,5 @@ proc parsegoogle_protobuf_FieldMask*(node: JsonNode): google_protobuf_FieldMask addPaths(result, camelCaseToSnakeCase(path)) except ValueError as exc: raise newException(nimpb_json.ParseError, exc.msg) + +declareJsonProcs(google_protobuf_FieldMask) diff --git a/nimpb/wkt/field_mask_pb.nim b/nimpb/wkt/field_mask_pb.nim index 91b58bb..16be527 100644 --- a/nimpb/wkt/field_mask_pb.nim +++ b/nimpb/wkt/field_mask_pb.nim @@ -20,9 +20,19 @@ proc writegoogle_protobuf_FieldMask*(stream: Stream, message: google_protobuf_Fi proc readgoogle_protobuf_FieldMask*(stream: Stream): google_protobuf_FieldMask proc sizeOfgoogle_protobuf_FieldMask*(message: google_protobuf_FieldMask): uint64 +proc fullyQualifiedName*(T: typedesc[google_protobuf_FieldMask]): string = "google.protobuf.FieldMask" + +proc readgoogle_protobuf_FieldMaskImpl(stream: Stream): Message = readgoogle_protobuf_FieldMask(stream) +proc writegoogle_protobuf_FieldMaskImpl(stream: Stream, msg: Message) = writegoogle_protobuf_FieldMask(stream, google_protobuf_FieldMask(msg)) + +proc google_protobuf_FieldMaskProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_FieldMaskImpl + result.writeImpl = writegoogle_protobuf_FieldMaskImpl + proc newgoogle_protobuf_FieldMask*(): google_protobuf_FieldMask = new(result) initMessage(result[]) + result.procs = google_protobuf_FieldMaskProcs() result.paths = @[] proc clearpaths*(message: google_protobuf_FieldMask) = diff --git a/nimpb/wkt/source_context_pb.nim b/nimpb/wkt/source_context_pb.nim index 1df97c9..aac1b81 100644 --- a/nimpb/wkt/source_context_pb.nim +++ b/nimpb/wkt/source_context_pb.nim @@ -22,9 +22,23 @@ proc sizeOfgoogle_protobuf_SourceContext*(message: google_protobuf_SourceContext proc toJson*(message: google_protobuf_SourceContext): JsonNode proc parsegoogle_protobuf_SourceContext*(obj: JsonNode): google_protobuf_SourceContext +proc fullyQualifiedName*(T: typedesc[google_protobuf_SourceContext]): string = "google.protobuf.SourceContext" + +proc readgoogle_protobuf_SourceContextImpl(stream: Stream): Message = readgoogle_protobuf_SourceContext(stream) +proc writegoogle_protobuf_SourceContextImpl(stream: Stream, msg: Message) = writegoogle_protobuf_SourceContext(stream, google_protobuf_SourceContext(msg)) +proc toJsongoogle_protobuf_SourceContextImpl(msg: Message): JsonNode = toJson(google_protobuf_SourceContext(msg)) +proc fromJsongoogle_protobuf_SourceContextImpl(node: JsonNode): Message = parsegoogle_protobuf_SourceContext(node) + +proc google_protobuf_SourceContextProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_SourceContextImpl + result.writeImpl = writegoogle_protobuf_SourceContextImpl + result.toJsonImpl = toJsongoogle_protobuf_SourceContextImpl + result.fromJsonImpl = fromJsongoogle_protobuf_SourceContextImpl + proc newgoogle_protobuf_SourceContext*(): google_protobuf_SourceContext = new(result) initMessage(result[]) + result.procs = google_protobuf_SourceContextProcs() result.fileName = "" proc clearfileName*(message: google_protobuf_SourceContext) = diff --git a/nimpb/wkt/struct.nim b/nimpb/wkt/struct.nim index 659af58..64f0112 100644 --- a/nimpb/wkt/struct.nim +++ b/nimpb/wkt/struct.nim @@ -1,6 +1,7 @@ import json include struct_pb +import utils proc toJson*(message: google_protobuf_Value): JsonNode @@ -78,3 +79,8 @@ proc parsegoogle_protobuf_ListValue*(node: JsonNode): google_protobuf_ListValue for value in node: addValues(result, parsegoogle_protobuf_Value(value)) + +declareJsonProcs(google_protobuf_Value) +declareJsonProcs(google_protobuf_ListValue) +declareJsonProcs(google_protobuf_Struct) +# helper(google_protobuf_NullValue) diff --git a/nimpb/wkt/struct_pb.nim b/nimpb/wkt/struct_pb.nim index 0944989..78538ac 100644 --- a/nimpb/wkt/struct_pb.nim +++ b/nimpb/wkt/struct_pb.nim @@ -106,9 +106,19 @@ proc readgoogle_protobuf_Struct_FieldsEntryKV(stream: Stream, tbl: TableRef[stri tbl[key] = value +proc fullyQualifiedName*(T: typedesc[google_protobuf_Struct]): string = "google.protobuf.Struct" + +proc readgoogle_protobuf_StructImpl(stream: Stream): Message = readgoogle_protobuf_Struct(stream) +proc writegoogle_protobuf_StructImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Struct(stream, google_protobuf_Struct(msg)) + +proc google_protobuf_StructProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_StructImpl + result.writeImpl = writegoogle_protobuf_StructImpl + proc newgoogle_protobuf_Struct*(): google_protobuf_Struct = new(result) initMessage(result[]) + result.procs = google_protobuf_StructProcs() result.fields = newTable[string, google_protobuf_Value]() proc clearfields*(message: google_protobuf_Struct) = @@ -174,9 +184,19 @@ proc newgoogle_protobuf_Struct*(data: seq[byte]): google_protobuf_Struct = result = readgoogle_protobuf_Struct(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_ListValue]): string = "google.protobuf.ListValue" + +proc readgoogle_protobuf_ListValueImpl(stream: Stream): Message = readgoogle_protobuf_ListValue(stream) +proc writegoogle_protobuf_ListValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_ListValue(stream, google_protobuf_ListValue(msg)) + +proc google_protobuf_ListValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_ListValueImpl + result.writeImpl = writegoogle_protobuf_ListValueImpl + proc newgoogle_protobuf_ListValue*(): google_protobuf_ListValue = new(result) initMessage(result[]) + result.procs = google_protobuf_ListValueProcs() result.values = @[] proc clearvalues*(message: google_protobuf_ListValue) = @@ -242,9 +262,19 @@ proc newgoogle_protobuf_ListValue*(data: seq[byte]): google_protobuf_ListValue = result = readgoogle_protobuf_ListValue(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_Value]): string = "google.protobuf.Value" + +proc readgoogle_protobuf_ValueImpl(stream: Stream): Message = readgoogle_protobuf_Value(stream) +proc writegoogle_protobuf_ValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Value(stream, google_protobuf_Value(msg)) + +proc google_protobuf_ValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_ValueImpl + result.writeImpl = writegoogle_protobuf_ValueImpl + proc newgoogle_protobuf_Value*(): google_protobuf_Value = new(result) initMessage(result[]) + result.procs = google_protobuf_ValueProcs() result.kind.kind = google_protobuf_Value_kind_Kind.NotSet proc clearnullValue*(message: google_protobuf_Value) = diff --git a/nimpb/wkt/timestamp.nim b/nimpb/wkt/timestamp.nim index 16134e3..3d174fe 100644 --- a/nimpb/wkt/timestamp.nim +++ b/nimpb/wkt/timestamp.nim @@ -4,6 +4,7 @@ import strutils import times include timestamp_pb +import utils proc toJson*(message: google_protobuf_Timestamp): JsonNode = let t = utc(fromUnix(message.seconds)) @@ -71,3 +72,5 @@ offset <- 'Z' / (('+' / '-') \d\d ':' \d\d) setSeconds(result, toUnix(toTime(dt))) setNanos(result, int32(nanos)) + +declareJsonProcs(google_protobuf_Timestamp) diff --git a/nimpb/wkt/timestamp_pb.nim b/nimpb/wkt/timestamp_pb.nim index b0a7420..c1668dd 100644 --- a/nimpb/wkt/timestamp_pb.nim +++ b/nimpb/wkt/timestamp_pb.nim @@ -21,9 +21,19 @@ proc writegoogle_protobuf_Timestamp*(stream: Stream, message: google_protobuf_Ti proc readgoogle_protobuf_Timestamp*(stream: Stream): google_protobuf_Timestamp proc sizeOfgoogle_protobuf_Timestamp*(message: google_protobuf_Timestamp): uint64 +proc fullyQualifiedName*(T: typedesc[google_protobuf_Timestamp]): string = "google.protobuf.Timestamp" + +proc readgoogle_protobuf_TimestampImpl(stream: Stream): Message = readgoogle_protobuf_Timestamp(stream) +proc writegoogle_protobuf_TimestampImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Timestamp(stream, google_protobuf_Timestamp(msg)) + +proc google_protobuf_TimestampProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_TimestampImpl + result.writeImpl = writegoogle_protobuf_TimestampImpl + proc newgoogle_protobuf_Timestamp*(): google_protobuf_Timestamp = new(result) initMessage(result[]) + result.procs = google_protobuf_TimestampProcs() result.seconds = 0 result.nanos = 0 diff --git a/nimpb/wkt/type_pb.nim b/nimpb/wkt/type_pb.nim index 4c87659..9c72b4a 100644 --- a/nimpb/wkt/type_pb.nim +++ b/nimpb/wkt/type_pb.nim @@ -122,9 +122,23 @@ proc sizeOfgoogle_protobuf_Enum*(message: google_protobuf_Enum): uint64 proc toJson*(message: google_protobuf_Enum): JsonNode proc parsegoogle_protobuf_Enum*(obj: JsonNode): google_protobuf_Enum +proc fullyQualifiedName*(T: typedesc[google_protobuf_Option]): string = "google.protobuf.Option" + +proc readgoogle_protobuf_OptionImpl(stream: Stream): Message = readgoogle_protobuf_Option(stream) +proc writegoogle_protobuf_OptionImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Option(stream, google_protobuf_Option(msg)) +proc toJsongoogle_protobuf_OptionImpl(msg: Message): JsonNode = toJson(google_protobuf_Option(msg)) +proc fromJsongoogle_protobuf_OptionImpl(node: JsonNode): Message = parsegoogle_protobuf_Option(node) + +proc google_protobuf_OptionProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_OptionImpl + result.writeImpl = writegoogle_protobuf_OptionImpl + result.toJsonImpl = toJsongoogle_protobuf_OptionImpl + result.fromJsonImpl = fromJsongoogle_protobuf_OptionImpl + proc newgoogle_protobuf_Option*(): google_protobuf_Option = new(result) initMessage(result[]) + result.procs = google_protobuf_OptionProcs() result.name = "" result.value = nil @@ -227,9 +241,23 @@ proc newgoogle_protobuf_Option*(data: seq[byte]): google_protobuf_Option = result = readgoogle_protobuf_Option(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_Field]): string = "google.protobuf.Field" + +proc readgoogle_protobuf_FieldImpl(stream: Stream): Message = readgoogle_protobuf_Field(stream) +proc writegoogle_protobuf_FieldImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Field(stream, google_protobuf_Field(msg)) +proc toJsongoogle_protobuf_FieldImpl(msg: Message): JsonNode = toJson(google_protobuf_Field(msg)) +proc fromJsongoogle_protobuf_FieldImpl(node: JsonNode): Message = parsegoogle_protobuf_Field(node) + +proc google_protobuf_FieldProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_FieldImpl + result.writeImpl = writegoogle_protobuf_FieldImpl + result.toJsonImpl = toJsongoogle_protobuf_FieldImpl + result.fromJsonImpl = fromJsongoogle_protobuf_FieldImpl + proc newgoogle_protobuf_Field*(): google_protobuf_Field = new(result) initMessage(result[]) + result.procs = google_protobuf_FieldProcs() result.kind = google_protobuf_Field_Kind.TYPE_UNKNOWN result.cardinality = google_protobuf_Field_Cardinality.CARDINALITY_UNKNOWN result.number = 0 @@ -549,9 +577,23 @@ proc newgoogle_protobuf_Field*(data: seq[byte]): google_protobuf_Field = result = readgoogle_protobuf_Field(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_Type]): string = "google.protobuf.Type" + +proc readgoogle_protobuf_TypeImpl(stream: Stream): Message = readgoogle_protobuf_Type(stream) +proc writegoogle_protobuf_TypeImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Type(stream, google_protobuf_Type(msg)) +proc toJsongoogle_protobuf_TypeImpl(msg: Message): JsonNode = toJson(google_protobuf_Type(msg)) +proc fromJsongoogle_protobuf_TypeImpl(node: JsonNode): Message = parsegoogle_protobuf_Type(node) + +proc google_protobuf_TypeProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_TypeImpl + result.writeImpl = writegoogle_protobuf_TypeImpl + result.toJsonImpl = toJsongoogle_protobuf_TypeImpl + result.fromJsonImpl = fromJsongoogle_protobuf_TypeImpl + proc newgoogle_protobuf_Type*(): google_protobuf_Type = new(result) initMessage(result[]) + result.procs = google_protobuf_TypeProcs() result.name = "" result.fields = @[] result.oneofs = @[] @@ -797,9 +839,23 @@ proc newgoogle_protobuf_Type*(data: seq[byte]): google_protobuf_Type = result = readgoogle_protobuf_Type(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_EnumValue]): string = "google.protobuf.EnumValue" + +proc readgoogle_protobuf_EnumValueImpl(stream: Stream): Message = readgoogle_protobuf_EnumValue(stream) +proc writegoogle_protobuf_EnumValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_EnumValue(stream, google_protobuf_EnumValue(msg)) +proc toJsongoogle_protobuf_EnumValueImpl(msg: Message): JsonNode = toJson(google_protobuf_EnumValue(msg)) +proc fromJsongoogle_protobuf_EnumValueImpl(node: JsonNode): Message = parsegoogle_protobuf_EnumValue(node) + +proc google_protobuf_EnumValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_EnumValueImpl + result.writeImpl = writegoogle_protobuf_EnumValueImpl + result.toJsonImpl = toJsongoogle_protobuf_EnumValueImpl + result.fromJsonImpl = fromJsongoogle_protobuf_EnumValueImpl + proc newgoogle_protobuf_EnumValue*(): google_protobuf_EnumValue = new(result) initMessage(result[]) + result.procs = google_protobuf_EnumValueProcs() result.name = "" result.number = 0 result.options = @[] @@ -937,9 +993,23 @@ proc newgoogle_protobuf_EnumValue*(data: seq[byte]): google_protobuf_EnumValue = result = readgoogle_protobuf_EnumValue(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_Enum]): string = "google.protobuf.Enum" + +proc readgoogle_protobuf_EnumImpl(stream: Stream): Message = readgoogle_protobuf_Enum(stream) +proc writegoogle_protobuf_EnumImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Enum(stream, google_protobuf_Enum(msg)) +proc toJsongoogle_protobuf_EnumImpl(msg: Message): JsonNode = toJson(google_protobuf_Enum(msg)) +proc fromJsongoogle_protobuf_EnumImpl(node: JsonNode): Message = parsegoogle_protobuf_Enum(node) + +proc google_protobuf_EnumProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_EnumImpl + result.writeImpl = writegoogle_protobuf_EnumImpl + result.toJsonImpl = toJsongoogle_protobuf_EnumImpl + result.fromJsonImpl = fromJsongoogle_protobuf_EnumImpl + proc newgoogle_protobuf_Enum*(): google_protobuf_Enum = new(result) initMessage(result[]) + result.procs = google_protobuf_EnumProcs() result.name = "" result.enumvalue = @[] result.options = @[] diff --git a/nimpb/wkt/utils.nim b/nimpb/wkt/utils.nim new file mode 100644 index 0000000..243debc --- /dev/null +++ b/nimpb/wkt/utils.nim @@ -0,0 +1,11 @@ +template declareJsonProcs*(T: typedesc) = + proc `T FromJsonImpl`(node: JsonNode): Message = + `parse T`(node) + + proc `T ToJsonImpl`(msg: Message): JsonNode = + toJson(T(msg)) + + proc `T ProcsWithJson`*(): MessageProcs = + result = `T Procs`() + result.fromJsonImpl = `T FromJsonImpl` + result.toJsonImpl = `T ToJsonImpl` diff --git a/nimpb/wkt/wrappers.nim b/nimpb/wkt/wrappers.nim index f4c42fa..ad03635 100644 --- a/nimpb/wkt/wrappers.nim +++ b/nimpb/wkt/wrappers.nim @@ -3,6 +3,7 @@ import strutils import base64 include wrappers_pb +import utils proc toJson*(message: google_protobuf_DoubleValue): JsonNode = toJson(message.value) @@ -98,3 +99,13 @@ proc parsegoogle_protobuf_BytesValue*(node: JsonNode): google_protobuf_BytesValu raise newException(nimpb_json.ParseError, "not a string") result = newgoogle_protobuf_BytesValue() setValue(result, cast[seq[byte]](base64.decode(node.str))) + +declareJsonProcs(google_protobuf_DoubleValue) +declareJsonProcs(google_protobuf_FloatValue) +declareJsonProcs(google_protobuf_Int64Value) +declareJsonProcs(google_protobuf_UInt64Value) +declareJsonProcs(google_protobuf_Int32Value) +declareJsonProcs(google_protobuf_UInt32Value) +declareJsonProcs(google_protobuf_BoolValue) +declareJsonProcs(google_protobuf_StringValue) +declareJsonProcs(google_protobuf_BytesValue) diff --git a/nimpb/wkt/wrappers_pb.nim b/nimpb/wkt/wrappers_pb.nim index a0b3432..01ace8a 100644 --- a/nimpb/wkt/wrappers_pb.nim +++ b/nimpb/wkt/wrappers_pb.nim @@ -100,9 +100,19 @@ proc writegoogle_protobuf_UInt32Value*(stream: Stream, message: google_protobuf_ proc readgoogle_protobuf_UInt32Value*(stream: Stream): google_protobuf_UInt32Value proc sizeOfgoogle_protobuf_UInt32Value*(message: google_protobuf_UInt32Value): uint64 +proc fullyQualifiedName*(T: typedesc[google_protobuf_Int32Value]): string = "google.protobuf.Int32Value" + +proc readgoogle_protobuf_Int32ValueImpl(stream: Stream): Message = readgoogle_protobuf_Int32Value(stream) +proc writegoogle_protobuf_Int32ValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Int32Value(stream, google_protobuf_Int32Value(msg)) + +proc google_protobuf_Int32ValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_Int32ValueImpl + result.writeImpl = writegoogle_protobuf_Int32ValueImpl + proc newgoogle_protobuf_Int32Value*(): google_protobuf_Int32Value = new(result) initMessage(result[]) + result.procs = google_protobuf_Int32ValueProcs() result.value = 0 proc clearvalue*(message: google_protobuf_Int32Value) = @@ -159,9 +169,19 @@ proc newgoogle_protobuf_Int32Value*(data: seq[byte]): google_protobuf_Int32Value result = readgoogle_protobuf_Int32Value(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_Int64Value]): string = "google.protobuf.Int64Value" + +proc readgoogle_protobuf_Int64ValueImpl(stream: Stream): Message = readgoogle_protobuf_Int64Value(stream) +proc writegoogle_protobuf_Int64ValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_Int64Value(stream, google_protobuf_Int64Value(msg)) + +proc google_protobuf_Int64ValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_Int64ValueImpl + result.writeImpl = writegoogle_protobuf_Int64ValueImpl + proc newgoogle_protobuf_Int64Value*(): google_protobuf_Int64Value = new(result) initMessage(result[]) + result.procs = google_protobuf_Int64ValueProcs() result.value = 0 proc clearvalue*(message: google_protobuf_Int64Value) = @@ -218,9 +238,19 @@ proc newgoogle_protobuf_Int64Value*(data: seq[byte]): google_protobuf_Int64Value result = readgoogle_protobuf_Int64Value(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_DoubleValue]): string = "google.protobuf.DoubleValue" + +proc readgoogle_protobuf_DoubleValueImpl(stream: Stream): Message = readgoogle_protobuf_DoubleValue(stream) +proc writegoogle_protobuf_DoubleValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_DoubleValue(stream, google_protobuf_DoubleValue(msg)) + +proc google_protobuf_DoubleValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_DoubleValueImpl + result.writeImpl = writegoogle_protobuf_DoubleValueImpl + proc newgoogle_protobuf_DoubleValue*(): google_protobuf_DoubleValue = new(result) initMessage(result[]) + result.procs = google_protobuf_DoubleValueProcs() result.value = 0 proc clearvalue*(message: google_protobuf_DoubleValue) = @@ -277,9 +307,19 @@ proc newgoogle_protobuf_DoubleValue*(data: seq[byte]): google_protobuf_DoubleVal result = readgoogle_protobuf_DoubleValue(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_StringValue]): string = "google.protobuf.StringValue" + +proc readgoogle_protobuf_StringValueImpl(stream: Stream): Message = readgoogle_protobuf_StringValue(stream) +proc writegoogle_protobuf_StringValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_StringValue(stream, google_protobuf_StringValue(msg)) + +proc google_protobuf_StringValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_StringValueImpl + result.writeImpl = writegoogle_protobuf_StringValueImpl + proc newgoogle_protobuf_StringValue*(): google_protobuf_StringValue = new(result) initMessage(result[]) + result.procs = google_protobuf_StringValueProcs() result.value = "" proc clearvalue*(message: google_protobuf_StringValue) = @@ -336,9 +376,19 @@ proc newgoogle_protobuf_StringValue*(data: seq[byte]): google_protobuf_StringVal result = readgoogle_protobuf_StringValue(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_BoolValue]): string = "google.protobuf.BoolValue" + +proc readgoogle_protobuf_BoolValueImpl(stream: Stream): Message = readgoogle_protobuf_BoolValue(stream) +proc writegoogle_protobuf_BoolValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_BoolValue(stream, google_protobuf_BoolValue(msg)) + +proc google_protobuf_BoolValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_BoolValueImpl + result.writeImpl = writegoogle_protobuf_BoolValueImpl + proc newgoogle_protobuf_BoolValue*(): google_protobuf_BoolValue = new(result) initMessage(result[]) + result.procs = google_protobuf_BoolValueProcs() result.value = false proc clearvalue*(message: google_protobuf_BoolValue) = @@ -395,9 +445,19 @@ proc newgoogle_protobuf_BoolValue*(data: seq[byte]): google_protobuf_BoolValue = result = readgoogle_protobuf_BoolValue(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_BytesValue]): string = "google.protobuf.BytesValue" + +proc readgoogle_protobuf_BytesValueImpl(stream: Stream): Message = readgoogle_protobuf_BytesValue(stream) +proc writegoogle_protobuf_BytesValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_BytesValue(stream, google_protobuf_BytesValue(msg)) + +proc google_protobuf_BytesValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_BytesValueImpl + result.writeImpl = writegoogle_protobuf_BytesValueImpl + proc newgoogle_protobuf_BytesValue*(): google_protobuf_BytesValue = new(result) initMessage(result[]) + result.procs = google_protobuf_BytesValueProcs() result.value = @[] proc clearvalue*(message: google_protobuf_BytesValue) = @@ -454,9 +514,19 @@ proc newgoogle_protobuf_BytesValue*(data: seq[byte]): google_protobuf_BytesValue result = readgoogle_protobuf_BytesValue(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_FloatValue]): string = "google.protobuf.FloatValue" + +proc readgoogle_protobuf_FloatValueImpl(stream: Stream): Message = readgoogle_protobuf_FloatValue(stream) +proc writegoogle_protobuf_FloatValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_FloatValue(stream, google_protobuf_FloatValue(msg)) + +proc google_protobuf_FloatValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_FloatValueImpl + result.writeImpl = writegoogle_protobuf_FloatValueImpl + proc newgoogle_protobuf_FloatValue*(): google_protobuf_FloatValue = new(result) initMessage(result[]) + result.procs = google_protobuf_FloatValueProcs() result.value = 0 proc clearvalue*(message: google_protobuf_FloatValue) = @@ -513,9 +583,19 @@ proc newgoogle_protobuf_FloatValue*(data: seq[byte]): google_protobuf_FloatValue result = readgoogle_protobuf_FloatValue(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_UInt64Value]): string = "google.protobuf.UInt64Value" + +proc readgoogle_protobuf_UInt64ValueImpl(stream: Stream): Message = readgoogle_protobuf_UInt64Value(stream) +proc writegoogle_protobuf_UInt64ValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_UInt64Value(stream, google_protobuf_UInt64Value(msg)) + +proc google_protobuf_UInt64ValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_UInt64ValueImpl + result.writeImpl = writegoogle_protobuf_UInt64ValueImpl + proc newgoogle_protobuf_UInt64Value*(): google_protobuf_UInt64Value = new(result) initMessage(result[]) + result.procs = google_protobuf_UInt64ValueProcs() result.value = 0 proc clearvalue*(message: google_protobuf_UInt64Value) = @@ -572,9 +652,19 @@ proc newgoogle_protobuf_UInt64Value*(data: seq[byte]): google_protobuf_UInt64Val result = readgoogle_protobuf_UInt64Value(ss) +proc fullyQualifiedName*(T: typedesc[google_protobuf_UInt32Value]): string = "google.protobuf.UInt32Value" + +proc readgoogle_protobuf_UInt32ValueImpl(stream: Stream): Message = readgoogle_protobuf_UInt32Value(stream) +proc writegoogle_protobuf_UInt32ValueImpl(stream: Stream, msg: Message) = writegoogle_protobuf_UInt32Value(stream, google_protobuf_UInt32Value(msg)) + +proc google_protobuf_UInt32ValueProcs*(): MessageProcs = + result.readImpl = readgoogle_protobuf_UInt32ValueImpl + result.writeImpl = writegoogle_protobuf_UInt32ValueImpl + proc newgoogle_protobuf_UInt32Value*(): google_protobuf_UInt32Value = new(result) initMessage(result[]) + result.procs = google_protobuf_UInt32ValueProcs() result.value = 0 proc clearvalue*(message: google_protobuf_UInt32Value) = diff --git a/tests/conformance/conformance_nim.nim b/tests/conformance/conformance_nim.nim index 819a7c9..1b73517 100644 --- a/tests/conformance/conformance_nim.nim +++ b/tests/conformance/conformance_nim.nim @@ -4,6 +4,7 @@ import streams import strformat import nimpb/nimpb +import nimpb/wkt/any import conformance_pb import test_messages_proto3_pb @@ -30,6 +31,8 @@ proc myReadString(s: Stream, size: int): string = proc errorMessage(exc: ref Exception): string = result = $exc.name & ": " & exc.msg & "\n" & getStackTrace(exc) +any.registerType(protobuf_test_messages_proto3_TestAllTypesProto3) + while true: var requestSize = 0'i32 |
