Add C type for bitcoin::util::address::WitnessVersion
[ldk-c-bindings] / lightning-c-bindings / src / c_types / mod.rs
index 71aa6793cc25c9c3f2de853dedb9de0ff90e5f2b..471b067ac94fab9d19e1e6f034fdf49d1eea8cc2 100644 (file)
@@ -12,6 +12,7 @@ use bitcoin::secp256k1::Error as SecpError;
 use bitcoin::secp256k1::ecdsa::RecoveryId;
 use bitcoin::secp256k1::ecdsa::RecoverableSignature as SecpRecoverableSignature;
 use bitcoin::bech32;
+use bitcoin::util::address;
 
 use core::convert::TryInto; // Bindings need at least rustc 1.34
 use core::ffi::c_void;
@@ -46,6 +47,18 @@ impl Into<bech32::u5> for u5 {
        fn into(self) -> bech32::u5 { bech32::u5::try_from_u8(self.0).expect("u5 objects must be in the range 0..32") }
 }
 
+/// Integer in the range `0..=16`
+#[derive(PartialEq, Eq, Copy, Clone)]
+#[repr(C)]
+pub struct WitnessVersion(u8);
+
+impl From<address::WitnessVersion> for WitnessVersion {
+       fn from(o: address::WitnessVersion) -> Self { Self(o.into_num()) }
+}
+impl Into<address::WitnessVersion> for WitnessVersion {
+       fn into(self) -> address::WitnessVersion { address::WitnessVersion::from_num(self.0).expect("WitnessVersion objects must be in the range 0..=16") }
+}
+
 #[derive(Clone)]
 #[repr(C)]
 /// Represents a valid secp256k1 public key serialized in "compressed form" as a 33 byte array.