From e13355318e61e341e7cf3f17257e44d19029c6eb Mon Sep 17 00:00:00 2001 From: yancy Date: Mon, 23 Dec 2024 15:48:16 -0600 Subject: [PATCH] Add From impl SignedAmount and Amount both share the same MAX, therefore the From impl is added in place of TryFrom. --- api/units/all-features.txt | 2 ++ api/units/alloc-only.txt | 2 ++ api/units/no-features.txt | 2 ++ units/src/amount/signed.rs | 7 +++++++ 4 files changed, 13 insertions(+) diff --git a/api/units/all-features.txt b/api/units/all-features.txt index 086f2c172..fe3509909 100644 --- a/api/units/all-features.txt +++ b/api/units/all-features.txt @@ -145,6 +145,7 @@ impl core::cmp::PartialOrd for bitcoin_units::locktime::relative::Height impl core::cmp::PartialOrd for bitcoin_units::locktime::relative::Time impl core::cmp::PartialOrd for bitcoin_units::weight::Weight impl core::convert::AsRef for bitcoin_units::parse::ParseIntError +impl core::convert::From for bitcoin_units::SignedAmount impl core::convert::From for bitcoin_units::amount::ParseAmountError impl core::convert::From for bitcoin_units::amount::ParseError impl core::convert::From for bitcoin_units::amount::ParseAmountError @@ -855,6 +856,7 @@ pub fn bitcoin_units::SignedAmount::div(self, rhs: i64) -> Self::Output pub fn bitcoin_units::SignedAmount::div_assign(&mut self, rhs: i64) pub fn bitcoin_units::SignedAmount::eq(&self, other: &bitcoin_units::SignedAmount) -> bool pub fn bitcoin_units::SignedAmount::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub fn bitcoin_units::SignedAmount::from(value: bitcoin_units::Amount) -> Self pub fn bitcoin_units::SignedAmount::from_btc(btc: f64) -> core::result::Result pub fn bitcoin_units::SignedAmount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result pub fn bitcoin_units::SignedAmount::from_int_btc>(whole_bitcoin: T) -> core::result::Result diff --git a/api/units/alloc-only.txt b/api/units/alloc-only.txt index 220ed9006..f729d550a 100644 --- a/api/units/alloc-only.txt +++ b/api/units/alloc-only.txt @@ -141,6 +141,7 @@ impl core::cmp::PartialOrd for bitcoin_units::locktime::relative::Height impl core::cmp::PartialOrd for bitcoin_units::locktime::relative::Time impl core::cmp::PartialOrd for bitcoin_units::weight::Weight impl core::convert::AsRef for bitcoin_units::parse::ParseIntError +impl core::convert::From for bitcoin_units::SignedAmount impl core::convert::From for bitcoin_units::amount::ParseAmountError impl core::convert::From for bitcoin_units::amount::ParseError impl core::convert::From for bitcoin_units::amount::ParseAmountError @@ -791,6 +792,7 @@ pub fn bitcoin_units::SignedAmount::div(self, rhs: i64) -> Self::Output pub fn bitcoin_units::SignedAmount::div_assign(&mut self, rhs: i64) pub fn bitcoin_units::SignedAmount::eq(&self, other: &bitcoin_units::SignedAmount) -> bool pub fn bitcoin_units::SignedAmount::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub fn bitcoin_units::SignedAmount::from(value: bitcoin_units::Amount) -> Self pub fn bitcoin_units::SignedAmount::from_btc(btc: f64) -> core::result::Result pub fn bitcoin_units::SignedAmount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result pub fn bitcoin_units::SignedAmount::from_int_btc>(whole_bitcoin: T) -> core::result::Result diff --git a/api/units/no-features.txt b/api/units/no-features.txt index 31f49267d..dfcb91f36 100644 --- a/api/units/no-features.txt +++ b/api/units/no-features.txt @@ -141,6 +141,7 @@ impl core::cmp::PartialOrd for bitcoin_units::locktime::relative::Height impl core::cmp::PartialOrd for bitcoin_units::locktime::relative::Time impl core::cmp::PartialOrd for bitcoin_units::weight::Weight impl core::convert::AsRef for bitcoin_units::parse::ParseIntError +impl core::convert::From for bitcoin_units::SignedAmount impl core::convert::From for bitcoin_units::amount::ParseAmountError impl core::convert::From for bitcoin_units::amount::ParseError impl core::convert::From for bitcoin_units::amount::ParseAmountError @@ -767,6 +768,7 @@ pub fn bitcoin_units::SignedAmount::div(self, rhs: i64) -> Self::Output pub fn bitcoin_units::SignedAmount::div_assign(&mut self, rhs: i64) pub fn bitcoin_units::SignedAmount::eq(&self, other: &bitcoin_units::SignedAmount) -> bool pub fn bitcoin_units::SignedAmount::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub fn bitcoin_units::SignedAmount::from(value: bitcoin_units::Amount) -> Self pub fn bitcoin_units::SignedAmount::from_int_btc>(whole_bitcoin: T) -> core::result::Result pub fn bitcoin_units::SignedAmount::from_str(s: &str) -> core::result::Result pub fn bitcoin_units::SignedAmount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result diff --git a/units/src/amount/signed.rs b/units/src/amount/signed.rs index 717d59917..3c9df7f60 100644 --- a/units/src/amount/signed.rs +++ b/units/src/amount/signed.rs @@ -566,6 +566,13 @@ impl FromStr for SignedAmount { } } +impl From for SignedAmount { + fn from(value: Amount) -> Self { + let v = value.to_sat() as i64; // Cast ok, signed amount and amount share positive range. + SignedAmount::from_sat_unchecked(v) + } +} + impl core::iter::Sum for SignedAmount { fn sum>(iter: I) -> Self { let sats: i64 = iter.map(|amt| amt.0).sum();