From bd76083ef39691612107fca226bad84498fc3396 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 22 Sep 2021 23:14:41 +0000 Subject: [PATCH] Work around broken resolution on non-pub use aliasing in another module --- c-bindings-gen/src/types.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/c-bindings-gen/src/types.rs b/c-bindings-gen/src/types.rs index d15cec2..b4b46a8 100644 --- a/c-bindings-gen/src/types.rs +++ b/c-bindings-gen/src/types.rs @@ -1271,6 +1271,18 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { } } + /// When printing a reference to the source crate's rust type, if we need to map it to a + /// different "real" type, it can be done so here. + /// This is useful to work around limitations in the binding type resolver, where we reference + /// a non-public `use` alias. + /// TODO: We should never need to use this! + fn real_rust_type_mapping<'equiv>(&self, thing: &'equiv str) -> &'equiv str { + match thing { + "lightning::io::Read" => "std::io::Read", + _ => thing, + } + } + // **************************** // *** Container Processing *** // **************************** @@ -1567,7 +1579,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { // If we're printing a generic argument, it needs to reference the crate, otherwise // the original crate: } else if self.maybe_resolve_path(&path, None).as_ref() == Some(&resolved) { - write!(w, "{}", resolved).unwrap(); + write!(w, "{}", self.real_rust_type_mapping(&resolved)).unwrap(); } else { write!(w, "crate::{}", resolved).unwrap(); } -- 2.30.2