14 def walk_counters(s, pathset):
17 r2 = {'name': e.name, 'elements': e.block}
34 d.append({'enumtype': e.enumtype})
42 d = {'reply': e.reply}
46 d['stream_msg'] = e.stream_message
48 d['events'] = e.events
53 def walk_defs(s, is_message=False):
59 if b.type == 'Option':
63 d.append([b.fieldtype, b.fieldname, b.limit])
65 d.append([b.fieldtype, b.fieldname])
66 elif b.type == 'Array':
68 d.append([b.fieldtype, b.fieldname,
69 b.length, b.lengthfield])
71 d.append([b.fieldtype, b.fieldname, b.length])
72 elif b.type == 'Union':
75 raise ValueError("Error in processing array type %s" % b)
77 if is_message and t.crc:
79 c['crc'] = "{0:#0{1}x}".format(t.crc, 10)
89 def run(args, filename, s):
92 j['types'] = (walk_defs([o for o in s['types']
93 if o.__class__.__name__ == 'Typedef']))
94 j['messages'] = walk_defs(s['Define'], True)
95 j['unions'] = (walk_defs([o for o in s['types']
96 if o.__class__.__name__ == 'Union']))
97 j['enums'] = (walk_enums([o for o in s['types']
98 if o.__class__.__name__ == 'Enum']))
99 j['enumflags'] = (walk_enums([o for o in s['types']
100 if o.__class__.__name__ == 'EnumFlag']))
101 j['services'] = walk_services(s['Service'])
102 j['options'] = s['Option']
103 j['aliases'] = {o.name:o.alias for o in s['types'] if o.__class__.__name__ == 'Using'}
104 j['vl_api_version'] = hex(s['file_crc'])
105 j['imports'] = walk_imports(i for i in s['Import'])
106 j['counters'], j['paths'] = walk_counters(s['Counters'], s['Paths'])
107 return json.dumps(j, indent=4, separators=(',', ': '))