mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
tlv: build tlv top-level structs
construct structs for the TLV's. these will be the 'return type' for tlv fields in parent messages (so to speak)
This commit is contained in:
committed by
Rusty Russell
parent
18a23b31de
commit
ef610dcab3
@@ -659,17 +659,39 @@ class Message(object):
|
|||||||
else:
|
else:
|
||||||
fmt_fields.append('{} {};'.format(f.fieldtype.name, f.name))
|
fmt_fields.append('{} {};'.format(f.fieldtype.name, f.name))
|
||||||
|
|
||||||
return tlv_struct_template.format(
|
return tlv_msg_struct_template.format(
|
||||||
tlv_name=self.name,
|
msg_name=self.name,
|
||||||
fields=str(fmt_fields))
|
fields=str(fmt_fields))
|
||||||
|
|
||||||
|
|
||||||
tlv_struct_template = """
|
tlv_msg_struct_template = """
|
||||||
struct tlv_{tlv_name} {{
|
struct _tlv_msg_{msg_name} {{
|
||||||
{fields}
|
{fields}
|
||||||
}};
|
}};
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
tlv_struct_template = """
|
||||||
|
struct _{tlv_name} {{
|
||||||
|
{msg_type_structs}
|
||||||
|
}};
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def build_tlv_type_struct(name, messages):
|
||||||
|
inner_structs = CCode()
|
||||||
|
for m in messages:
|
||||||
|
inner_structs.append('struct _tlv_msg_{} *{};'.format(m.name, m.name))
|
||||||
|
return tlv_struct_template.format(
|
||||||
|
tlv_name=name,
|
||||||
|
msg_type_structs=str(inner_structs))
|
||||||
|
|
||||||
|
|
||||||
|
def build_tlv_type_structs(tlv_fields):
|
||||||
|
structs = ''
|
||||||
|
for name, messages in tlv_fields.items():
|
||||||
|
structs += build_tlv_type_struct(name, messages)
|
||||||
|
return structs
|
||||||
|
|
||||||
|
|
||||||
def find_message(messages, name):
|
def find_message(messages, name):
|
||||||
for m in messages:
|
for m in messages:
|
||||||
@@ -965,6 +987,7 @@ toplevel_messages = [m for m in messages if not m.is_tlv]
|
|||||||
built_hdr_enums = build_hdr_enums(options.enumname, toplevel_messages, tlv_fields)
|
built_hdr_enums = build_hdr_enums(options.enumname, toplevel_messages, tlv_fields)
|
||||||
built_impl_enums = build_impl_enums(options.enumname, toplevel_messages, tlv_fields)
|
built_impl_enums = build_impl_enums(options.enumname, toplevel_messages, tlv_fields)
|
||||||
tlv_structs = build_tlv_structs(tlv_fields)
|
tlv_structs = build_tlv_structs(tlv_fields)
|
||||||
|
tlv_structs += build_tlv_type_structs(tlv_fields)
|
||||||
includes = '\n'.join(includes)
|
includes = '\n'.join(includes)
|
||||||
printcases = ['case {enum.name}: printf("{enum.name}:\\n"); printwire_{name}("{name}", msg); return;'.format(enum=m.enum, name=m.name) for m in toplevel_messages]
|
printcases = ['case {enum.name}: printf("{enum.name}:\\n"); printwire_{name}("{name}", msg); return;'.format(enum=m.enum, name=m.name) for m in toplevel_messages]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user