From 6d76642f7e65e9fb4af0c8bd1225e1d1fd09e4e0 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Thu, 6 Apr 2023 18:26:43 +0200 Subject: [PATCH] cln: Fix routehints conversion from cln-rpc and cln-grpc Fixes #6143 Changelog-Fixed: clnrs: Fixed an issue converting routehints in keysend --- cln-rpc/src/primitives.rs | 50 +++++++++++++++++++++++++++++++++++++-- tests/test_cln_rs.py | 1 - 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/cln-rpc/src/primitives.rs b/cln-rpc/src/primitives.rs index 076118267..074a1c5d6 100644 --- a/cln-rpc/src/primitives.rs +++ b/cln-rpc/src/primitives.rs @@ -652,16 +652,62 @@ pub struct Routehop { pub expirydelta: u16, } -#[derive(Clone, Debug, Serialize, Deserialize)] +#[derive(Clone, Debug)] pub struct Routehint { pub hops: Vec, } -#[derive(Clone, Debug, Serialize, Deserialize)] +#[derive(Clone, Debug)] pub struct RoutehintList { pub hints: Vec, } +use serde::ser::SerializeSeq; + +impl Serialize for Routehint { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + let mut seq = serializer.serialize_seq(Some(self.hops.len()))?; + for e in self.hops.iter() { + seq.serialize_element(e)?; + } + seq.end() + } +} + +impl Serialize for RoutehintList { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + let mut seq = serializer.serialize_seq(Some(self.hints.len()))?; + for e in self.hints.iter() { + seq.serialize_element(e)?; + } + seq.end() + } +} + +impl<'de> Deserialize<'de> for RoutehintList { + fn deserialize(_deserializer: D) -> Result + where + D: Deserializer<'de>, + { + todo!("Required once we roundtrip, but not necessary for cln-rpc itself") + } +} + +impl<'de> Deserialize<'de> for Routehint { + fn deserialize(_deserializer: D) -> Result + where + D: Deserializer<'de>, + { + todo!("Required once we roundtrip, but not necessary for cln-rpc itself") + } +} + /// An error returned by the lightningd RPC consisting of a code and a /// message #[derive(Clone, Serialize, Deserialize, Debug)] diff --git a/tests/test_cln_rs.py b/tests/test_cln_rs.py index d36a47c22..c2a6a4a39 100644 --- a/tests/test_cln_rs.py +++ b/tests/test_cln_rs.py @@ -249,7 +249,6 @@ def test_grpc_wrong_auth(node_factory): stub.Getinfo(nodepb.GetinfoRequest()) -@pytest.mark.xfail(strict=True) def test_grpc_keysend_routehint(bitcoind, node_factory): """The routehints are a bit special, test that conversions work.