msggen: generate deprecated fields in rust.py

This commit is contained in:
joemphilips 2022-08-18 19:13:31 +09:00 committed by Christian Decker
parent 22c8cfc374
commit 52be59587c
8 changed files with 358 additions and 337 deletions

View file

@ -455,6 +455,7 @@
"Getinfo.fees_collected_msat": 13,
"Getinfo.id": 1,
"Getinfo.lightning-dir": 9,
"Getinfo.msatoshi_fees_collected": 18,
"Getinfo.network": 12,
"Getinfo.num_active_channels": 6,
"Getinfo.num_inactive_channels": 7,
@ -485,6 +486,7 @@
"GetRoute.route[].delay": 5,
"GetRoute.route[].direction": 3,
"GetRoute.route[].id": 1,
"GetRoute.route[].msatoshi": 7,
"GetRoute.route[].style": 6
},
"InvoiceRequest": {

View file

@ -72,6 +72,7 @@ message GetinfoResponse {
string lightning_dir = 9;
uint32 blockheight = 11;
string network = 12;
optional uint64 msatoshi_fees_collected = 18;
Amount fees_collected_msat = 13;
repeated GetinfoAddress address = 14;
repeated GetinfoBinding binding = 15;
@ -1194,6 +1195,7 @@ message GetrouteRoute {
bytes id = 1;
string channel = 2;
uint32 direction = 3;
optional uint64 msatoshi = 7;
Amount amount_msat = 4;
uint32 delay = 5;
GetrouteRouteStyle style = 6;

View file

@ -50,6 +50,7 @@ impl From<responses::GetinfoResponse> for pb::GetinfoResponse {
lightning_dir: c.lightning_dir, // Rule #2 for type string
blockheight: c.blockheight, // Rule #2 for type u32
network: c.network, // Rule #2 for type string
msatoshi_fees_collected: c.msatoshi_fees_collected, // Rule #2 for type u64?
fees_collected_msat: Some(c.fees_collected_msat.into()), // Rule #2 for type msat
address: c.address.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3
binding: c.binding.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3
@ -879,6 +880,7 @@ impl From<responses::GetrouteRoute> for pb::GetrouteRoute {
id: c.id.serialize().to_vec(), // Rule #2 for type pubkey
channel: c.channel.to_string(), // Rule #2 for type short_channel_id
direction: c.direction, // Rule #2 for type u32
msatoshi: c.msatoshi, // Rule #2 for type u64?
amount_msat: Some(c.amount_msat.into()), // Rule #2 for type msat
delay: c.delay, // Rule #2 for type u32
style: c.style as i32,

6
cln-rpc/src/model.rs generated
View file

@ -1461,6 +1461,9 @@ pub mod responses {
pub blockheight: u32,
#[serde(alias = "network")]
pub network: String,
#[deprecated]
#[serde(alias = "msatoshi_fees_collected", skip_serializing_if = "Option::is_none")]
pub msatoshi_fees_collected: Option<u64>,
#[serde(alias = "fees_collected_msat")]
pub fees_collected_msat: Amount,
#[serde(alias = "address", skip_serializing_if = "crate::is_none_or_empty")]
@ -3548,6 +3551,9 @@ pub mod responses {
pub channel: ShortChannelId,
#[serde(alias = "direction")]
pub direction: u32,
#[deprecated]
#[serde(alias = "msatoshi", skip_serializing_if = "Option::is_none")]
pub msatoshi: Option<u64>,
#[serde(alias = "amount_msat")]
pub amount_msat: Amount,
#[serde(alias = "delay")]

View file

@ -96,6 +96,8 @@ def gen_enum(e):
if e.description != "":
decl += f"/// {e.description}\n"
if e.deprecated:
decl += "#[deprecated]\n"
decl += f"#[derive(Copy, Clone, Debug, Deserialize, Serialize)]\npub enum {e.typename} {{\n"
for v in e.variants:
if v is None:
@ -145,10 +147,12 @@ def gen_primitive(p):
typename = typemap.get(p.typename, p.typename)
normalize_varname(p)
if p.deprecated:
defi += " #[deprecated]\n"
if p.required:
defi = f" #[serde(alias = \"{org}\")]\n pub {p.name}: {typename},\n"
defi += f" #[serde(alias = \"{org}\")]\n pub {p.name}: {typename},\n"
else:
defi = f" #[serde(alias = \"{org}\", skip_serializing_if = \"Option::is_none\")]\n pub {p.name}: Option<{typename}>,\n"
defi += f" #[serde(alias = \"{org}\", skip_serializing_if = \"Option::is_none\")]\n pub {p.name}: Option<{typename}>,\n"
return defi, decl
@ -173,10 +177,13 @@ def gen_array(a):
itemtype = typemap.get(itemtype, itemtype)
alias = a.name.normalized()
defi = ""
if a.deprecated:
defi += " #[deprecated]\n"
if a.required:
defi = f" #[serde(alias = \"{alias}\")]\n pub {name}: {'Vec<'*a.dims}{itemtype}{'>'*a.dims},\n"
defi += f" #[serde(alias = \"{alias}\")]\n pub {name}: {'Vec<'*a.dims}{itemtype}{'>'*a.dims},\n"
else:
defi = f" #[serde(alias = \"{alias}\", skip_serializing_if = \"crate::is_none_or_empty\")]\n pub {name}: Option<{'Vec<'*a.dims}{itemtype}{'>'*a.dims}>,\n"
defi += f" #[serde(alias = \"{alias}\", skip_serializing_if = \"crate::is_none_or_empty\")]\n pub {name}: Option<{'Vec<'*a.dims}{itemtype}{'>'*a.dims}>,\n"
return (defi, decl)

View file

@ -30,6 +30,7 @@ class Field:
def __init__(self, path, description):
self.path = path
self.description = description
self.deprecated = False
self.required = False
@property
@ -130,10 +131,6 @@ class CompositeField(Field):
desc = ftype["description"] if "description" in ftype else ""
fpath = f"{path}.{fname}"
if ftype.get("deprecated", False):
logger.warning(f"Unmanaged {fpath}, it is deprecated")
continue
if fpath in overrides:
field = copy(overrides[fpath])
field.path = fpath
@ -170,6 +167,7 @@ class CompositeField(Field):
)
if field is not None:
field.deprecated = ftype.get("deprecated", False)
field.required = fname in required
fields.append(field)
logger.debug(field)
@ -320,7 +318,9 @@ class ArrayField(Field):
elif child_js["type"] in PrimitiveField.types:
itemtype = PrimitiveField(
child_js["type"], path, child_js.get("description", "")
child_js["type"],
path,
child_js.get("description", ""),
)
logger.debug(f"Array path={path} dims={dims}, type={itemtype}")

View file

@ -59,6 +59,7 @@ def getinfo2py(m):
"lightning_dir": m.lightning_dir, # PrimitiveField in generate_composite
"blockheight": m.blockheight, # PrimitiveField in generate_composite
"network": m.network, # PrimitiveField in generate_composite
"msatoshi_fees_collected": m.msatoshi_fees_collected, # PrimitiveField in generate_composite
"fees_collected_msat": amount2msat(m.fees_collected_msat), # PrimitiveField in generate_composite
"address": [getinfo_address2py(i) for i in m.address], # ArrayField[composite] in generate_composite
"binding": [getinfo_binding2py(i) for i in m.binding], # ArrayField[composite] in generate_composite
@ -787,6 +788,7 @@ def getroute_route2py(m):
"id": hexlify(m.id), # PrimitiveField in generate_composite
"channel": m.channel, # PrimitiveField in generate_composite
"direction": m.direction, # PrimitiveField in generate_composite
"msatoshi": m.msatoshi, # PrimitiveField in generate_composite
"amount_msat": amount2msat(m.amount_msat), # PrimitiveField in generate_composite
"delay": m.delay, # PrimitiveField in generate_composite
"style": str(m.style), # EnumField in generate_composite

File diff suppressed because one or more lines are too long