for module in super_mod.split("::") {
path.push(syn::PathSegment { ident: syn::Ident::new(module, Span::call_site()), arguments: syn::PathArguments::None });
}
+ } else if partial_path == "" && format!("{}", $ident) == "self" {
+ new_path = format!("{}{}", module_path, $path_suffix);
+ for module in module_path.split("::") {
+ path.push(syn::PathSegment { ident: syn::Ident::new(module, Span::call_site()), arguments: syn::PathArguments::None });
+ }
} else if partial_path == "" && format!("{}", $ident) == "crate" {
new_path = format!("{}{}", crate_name, $path_suffix);
let crate_name_ident = format_ident!("{}", crate_name);
"[u8; 32]" if !is_ref => Some("crate::c_types::ThirtyTwoBytes"),
"[u8; 20]" if !is_ref => Some("crate::c_types::TwentyBytes"),
"[u8; 16]" if !is_ref => Some("crate::c_types::SixteenBytes"),
- "[u8; 10]" if !is_ref => Some("crate::c_types::TenBytes"),
+ "[u8; 12]" if !is_ref => Some("crate::c_types::TwelveBytes"),
"[u8; 4]" if !is_ref => Some("crate::c_types::FourBytes"),
"[u8; 3]" if !is_ref => Some("crate::c_types::ThreeBytes"), // Used for RGB values
"std::time::Duration"|"core::time::Duration" => Some("u64"),
"std::time::SystemTime" => Some("u64"),
"std::io::Error" => Some("crate::c_types::IOError"),
+ "core::fmt::Arguments" if is_ref => Some("crate::c_types::Str"),
"core::convert::Infallible" => Some("crate::c_types::NotConstructable"),
"bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"
if !is_ref => Some("crate::c_types::ThirtyTwoBytes"),
"bitcoin::secp256k1::Message" if !is_ref => Some("crate::c_types::ThirtyTwoBytes"),
- "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"|"lightning::ln::channelmanager::PaymentId"
+ "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"
+ |"lightning::ln::channelmanager::PaymentId"|"lightning::chain::keysinterface::KeyMaterial"
if is_ref => Some("*const [u8; 32]"),
- "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"|"lightning::ln::channelmanager::PaymentId"
+ "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"
+ |"lightning::ln::channelmanager::PaymentId"|"lightning::chain::keysinterface::KeyMaterial"
if !is_ref => Some("crate::c_types::ThirtyTwoBytes"),
- // Override the default since Records contain an fmt with a lifetime:
- "lightning::util::logger::Record" => Some("*const std::os::raw::c_char"),
-
"lightning::io::Read" => Some("crate::c_types::u8slice"),
_ => None,
"[u8; 32]" if !is_ref => Some(""),
"[u8; 20]" if !is_ref => Some(""),
"[u8; 16]" if !is_ref => Some(""),
- "[u8; 10]" if !is_ref => Some(""),
+ "[u8; 12]" if !is_ref => Some(""),
"[u8; 4]" if !is_ref => Some(""),
"[u8; 3]" if !is_ref => Some(""),
"lightning::ln::PaymentSecret" if !is_ref => Some("::lightning::ln::PaymentSecret("),
"lightning::ln::channelmanager::PaymentId" if !is_ref => Some("::lightning::ln::channelmanager::PaymentId("),
"lightning::ln::channelmanager::PaymentId" if is_ref=> Some("&::lightning::ln::channelmanager::PaymentId( unsafe { *"),
+ "lightning::chain::keysinterface::KeyMaterial" if !is_ref => Some("::lightning::chain::keysinterface::KeyMaterial("),
+ "lightning::chain::keysinterface::KeyMaterial" if is_ref=> Some("&::lightning::chain::keysinterface::KeyMaterial( unsafe { *"),
// List of traits we map (possibly during processing of other files):
- "crate::util::logger::Logger" => Some(""),
-
"lightning::io::Read" => Some("&mut "),
_ => None,
"[u8; 32]" if !is_ref => Some(".data"),
"[u8; 20]" if !is_ref => Some(".data"),
"[u8; 16]" if !is_ref => Some(".data"),
- "[u8; 10]" if !is_ref => Some(".data"),
+ "[u8; 12]" if !is_ref => Some(".data"),
"[u8; 4]" if !is_ref => Some(".data"),
"[u8; 3]" if !is_ref => Some(".data"),
"bitcoin::hash_types::Txid" if is_ref => Some(" }[..]).unwrap()"),
"bitcoin::hash_types::Txid" => Some(".data[..]).unwrap()"),
"bitcoin::hash_types::BlockHash" if !is_ref => Some(".data[..]).unwrap()"),
- "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"|"lightning::ln::channelmanager::PaymentId"
+ "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"
+ |"lightning::ln::channelmanager::PaymentId"|"lightning::chain::keysinterface::KeyMaterial"
if !is_ref => Some(".data)"),
- "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"|"lightning::ln::channelmanager::PaymentId"
+ "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"
+ |"lightning::ln::channelmanager::PaymentId"|"lightning::chain::keysinterface::KeyMaterial"
if is_ref => Some(" })"),
// List of traits we map (possibly during processing of other files):
- "crate::util::logger::Logger" => Some(""),
-
"lightning::io::Read" => Some(".to_reader()"),
_ => None,
"bitcoin::blockdata::block::Block" if is_ref => Some(("::bitcoin::consensus::encode::serialize(", ")")),
"bitcoin::hash_types::Txid" => None,
- // Override the default since Records contain an fmt with a lifetime:
- // TODO: We should include the other record fields
- "lightning::util::logger::Record" => Some(("std::ffi::CString::new(format!(\"{}\", ", ".args)).unwrap()")),
_ => None,
}.map(|s| s.to_owned())
}
"[u8; 32]" if is_ref => Some(""),
"[u8; 20]" if !is_ref => Some("crate::c_types::TwentyBytes { data: "),
"[u8; 16]" if !is_ref => Some("crate::c_types::SixteenBytes { data: "),
- "[u8; 10]" if !is_ref => Some("crate::c_types::TenBytes { data: "),
+ "[u8; 12]" if !is_ref => Some("crate::c_types::TwelveBytes { data: "),
"[u8; 4]" if !is_ref => Some("crate::c_types::FourBytes { data: "),
"[u8; 3]" if is_ref => Some(""),
"std::time::Duration"|"core::time::Duration" => Some(""),
"std::time::SystemTime" => Some(""),
"std::io::Error" if !is_ref => Some("crate::c_types::IOError::from_rust("),
+ "core::fmt::Arguments" => Some("format!(\"{}\", "),
"core::convert::Infallible" => Some("panic!(\"Cannot construct an Infallible: "),
"bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"
if !is_ref => Some("crate::c_types::ThirtyTwoBytes { data: "),
"bitcoin::secp256k1::Message" if !is_ref => Some("crate::c_types::ThirtyTwoBytes { data: "),
- "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"|"lightning::ln::channelmanager::PaymentId"
+ "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"
+ |"lightning::ln::channelmanager::PaymentId"|"lightning::chain::keysinterface::KeyMaterial"
if is_ref => Some("&"),
- "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"|"lightning::ln::channelmanager::PaymentId"
+ "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"
+ |"lightning::ln::channelmanager::PaymentId"|"lightning::chain::keysinterface::KeyMaterial"
if !is_ref => Some("crate::c_types::ThirtyTwoBytes { data: "),
- // Override the default since Records contain an fmt with a lifetime:
- "lightning::util::logger::Record" => Some("local_"),
-
"lightning::io::Read" => Some("crate::c_types::u8slice::from_vec(&crate::c_types::reader_to_vec("),
_ => None,
"[u8; 32]" if is_ref => Some(""),
"[u8; 20]" if !is_ref => Some(" }"),
"[u8; 16]" if !is_ref => Some(" }"),
- "[u8; 10]" if !is_ref => Some(" }"),
+ "[u8; 12]" if !is_ref => Some(" }"),
"[u8; 4]" if !is_ref => Some(" }"),
"[u8; 3]" if is_ref => Some(""),
"std::time::Duration"|"core::time::Duration" => Some(".as_secs()"),
"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::fmt::Arguments" => Some(").into()"),
"core::convert::Infallible" => Some("\")"),
"bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"
if !is_ref => Some(".into_inner() }"),
"bitcoin::secp256k1::Message" if !is_ref => Some(".as_ref().clone() }"),
- "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"|"lightning::ln::channelmanager::PaymentId"
+ "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"
+ |"lightning::ln::channelmanager::PaymentId"|"lightning::chain::keysinterface::KeyMaterial"
if is_ref => Some(".0"),
- "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"|"lightning::ln::channelmanager::PaymentId"
+ "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret"
+ |"lightning::ln::channelmanager::PaymentId"|"lightning::chain::keysinterface::KeyMaterial"
if !is_ref => Some(".0 }"),
- // Override the default since Records contain an fmt with a lifetime:
- "lightning::util::logger::Record" => Some(".as_ptr()"),
-
"lightning::io::Read" => Some("))"),
_ => None,
}
}
if let Some(t) = single_contained {
+ if let syn::Type::Tuple(syn::TypeTuple { elems, .. }) = t {
+ assert!(elems.is_empty());
+ let inner_name = self.get_c_mangled_container_type(vec![single_contained.unwrap()], generics, "Option").unwrap();
+ return Some(("if ", vec![
+ (format!(".is_none() {{ {}::None }} else {{ {}::Some /*",
+ inner_name, inner_name), format!(""))
+ ], " */}", ContainerPrefixLocation::PerConv));
+ }
if let syn::Type::Reference(syn::TypeReference { elem, .. }) = t {
if let syn::Type::Slice(_) = &**elem {
return Some(("if ", vec![
}
if !self.write_c_type_intern(w, t, generics, false, false, false, false) { return false; }
} else {
- assert!(!is_ref); // We don't currently support outer reference types for non-primitive inners
+ // We don't currently support outer reference types for non-primitive inners,
+ // except for the empty tuple.
+ if let syn::Type::Tuple(t_arg) = t {
+ assert!(t_arg.elems.len() == 0 || !is_ref);
+ } else {
+ assert!(!is_ref);
+ }
if !self.write_c_type_intern(w, t, generics, false, false, false, false) { return false; }
}
}