aboutsummaryrefslogtreecommitdiff
path: root/src/nimpb_buildpkg/plugin.nim
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2018-04-06 19:32:12 +0300
committerOskari Timperi <oskari.timperi@iki.fi>2018-04-06 19:32:12 +0300
commitd0d7fd08f350389ced2b39700aacc6fd96b38cfd (patch)
tree57236c5ca02580225e9e23ea4b7b0e1a7e0a7870 /src/nimpb_buildpkg/plugin.nim
parent5d8a2a81240afa6afffa9fab946fe16775e558ba (diff)
downloadnimpb_protoc-d0d7fd08f350389ced2b39700aacc6fd96b38cfd.tar.gz
nimpb_protoc-d0d7fd08f350389ced2b39700aacc6fd96b38cfd.zip
Handle defaults for enums better
Diffstat (limited to 'src/nimpb_buildpkg/plugin.nim')
-rw-r--r--src/nimpb_buildpkg/plugin.nim10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/nimpb_buildpkg/plugin.nim b/src/nimpb_buildpkg/plugin.nim
index ae5aa31..1691e6b 100644
--- a/src/nimpb_buildpkg/plugin.nim
+++ b/src/nimpb_buildpkg/plugin.nim
@@ -18,6 +18,7 @@ type
Enum = ref object
names: Names
values: seq[tuple[name: string, number: int]]
+ defaultValue: string
Field = ref object
number: int
@@ -192,10 +193,13 @@ proc defaultValue(field: Field): string =
return &"newTable[{field.mapKeyType}, {field.mapValueType}]()"
elif isRepeated(field):
return "@[]"
+ elif isEnum(field):
+ for e in field.message.file.enums:
+ if $e.names == field.typeName:
+ result = e.defaultValue
+ break
else:
result = defaultValue(field.ftype)
- if isEnum(field):
- result = &"cast[{field.typeName}]({result})"
proc wiretypeStr(field: Field): string =
result = "WireType."
@@ -361,6 +365,8 @@ proc newEnum(names: Names, desc: google_protobuf_EnumDescriptorProto): Enum =
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 =