mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-22 14:42:40 +01:00
cln-grpc: Allow fields to be mapped to None to ignore them
`listpeers` is a rather deeply nested structure which has a couple of caveats, namely that we use the same enum multiple times, which causes naming clashes. So we truncate the state_changes[]. We can later map them if needed, but it'll get much easier once we have an abstract model description that isn't JSON schema, which unrolls all types, causing us to generate those enums multiple times.
This commit is contained in:
parent
fd2d126ec4
commit
b73405a4c2
1 changed files with 22 additions and 4 deletions
|
@ -26,9 +26,9 @@ typemap = {
|
|||
|
||||
# Manual overrides for some of the auto-generated types for paths
|
||||
overrides = {
|
||||
'ListPeers.peers[].channels[].state_changes[].old_state': "ChannelState",
|
||||
'ListPeers.peers[].channels[].state_changes[].new_state': "ChannelState",
|
||||
'ListPeers.peers[].channels[].state_changes[].cause': "ChannelStateChangeCause",
|
||||
# Truncate the tree here, it's a complex structure with identitcal
|
||||
# types
|
||||
'ListPeers.peers[].channels[].state_changes[]': None,
|
||||
'ListPeers.peers[].channels[].opener': "ChannelSide",
|
||||
'ListPeers.peers[].channels[].closer': "ChannelSide",
|
||||
'ListPeers.peers[].channels[].features[]': "string",
|
||||
|
@ -107,6 +107,9 @@ class GrpcGenerator:
|
|||
self.write(f"""{prefix}}}\n""", False)
|
||||
|
||||
def generate_message(self, message: CompositeField):
|
||||
if overrides.get(message.path, "") is None:
|
||||
return
|
||||
|
||||
self.write(f"""
|
||||
message {message.typename} {{
|
||||
""")
|
||||
|
@ -117,6 +120,9 @@ class GrpcGenerator:
|
|||
self.generate_enum(f, indent=1)
|
||||
|
||||
for i, f in enumerate(message.fields):
|
||||
if overrides.get(f.path, "") is None:
|
||||
continue
|
||||
|
||||
opt = "optional " if not f.required else ""
|
||||
if isinstance(f, ArrayField):
|
||||
typename = typemap.get(f.itemtype.typename, f.itemtype.typename)
|
||||
|
@ -171,6 +177,9 @@ class GrpcConverterGenerator:
|
|||
def generate_composite(self, prefix, field: CompositeField):
|
||||
"""Generates the conversions from JSON-RPC to GRPC.
|
||||
"""
|
||||
if overrides.get(field.path, "") is None:
|
||||
return
|
||||
|
||||
# First pass: generate any sub-fields before we generate the
|
||||
# top-level field itself.
|
||||
for f in field.fields:
|
||||
|
@ -186,12 +195,18 @@ class GrpcConverterGenerator:
|
|||
""")
|
||||
|
||||
for f in field.fields:
|
||||
if overrides.get(f.path, "") is None:
|
||||
continue
|
||||
|
||||
name = f.normalized()
|
||||
if isinstance(f, ArrayField):
|
||||
self.write(f"{name}: c.{name}.iter().map(|s| s.into()).collect(),\n", numindent=3)
|
||||
|
||||
elif isinstance(f, EnumField):
|
||||
self.write(f"{name}: c.{name} as i32,\n", numindent=3)
|
||||
if f.required:
|
||||
self.write(f"{name}: c.{name} as i32,\n", numindent=3)
|
||||
else:
|
||||
self.write(f"{name}: c.{name}.map(|v| v as i32),\n", numindent=3)
|
||||
|
||||
elif isinstance(f, PrimitiveField):
|
||||
typ = f.typename + ("?" if not f.required else "")
|
||||
|
@ -266,6 +281,9 @@ class GrpcUnconverterGenerator(GrpcConverterGenerator):
|
|||
def generate_composite(self, prefix, field: CompositeField) -> None:
|
||||
# First pass: generate any sub-fields before we generate the
|
||||
# top-level field itself.
|
||||
if overrides.get(field.path, "") is None:
|
||||
return
|
||||
|
||||
for f in field.fields:
|
||||
if isinstance(f, ArrayField):
|
||||
self.generate_array(prefix, f)
|
||||
|
|
Loading…
Add table
Reference in a new issue