From e2145963159417800486d4a12d3e193415a14792 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Tue, 17 Aug 2021 19:44:02 +0000 Subject: [PATCH] Add support for bitcoin::hash_types references and NonZeroU8 --- c-bindings-gen/src/types.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/c-bindings-gen/src/types.rs b/c-bindings-gen/src/types.rs index 13c3b0e..d19897d 100644 --- a/c-bindings-gen/src/types.rs +++ b/c-bindings-gen/src/types.rs @@ -890,6 +890,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "std::io::Error" => Some("crate::c_types::IOError"), "bech32::u5" => Some("crate::c_types::u5"), + "core::num::NonZeroU8" => Some("u8"), "bitcoin::secp256k1::key::PublicKey"|"bitcoin::secp256k1::PublicKey"|"secp256k1::key::PublicKey" => Some("crate::c_types::PublicKey"), @@ -910,6 +911,11 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::blockdata::block::BlockHeader" if is_ref => Some("*const [u8; 80]"), "bitcoin::blockdata::block::Block" if is_ref => Some("crate::c_types::u8slice"), + "bitcoin::hash_types::PubkeyHash"|"bitcoin::hash_types::WPubkeyHash"|"bitcoin::hash_types::ScriptHash" + if is_ref => Some("*const [u8; 20]"), + "bitcoin::hash_types::WScriptHash" + 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" if is_ref => Some("*const [u8; 32]"), @@ -963,6 +969,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "std::time::SystemTime" => Some("(::std::time::SystemTime::UNIX_EPOCH + std::time::Duration::from_secs("), "bech32::u5" => Some(""), + "core::num::NonZeroU8" => Some("core::num::NonZeroU8::new("), "bitcoin::secp256k1::key::PublicKey"|"bitcoin::secp256k1::PublicKey"|"secp256k1::key::PublicKey" if is_ref => Some("&"), @@ -984,6 +991,15 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::blockdata::block::BlockHeader" => Some("&::bitcoin::consensus::encode::deserialize(unsafe { &*"), "bitcoin::blockdata::block::Block" if is_ref => Some("&::bitcoin::consensus::encode::deserialize("), + "bitcoin::hash_types::PubkeyHash" if is_ref => + Some("&bitcoin::hash_types::PubkeyHash::from_hash(bitcoin::hashes::Hash::from_inner(unsafe { *"), + "bitcoin::hash_types::WPubkeyHash" if is_ref => + Some("&bitcoin::hash_types::WPubkeyHash::from_hash(bitcoin::hashes::Hash::from_inner(unsafe { *"), + "bitcoin::hash_types::ScriptHash" if is_ref => + Some("&bitcoin::hash_types::ScriptHash::from_hash(bitcoin::hashes::Hash::from_inner(unsafe { *"), + "bitcoin::hash_types::WScriptHash" if is_ref => + Some("&bitcoin::hash_types::WScriptHash::from_hash(bitcoin::hashes::Hash::from_inner(unsafe { *"), + // 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(&"), @@ -1028,6 +1044,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "std::time::SystemTime" => Some("))"), "bech32::u5" => Some(".into()"), + "core::num::NonZeroU8" => Some(").expect(\"Value must be non-zero\")"), "bitcoin::secp256k1::key::PublicKey"|"bitcoin::secp256k1::PublicKey"|"secp256k1::key::PublicKey" => Some(".into_rust()"), @@ -1045,6 +1062,10 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { "bitcoin::blockdata::block::BlockHeader" => Some(" }).unwrap()"), "bitcoin::blockdata::block::Block" => Some(".to_slice()).unwrap()"), + "bitcoin::hash_types::PubkeyHash"|"bitcoin::hash_types::WPubkeyHash"| + "bitcoin::hash_types::ScriptHash"|"bitcoin::hash_types::WScriptHash" + if is_ref => Some(" }.clone()))"), + // 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()"), -- 2.30.2