blob: 73bff76cbb7501e33cca6c3a8ead9b786347d6f7 [file] [log] [blame]
# JSON generation
import json
def walk_enums(s):
r = []
for e in s:
d = []
d.append(e.name)
for b in e.block:
d.append(b)
d.append({'enumtype': e.enumtype})
r.append(d)
return r
def walk_services(s):
r = {}
for e in s:
d = {'reply': e.reply}
if e.stream:
d['stream'] = True
if e.events:
d['events'] = e.events
r[e.caller] = d
return r
def walk_defs(s):
r = []
for t in s:
d = []
d.append(t.name)
for b in t.block:
f = []
if b.type == 'Field':
f = [b.fieldtype, b.fieldname]
elif b.type == 'Array':
if b.lengthfield:
f = [b.fieldtype, b.fieldname, b.length, b.lengthfield]
else:
f = [b.fieldtype, b.fieldname, b.length]
else:
raise ValueError("Error in processing array type %s" % b)
d.append(f)
if t.crc:
c = {}
c['crc'] = "{0:#0{1}x}".format(t.crc, 10)
d.append(c)
r.append(d)
return r
#
# Plugin entry point
#
def run(filename, s, file_crc):
j = {}
j['types'] = walk_defs(s['typedefs'])
j['messages'] = walk_defs(s['defines'])
j['enums'] = walk_enums(s['enums'])
j['services'] = walk_services(s['services'])
j['vl_api_version'] = hex(file_crc)
return json.dumps(j, indent=4, separators=(',', ': '))