"std::time::SystemTime" => Some("u64"),
"std::io::Error" => Some("crate::c_types::IOError"),
+ "core::convert::Infallible" => Some("crate::c_types::NotConstructable"),
+
"bech32::u5" => Some("crate::c_types::u5"),
"core::num::NonZeroU8" => Some("u8"),
// Note that we'll panic for String if is_ref, as we only have non-owned memory, we
// cannot create a &String.
+ "core::convert::Infallible" => Some("panic!(\"You must never construct a NotConstructable! : "),
+
"std::time::Duration"|"core::time::Duration" => Some("std::time::Duration::from_secs("),
"std::time::SystemTime" => Some("(::std::time::SystemTime::UNIX_EPOCH + std::time::Duration::from_secs("),
"alloc::string::String"|"String" => Some(".into_string()"),
"std::io::Error" if !is_ref => Some(".to_rust()"),
+ "core::convert::Infallible" => Some("\")"),
+
"std::time::Duration"|"core::time::Duration" => Some(")"),
"std::time::SystemTime" => Some("))"),
"std::time::SystemTime" => Some(""),
"std::io::Error" if !is_ref => Some("crate::c_types::IOError::from_rust("),
+ "core::convert::Infallible" => Some("panic!(\"Cannot construct an Infallible: "),
+
"bech32::u5" => Some(""),
"bitcoin::secp256k1::key::PublicKey"|"bitcoin::secp256k1::PublicKey"|"secp256k1::key::PublicKey"
"std::time::SystemTime" => Some(".duration_since(::std::time::SystemTime::UNIX_EPOCH).expect(\"Times must be post-1970\").as_secs()"),
"std::io::Error" if !is_ref => Some(")"),
+ "core::convert::Infallible" => Some("\")"),
+
"bech32::u5" => Some(".into()"),
"bitcoin::secp256k1::key::PublicKey"|"bitcoin::secp256k1::PublicKey"|"secp256k1::key::PublicKey"
}
}
+ /// 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 ***
// ****************************
// 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();
}