summaryrefslogtreecommitdiff
path: root/ext/librethinkdbxx/reql/gen.py
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@zerotier.com>2018-04-25 06:39:02 -0700
committerGitHub <noreply@github.com>2018-04-25 06:39:02 -0700
commit42ec780a6f6eedef4d8b1d8218bd72fc6ed75cc0 (patch)
tree7bf86c4d92d6a0f77eced79bfc33313c62c7b6dd /ext/librethinkdbxx/reql/gen.py
parent18c9dc8a0649c866eff9f299f20fa5b19c502e52 (diff)
parent4608880fb06700822d01e9e5d6729fcdeb82b64b (diff)
downloadinfinitytier-42ec780a6f6eedef4d8b1d8218bd72fc6ed75cc0.tar.gz
infinitytier-42ec780a6f6eedef4d8b1d8218bd72fc6ed75cc0.zip
Merge branch 'dev' into netbsd-support
Diffstat (limited to 'ext/librethinkdbxx/reql/gen.py')
-rw-r--r--ext/librethinkdbxx/reql/gen.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/reql/gen.py b/ext/librethinkdbxx/reql/gen.py
new file mode 100644
index 00000000..2b1fe9fc
--- /dev/null
+++ b/ext/librethinkdbxx/reql/gen.py
@@ -0,0 +1,33 @@
+from sys import argv
+from re import sub, finditer, VERBOSE
+
+def gen(defs):
+ indent = 0
+ enum = False
+ def p(s): print(" " * (indent * 4) + s)
+ for item in finditer("""
+ (?P<type> message|enum) \\s+ (?P<name> \\w+) \\s* \\{ |
+ (?P<var> \\w+) \\s* = \\s* (?P<val> \\w+) \\s* ; |
+ \\}
+ """, defs, flags=VERBOSE):
+ if item.group(0) == "}":
+ indent = indent - 1
+ p("};" if enum else "}")
+ enum = False;
+ elif item.group('type') == 'enum':
+ p("enum class %s {" % item.group('name'))
+ indent = indent + 1
+ enum = True
+ elif item.group('type') == 'message':
+ p("namespace %s {" % item.group('name'))
+ indent = indent + 1
+ enum = False
+ else:
+ if enum:
+ p("%s = %s," % (item.group('var'), item.group('val')))
+
+print("// Auto-generated by reql/gen.py")
+print("#pragma once")
+print("namespace RethinkDB { namespace Protocol {")
+gen(sub("//.*", "", open(argv[1]).read()))
+print("} }")