summaryrefslogtreecommitdiff
path: root/ext/librethinkdbxx/reql/gen.py
blob: 2b1fe9fc7fd846061f20da345a16c67ab4b8f1c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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("} }")