X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Ftools%2Fvppapigen%2Fvppapigen_json.py;h=6e7aaa2e6f53c4f58c0af1ec903ea89d8498334b;hb=f5db3711b;hp=a4707c0cd6053c42f2d1055deb19c99c133955af;hpb=413f4a5b2123c1625d615315db293a080078482b;p=vpp.git diff --git a/src/tools/vppapigen/vppapigen_json.py b/src/tools/vppapigen/vppapigen_json.py index a4707c0cd60..6e7aaa2e6f5 100644 --- a/src/tools/vppapigen/vppapigen_json.py +++ b/src/tools/vppapigen/vppapigen_json.py @@ -1,6 +1,12 @@ # JSON generation import json +def walk_imports(s): + r = [] + for e in s: + r.append(str(e)) + return r + def walk_enums(s): r = [] @@ -20,23 +26,31 @@ def walk_services(s): d = {'reply': e.reply} if e.stream: d['stream'] = True + if e.stream_message: + d['stream_msg'] = e.stream_message if e.events: d['events'] = e.events r[e.caller] = d return r -def walk_defs(s): +def walk_defs(s, is_message=False): r = [] for t in s: d = [] d.append(t.name) for b in t.block: + if b.type == 'Option': + continue if b.type == 'Field': - d.append([b.fieldtype, b.fieldname]) + if b.limit: + d.append([b.fieldtype, b.fieldname, b.limit]) + else: + d.append([b.fieldtype, b.fieldname]) elif b.type == 'Array': if b.lengthfield: - d.append([b.fieldtype, b.fieldname, b.length, b.lengthfield]) + d.append([b.fieldtype, b.fieldname, + b.length, b.lengthfield]) else: d.append([b.fieldtype, b.fieldname, b.length]) elif b.type == 'Union': @@ -44,7 +58,7 @@ def walk_defs(s): else: raise ValueError("Error in processing array type %s" % b) - if t.crc: + if is_message and t.crc: c = {} c['crc'] = "{0:#0{1}x}".format(t.crc, 10) d.append(c) @@ -52,18 +66,22 @@ def walk_defs(s): r.append(d) return r - # # Plugin entry point # -def run(filename, s, file_crc): +def run(args, filename, s): j = {} - j['types'] = walk_defs([o for o in s['types'] if o.__class__.__name__ == 'Typedef']) - j['messages'] = walk_defs(s['Define']) - j['unions'] = walk_defs([o for o in s['types'] if o.__class__.__name__ == 'Union']) - j['enums'] = walk_enums([o for o in s['types'] if o.__class__.__name__ == 'Enum']) + j['types'] = (walk_defs([o for o in s['types'] + if o.__class__.__name__ == 'Typedef'])) + j['messages'] = walk_defs(s['Define'], True) + j['unions'] = (walk_defs([o for o in s['types'] + if o.__class__.__name__ == 'Union'])) + j['enums'] = (walk_enums([o for o in s['types'] + if o.__class__.__name__ == 'Enum'])) j['services'] = walk_services(s['Service']) - j['aliases'] = s['Alias'] - j['vl_api_version'] = hex(file_crc) + j['options'] = s['Option'] + j['aliases'] = {o.name:o.alias for o in s['types'] if o.__class__.__name__ == 'Using'} + j['vl_api_version'] = hex(s['file_crc']) + j['imports'] = walk_imports(i for i in s['Import']) return json.dumps(j, indent=4, separators=(',', ': '))