X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=c-bindings-gen%2Fsrc%2Ftypes.rs;h=ab792520cedabfbc23795ddf19a31c688808bd4f;hb=313fceb0e7ca5784c217da22bc488ccccfb5fda5;hp=3cf9643293ac1a25a199f1e2cf363d894ab44734;hpb=5204f1ab521a3e2c661f787f3aef2fb6c3a2107a;p=ldk-c-bindings diff --git a/c-bindings-gen/src/types.rs b/c-bindings-gen/src/types.rs index 3cf9643..ab79252 100644 --- a/c-bindings-gen/src/types.rs +++ b/c-bindings-gen/src/types.rs @@ -805,6 +805,7 @@ fn initial_clonable_types() -> HashSet { res.insert("crate::c_types::SixteenBytes".to_owned()); res.insert("crate::c_types::TwentyBytes".to_owned()); res.insert("crate::c_types::ThirtyTwoBytes".to_owned()); + res.insert("crate::c_types::EightU16s".to_owned()); res.insert("crate::c_types::SecretKey".to_owned()); res.insert("crate::c_types::PublicKey".to_owned()); res.insert("crate::c_types::Transaction".to_owned()); @@ -971,6 +972,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "[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 + "[u16; 8]" if !is_ref => Some("crate::c_types::EightU16s"), "str" if is_ref => Some("crate::c_types::Str"), "alloc::string::String"|"String" => Some("crate::c_types::Str"), @@ -1008,7 +1010,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::blockdata::transaction::OutPoint" => Some("crate::lightning::chain::transaction::OutPoint"), "bitcoin::blockdata::transaction::Transaction"|"bitcoin::Transaction" => Some("crate::c_types::Transaction"), "bitcoin::Witness" => Some("crate::c_types::Witness"), - "bitcoin::blockdata::transaction::TxOut" if !is_ref => Some("crate::c_types::TxOut"), + "bitcoin::TxOut"|"bitcoin::blockdata::transaction::TxOut" if !is_ref => Some("crate::c_types::TxOut"), "bitcoin::network::constants::Network" => Some("crate::bitcoin::network::Network"), "bitcoin::util::address::WitnessVersion" => Some("crate::c_types::WitnessVersion"), "bitcoin::blockdata::block::BlockHeader" if is_ref => Some("*const [u8; 80]"), @@ -1020,9 +1022,9 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { if is_ref => Some("*const [u8; 32]"), // Newtypes that we just expose in their original form. - "bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash" + "bitcoin::hash_types::Txid"|"bitcoin::BlockHash"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"|"bitcoin::blockdata::constants::ChainHash" if is_ref => Some("*const [u8; 32]"), - "bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash" + "bitcoin::hash_types::Txid"|"bitcoin::BlockHash"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"|"bitcoin::blockdata::constants::ChainHash" 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" @@ -1060,6 +1062,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "[u8; 12]" if !is_ref => Some(""), "[u8; 4]" if !is_ref => Some(""), "[u8; 3]" if !is_ref => Some(""), + "[u16; 8]" if !is_ref => Some(""), "[u8]" if is_ref => Some(""), "[usize]" if is_ref => Some(""), @@ -1102,7 +1105,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::Witness" if is_ref => Some("&"), "bitcoin::Witness" => Some(""), "bitcoin::blockdata::transaction::OutPoint" => Some("crate::c_types::C_to_bitcoin_outpoint("), - "bitcoin::blockdata::transaction::TxOut" if !is_ref => Some(""), + "bitcoin::TxOut"|"bitcoin::blockdata::transaction::TxOut" if !is_ref => Some(""), "bitcoin::network::constants::Network" => Some(""), "bitcoin::util::address::WitnessVersion" => Some(""), "bitcoin::blockdata::block::BlockHeader" => Some("&::bitcoin::consensus::encode::deserialize(unsafe { &*"), @@ -1120,7 +1123,8 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { // Newtypes that we just expose in their original form. "bitcoin::hash_types::Txid" if is_ref => Some("&::bitcoin::hash_types::Txid::from_slice(&unsafe { &*"), "bitcoin::hash_types::Txid" if !is_ref => Some("::bitcoin::hash_types::Txid::from_slice(&"), - "bitcoin::hash_types::BlockHash" => Some("::bitcoin::hash_types::BlockHash::from_slice(&"), + "bitcoin::hash_types::BlockHash"|"bitcoin::BlockHash" => Some("::bitcoin::hash_types::BlockHash::from_slice(&"), + "bitcoin::blockdata::constants::ChainHash" => Some("::bitcoin::blockdata::constants::ChainHash::from_slice(&"), "lightning::ln::PaymentHash" if !is_ref => Some("::lightning::ln::PaymentHash("), "lightning::ln::PaymentHash" if is_ref => Some("&::lightning::ln::PaymentHash(unsafe { *"), "lightning::ln::PaymentPreimage" if !is_ref => Some("::lightning::ln::PaymentPreimage("), @@ -1155,6 +1159,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "[u8; 12]" if !is_ref => Some(".data"), "[u8; 4]" if !is_ref => Some(".data"), "[u8; 3]" if !is_ref => Some(".data"), + "[u16; 8]" if !is_ref => Some(".data"), "[u8]" if is_ref => Some(".to_slice()"), "[usize]" if is_ref => Some(".to_slice()"), @@ -1192,7 +1197,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::blockdata::transaction::Transaction"|"bitcoin::Transaction" => Some(".into_bitcoin()"), "bitcoin::Witness" => Some(".into_bitcoin()"), "bitcoin::blockdata::transaction::OutPoint" => Some(")"), - "bitcoin::blockdata::transaction::TxOut" if !is_ref => Some(".into_rust()"), + "bitcoin::TxOut"|"bitcoin::blockdata::transaction::TxOut" if !is_ref => Some(".into_rust()"), "bitcoin::network::constants::Network" => Some(".into_bitcoin()"), "bitcoin::util::address::WitnessVersion" => Some(".into()"), "bitcoin::blockdata::block::BlockHeader" => Some(" }).unwrap()"), @@ -1205,7 +1210,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { // Newtypes that we just expose in their original form. "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()"), + "bitcoin::hash_types::BlockHash"|"bitcoin::BlockHash"|"bitcoin::blockdata::constants::ChainHash" if !is_ref => Some(".data[..]).unwrap()"), "lightning::ln::PaymentHash"|"lightning::ln::PaymentPreimage"|"lightning::ln::PaymentSecret" |"lightning::ln::channelmanager::PaymentId"|"lightning::ln::channelmanager::InterceptId" |"lightning::chain::keysinterface::KeyMaterial" @@ -1253,6 +1258,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "[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(""), + "[u16; 8]" if !is_ref => Some("crate::c_types::EightU16s { data: "), "[u8]" if is_ref => Some("local_"), "[usize]" if is_ref => Some("local_"), @@ -1294,7 +1300,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::Witness" if is_ref => Some("crate::c_types::Witness::from_bitcoin("), "bitcoin::Witness" if !is_ref => Some("crate::c_types::Witness::from_bitcoin(&"), "bitcoin::blockdata::transaction::OutPoint" => Some("crate::c_types::bitcoin_to_C_outpoint("), - "bitcoin::blockdata::transaction::TxOut" if !is_ref => Some("crate::c_types::TxOut::from_rust("), + "bitcoin::TxOut"|"bitcoin::blockdata::transaction::TxOut" if !is_ref => Some("crate::c_types::TxOut::from_rust("), "bitcoin::network::constants::Network" => Some("crate::bitcoin::network::Network::from_bitcoin("), "bitcoin::util::address::WitnessVersion" => Some(""), "bitcoin::blockdata::block::BlockHeader" if is_ref => Some("&local_"), @@ -1303,9 +1309,9 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::hash_types::Txid" if !is_ref => Some("crate::c_types::ThirtyTwoBytes { data: "), // Newtypes that we just expose in their original form. - "bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash" + "bitcoin::hash_types::Txid"|"bitcoin::BlockHash"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"|"bitcoin::blockdata::constants::ChainHash" if is_ref => Some(""), - "bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash" + "bitcoin::hash_types::Txid"|"bitcoin::BlockHash"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"|"bitcoin::blockdata::constants::ChainHash" 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" @@ -1338,6 +1344,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "[u8; 12]" if !is_ref => Some(" }"), "[u8; 4]" if !is_ref => Some(" }"), "[u8; 3]" if is_ref => Some(""), + "[u16; 8]" if !is_ref => Some(" }"), "[u8]" if is_ref => Some(""), "[usize]" if is_ref => Some(""), @@ -1377,7 +1384,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::blockdata::transaction::Transaction"|"bitcoin::Transaction" => Some(")"), "bitcoin::Witness" => Some(")"), "bitcoin::blockdata::transaction::OutPoint" => Some(")"), - "bitcoin::blockdata::transaction::TxOut" if !is_ref => Some(")"), + "bitcoin::TxOut"|"bitcoin::blockdata::transaction::TxOut" if !is_ref => Some(")"), "bitcoin::network::constants::Network" => Some(")"), "bitcoin::util::address::WitnessVersion" => Some(".into()"), "bitcoin::blockdata::block::BlockHeader" if is_ref => Some(""), @@ -1386,9 +1393,9 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::hash_types::Txid" if !is_ref => Some(".into_inner() }"), // Newtypes that we just expose in their original form. - "bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash" + "bitcoin::hash_types::Txid"|"bitcoin::BlockHash"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"|"bitcoin::blockdata::constants::ChainHash" if is_ref => Some(".as_inner()"), - "bitcoin::hash_types::Txid"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash" + "bitcoin::hash_types::Txid"|"bitcoin::BlockHash"|"bitcoin::hash_types::BlockHash"|"bitcoin_hashes::sha256::Hash"|"bitcoin::blockdata::constants::ChainHash" 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" @@ -1492,7 +1499,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "lightning::ln::PaymentHash" => true, "lightning::ln::PaymentPreimage" => true, "lightning::ln::channelmanager::PaymentId" => true, - "bitcoin::hash_types::BlockHash" => true, + "bitcoin::hash_types::BlockHash"|"bitcoin::BlockHash" => true, "secp256k1::PublicKey"|"bitcoin::secp256k1::PublicKey" => true, _ => false, } @@ -2811,6 +2818,13 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { if let syn::Type::Path(p) = &*refelem.elem { write_path!(p, Some(&mut mangled_tuple_type)); } else { return false; } + } else if let syn::Type::Array(_) = elem { + let mut resolved = Vec::new(); + if !self.write_c_type_intern(&mut resolved, &elem, generics, false, false, true, false, true) { return false; } + let array_inner = String::from_utf8(resolved).unwrap(); + let arr_name = array_inner.split("::").last().unwrap(); + write!(w, "{}", arr_name).unwrap(); + write!(mangled_type, "{}", arr_name).unwrap(); } else { return false; } } write!(w, "Z").unwrap();