Repository: rust-bitcoin/rust-bitcoin
Pull request #3798 (2024-12-21 16:22:27)

refactor: use amount type
Separate out refactor commit from https://github.com/rust-bitcoin/rust-bitcoin/pull/3794.  Can be merged independently.

coveralls: ## Pull Request Test Coverage Report for [Build 12446722690](https://coveralls.io/builds/71461380)


### Details

* **5** of **5**   **(100.0%)**  changed or added relevant lines in **1** file are covered.
* No unchanged relevant lines lost coverage.
* Overall coverage remained the same at **83.037%**

---



|  Totals | [![Coverage Status](https://coveralls.io/builds/71461380/badge)](https://coveralls.io/builds/71461380) |
| :-- | --: |
| Change from base [Build 12433936680](https://coveralls.io/builds/71452231): |  0.0% |
| Covered Lines: | 20422 |
| Relevant Lines: | 24594 |

---
##### 💛  - [Coveralls](https://coveralls.io)

apoelstra: Will wait on @tcharding to ack since he is in the middle of working on these modules.
tcharding: I am not willing to put my ACK on any PRs from @yancyribbens with single line commit logs. Explained here: https://github.com/rust-bitcoin/rust-bitcoin/pull/3769#issuecomment-2558603414
tcharding: This diff is unreviewable on its own with no commit log because from the diff one has no idea what the implementation of `checked_add` and `checked_sub` are for `Amount` and if it matches the `u64`. 

Patch:
diff --git a/api/units/all-features.txt b/api/units/all-features.txt
index 27369ab2..d0c77286 100644
--- a/api/units/all-features.txt
+++ b/api/units/all-features.txt
@@ -1,15 +1,19 @@
 #[non_exhaustive] pub enum bitcoin_units::amount::Denomination
 #[non_exhaustive] pub enum bitcoin_units::amount::ParseDenominationError
+#[non_exhaustive] pub enum bitcoin_units::amount::error::ParseDenominationError
 #[non_exhaustive] pub struct bitcoin_units::amount::MissingDenominationError
 #[non_exhaustive] pub struct bitcoin_units::amount::PossiblyConfusingDenominationError(_)
 #[non_exhaustive] pub struct bitcoin_units::amount::UnknownDenominationError(_)
+#[non_exhaustive] pub struct bitcoin_units::amount::error::MissingDenominationError
+#[non_exhaustive] pub struct bitcoin_units::amount::error::PossiblyConfusingDenominationError(_)
+#[non_exhaustive] pub struct bitcoin_units::amount::error::UnknownDenominationError(_)
 #[non_exhaustive] pub struct bitcoin_units::locktime::absolute::ConversionError
 #[non_exhaustive] pub struct bitcoin_units::parse::ParseIntError
 impl bitcoin_units::Amount
 impl bitcoin_units::SignedAmount
 impl bitcoin_units::amount::Denomination
 impl bitcoin_units::amount::Display
-impl bitcoin_units::amount::OutOfRangeError
+impl bitcoin_units::amount::error::OutOfRangeError
 impl bitcoin_units::amount::serde::SerdeAmount for bitcoin_units::Amount
 impl bitcoin_units::amount::serde::SerdeAmount for bitcoin_units::SignedAmount
 impl bitcoin_units::amount::serde::SerdeAmountForOpt for bitcoin_units::Amount
@@ -37,17 +41,17 @@ impl core::clone::Clone for bitcoin_units::Amount
 impl core::clone::Clone for bitcoin_units::SignedAmount
 impl core::clone::Clone for bitcoin_units::amount::Denomination
 impl core::clone::Clone for bitcoin_units::amount::Display
-impl core::clone::Clone for bitcoin_units::amount::InputTooLargeError
-impl core::clone::Clone for bitcoin_units::amount::InvalidCharacterError
-impl core::clone::Clone for bitcoin_units::amount::MissingDenominationError
-impl core::clone::Clone for bitcoin_units::amount::MissingDigitsError
-impl core::clone::Clone for bitcoin_units::amount::OutOfRangeError
-impl core::clone::Clone for bitcoin_units::amount::ParseAmountError
-impl core::clone::Clone for bitcoin_units::amount::ParseDenominationError
-impl core::clone::Clone for bitcoin_units::amount::ParseError
-impl core::clone::Clone for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::clone::Clone for bitcoin_units::amount::TooPreciseError
-impl core::clone::Clone for bitcoin_units::amount::UnknownDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::InputTooLargeError
+impl core::clone::Clone for bitcoin_units::amount::error::InvalidCharacterError
+impl core::clone::Clone for bitcoin_units::amount::error::MissingDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::MissingDigitsError
+impl core::clone::Clone for bitcoin_units::amount::error::OutOfRangeError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseAmountError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseError
+impl core::clone::Clone for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::TooPreciseError
+impl core::clone::Clone for bitcoin_units::amount::error::UnknownDenominationError
 impl core::clone::Clone for bitcoin_units::block::BlockHeight
 impl core::clone::Clone for bitcoin_units::block::BlockInterval
 impl core::clone::Clone for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -67,17 +71,17 @@ impl core::clone::Clone for bitcoin_units::weight::Weight
 impl core::cmp::Eq for bitcoin_units::Amount
 impl core::cmp::Eq for bitcoin_units::SignedAmount
 impl core::cmp::Eq for bitcoin_units::amount::Denomination
-impl core::cmp::Eq for bitcoin_units::amount::InputTooLargeError
-impl core::cmp::Eq for bitcoin_units::amount::InvalidCharacterError
-impl core::cmp::Eq for bitcoin_units::amount::MissingDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::MissingDigitsError
-impl core::cmp::Eq for bitcoin_units::amount::OutOfRangeError
-impl core::cmp::Eq for bitcoin_units::amount::ParseAmountError
-impl core::cmp::Eq for bitcoin_units::amount::ParseDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::ParseError
-impl core::cmp::Eq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::TooPreciseError
-impl core::cmp::Eq for bitcoin_units::amount::UnknownDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::InputTooLargeError
+impl core::cmp::Eq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::cmp::Eq for bitcoin_units::amount::error::MissingDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::MissingDigitsError
+impl core::cmp::Eq for bitcoin_units::amount::error::OutOfRangeError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseAmountError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseError
+impl core::cmp::Eq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::TooPreciseError
+impl core::cmp::Eq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::cmp::Eq for bitcoin_units::block::BlockHeight
 impl core::cmp::Eq for bitcoin_units::block::BlockInterval
 impl core::cmp::Eq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -107,17 +111,17 @@ impl core::cmp::Ord for bitcoin_units::weight::Weight
 impl core::cmp::PartialEq for bitcoin_units::Amount
 impl core::cmp::PartialEq for bitcoin_units::SignedAmount
 impl core::cmp::PartialEq for bitcoin_units::amount::Denomination
-impl core::cmp::PartialEq for bitcoin_units::amount::InputTooLargeError
-impl core::cmp::PartialEq for bitcoin_units::amount::InvalidCharacterError
-impl core::cmp::PartialEq for bitcoin_units::amount::MissingDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::MissingDigitsError
-impl core::cmp::PartialEq for bitcoin_units::amount::OutOfRangeError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseAmountError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseError
-impl core::cmp::PartialEq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::TooPreciseError
-impl core::cmp::PartialEq for bitcoin_units::amount::UnknownDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::InputTooLargeError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::MissingDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::MissingDigitsError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::OutOfRangeError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseAmountError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::TooPreciseError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::cmp::PartialEq for bitcoin_units::block::BlockHeight
 impl core::cmp::PartialEq for bitcoin_units::block::BlockInterval
 impl core::cmp::PartialEq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -145,18 +149,18 @@ 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<core::num::error::ParseIntError> for bitcoin_units::parse::ParseIntError
-impl core::convert::From<bitcoin_units::amount::InputTooLargeError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::InputTooLargeError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::InvalidCharacterError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::InvalidCharacterError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::MissingDigitsError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::MissingDigitsError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::OutOfRangeError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::OutOfRangeError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::ParseAmountError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::ParseDenominationError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::TooPreciseError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::TooPreciseError> for bitcoin_units::amount::ParseError
+impl core::convert::From<bitcoin_units::amount::error::InputTooLargeError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::InputTooLargeError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::InvalidCharacterError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::InvalidCharacterError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::MissingDigitsError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::MissingDigitsError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::OutOfRangeError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::OutOfRangeError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::ParseAmountError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::ParseDenominationError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::TooPreciseError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::TooPreciseError> for bitcoin_units::amount::error::ParseError
 impl core::convert::From<bitcoin_units::block::BlockHeight> for u32
 impl core::convert::From<bitcoin_units::block::BlockInterval> for u32
 impl core::convert::From<bitcoin_units::fee_rate::FeeRate> for u64
@@ -166,9 +170,9 @@ impl core::convert::From<bitcoin_units::parse::ParseIntError> for bitcoin_units:
 impl core::convert::From<bitcoin_units::parse::ParseIntError> for bitcoin_units::parse::UnprefixedHexError
 impl core::convert::From<bitcoin_units::parse::ParseIntError> for core::num::error::ParseIntError
 impl core::convert::From<bitcoin_units::weight::Weight> for u64
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseDenominationError
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseDenominationError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseError
 impl core::convert::From<core::convert::Infallible> for bitcoin_units::parse::PrefixedHexError
 impl core::convert::From<core::convert::Infallible> for bitcoin_units::parse::UnprefixedHexError
 impl core::convert::From<u16> for bitcoin_units::locktime::relative::Height
@@ -207,16 +211,16 @@ impl core::default::Default for bitcoin_units::SignedAmount
 impl core::default::Default for bitcoin_units::block::BlockInterval
 impl core::default::Default for bitcoin_units::locktime::relative::Height
 impl core::default::Default for bitcoin_units::locktime::relative::Time
-impl core::error::Error for bitcoin_units::amount::InputTooLargeError
-impl core::error::Error for bitcoin_units::amount::InvalidCharacterError
-impl core::error::Error for bitcoin_units::amount::MissingDigitsError
-impl core::error::Error for bitcoin_units::amount::OutOfRangeError
-impl core::error::Error for bitcoin_units::amount::ParseAmountError
-impl core::error::Error for bitcoin_units::amount::ParseDenominationError
-impl core::error::Error for bitcoin_units::amount::ParseError
-impl core::error::Error for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::error::Error for bitcoin_units::amount::TooPreciseError
-impl core::error::Error for bitcoin_units::amount::UnknownDenominationError
+impl core::error::Error for bitcoin_units::amount::error::InputTooLargeError
+impl core::error::Error for bitcoin_units::amount::error::InvalidCharacterError
+impl core::error::Error for bitcoin_units::amount::error::MissingDigitsError
+impl core::error::Error for bitcoin_units::amount::error::OutOfRangeError
+impl core::error::Error for bitcoin_units::amount::error::ParseAmountError
+impl core::error::Error for bitcoin_units::amount::error::ParseDenominationError
+impl core::error::Error for bitcoin_units::amount::error::ParseError
+impl core::error::Error for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::error::Error for bitcoin_units::amount::error::TooPreciseError
+impl core::error::Error for bitcoin_units::amount::error::UnknownDenominationError
 impl core::error::Error for bitcoin_units::block::TooBigForRelativeBlockHeightError
 impl core::error::Error for bitcoin_units::locktime::absolute::ConversionError
 impl core::error::Error for bitcoin_units::locktime::absolute::ParseHeightError
@@ -229,17 +233,17 @@ impl core::fmt::Debug for bitcoin_units::Amount
 impl core::fmt::Debug for bitcoin_units::SignedAmount
 impl core::fmt::Debug for bitcoin_units::amount::Denomination
 impl core::fmt::Debug for bitcoin_units::amount::Display
-impl core::fmt::Debug for bitcoin_units::amount::InputTooLargeError
-impl core::fmt::Debug for bitcoin_units::amount::InvalidCharacterError
-impl core::fmt::Debug for bitcoin_units::amount::MissingDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::MissingDigitsError
-impl core::fmt::Debug for bitcoin_units::amount::OutOfRangeError
-impl core::fmt::Debug for bitcoin_units::amount::ParseAmountError
-impl core::fmt::Debug for bitcoin_units::amount::ParseDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::ParseError
-impl core::fmt::Debug for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::TooPreciseError
-impl core::fmt::Debug for bitcoin_units::amount::UnknownDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::InputTooLargeError
+impl core::fmt::Debug for bitcoin_units::amount::error::InvalidCharacterError
+impl core::fmt::Debug for bitcoin_units::amount::error::MissingDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::MissingDigitsError
+impl core::fmt::Debug for bitcoin_units::amount::error::OutOfRangeError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseAmountError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseError
+impl core::fmt::Debug for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::TooPreciseError
+impl core::fmt::Debug for bitcoin_units::amount::error::UnknownDenominationError
 impl core::fmt::Debug for bitcoin_units::block::BlockHeight
 impl core::fmt::Debug for bitcoin_units::block::BlockInterval
 impl core::fmt::Debug for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -260,16 +264,16 @@ impl core::fmt::Display for bitcoin_units::Amount
 impl core::fmt::Display for bitcoin_units::SignedAmount
 impl core::fmt::Display for bitcoin_units::amount::Denomination
 impl core::fmt::Display for bitcoin_units::amount::Display
-impl core::fmt::Display for bitcoin_units::amount::InputTooLargeError
-impl core::fmt::Display for bitcoin_units::amount::InvalidCharacterError
-impl core::fmt::Display for bitcoin_units::amount::MissingDigitsError
-impl core::fmt::Display for bitcoin_units::amount::OutOfRangeError
-impl core::fmt::Display for bitcoin_units::amount::ParseAmountError
-impl core::fmt::Display for bitcoin_units::amount::ParseDenominationError
-impl core::fmt::Display for bitcoin_units::amount::ParseError
-impl core::fmt::Display for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::fmt::Display for bitcoin_units::amount::TooPreciseError
-impl core::fmt::Display for bitcoin_units::amount::UnknownDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::InputTooLargeError
+impl core::fmt::Display for bitcoin_units::amount::error::InvalidCharacterError
+impl core::fmt::Display for bitcoin_units::amount::error::MissingDigitsError
+impl core::fmt::Display for bitcoin_units::amount::error::OutOfRangeError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseAmountError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseError
+impl core::fmt::Display for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::TooPreciseError
+impl core::fmt::Display for bitcoin_units::amount::error::UnknownDenominationError
 impl core::fmt::Display for bitcoin_units::block::BlockHeight
 impl core::fmt::Display for bitcoin_units::block::BlockInterval
 impl core::fmt::Display for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -305,7 +309,7 @@ impl core::iter::traits::accum::Sum for bitcoin_units::weight::Weight
 impl core::marker::Copy for bitcoin_units::Amount
 impl core::marker::Copy for bitcoin_units::SignedAmount
 impl core::marker::Copy for bitcoin_units::amount::Denomination
-impl core::marker::Copy for bitcoin_units::amount::OutOfRangeError
+impl core::marker::Copy for bitcoin_units::amount::error::OutOfRangeError
 impl core::marker::Copy for bitcoin_units::block::BlockHeight
 impl core::marker::Copy for bitcoin_units::block::BlockInterval
 impl core::marker::Copy for bitcoin_units::fee_rate::FeeRate
@@ -318,17 +322,17 @@ impl core::marker::Freeze for bitcoin_units::Amount
 impl core::marker::Freeze for bitcoin_units::SignedAmount
 impl core::marker::Freeze for bitcoin_units::amount::Denomination
 impl core::marker::Freeze for bitcoin_units::amount::Display
-impl core::marker::Freeze for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Freeze for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Freeze for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Freeze for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Freeze for bitcoin_units::amount::ParseAmountError
-impl core::marker::Freeze for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::ParseError
-impl core::marker::Freeze for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::TooPreciseError
-impl core::marker::Freeze for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Freeze for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Freeze for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Freeze for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseError
+impl core::marker::Freeze for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Freeze for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Freeze for bitcoin_units::block::BlockHeight
 impl core::marker::Freeze for bitcoin_units::block::BlockInterval
 impl core::marker::Freeze for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -349,17 +353,17 @@ impl core::marker::Send for bitcoin_units::Amount
 impl core::marker::Send for bitcoin_units::SignedAmount
 impl core::marker::Send for bitcoin_units::amount::Denomination
 impl core::marker::Send for bitcoin_units::amount::Display
-impl core::marker::Send for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Send for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Send for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Send for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Send for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Send for bitcoin_units::amount::ParseAmountError
-impl core::marker::Send for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Send for bitcoin_units::amount::ParseError
-impl core::marker::Send for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Send for bitcoin_units::amount::TooPreciseError
-impl core::marker::Send for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Send for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Send for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Send for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Send for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Send for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::ParseError
+impl core::marker::Send for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Send for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Send for bitcoin_units::block::BlockHeight
 impl core::marker::Send for bitcoin_units::block::BlockInterval
 impl core::marker::Send for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -379,17 +383,17 @@ impl core::marker::Send for bitcoin_units::weight::Weight
 impl core::marker::StructuralPartialEq for bitcoin_units::Amount
 impl core::marker::StructuralPartialEq for bitcoin_units::SignedAmount
 impl core::marker::StructuralPartialEq for bitcoin_units::amount::Denomination
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::InputTooLargeError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::MissingDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::MissingDigitsError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::OutOfRangeError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseAmountError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::TooPreciseError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::StructuralPartialEq for bitcoin_units::block::BlockHeight
 impl core::marker::StructuralPartialEq for bitcoin_units::block::BlockInterval
 impl core::marker::StructuralPartialEq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -410,17 +414,17 @@ impl core::marker::Sync for bitcoin_units::Amount
 impl core::marker::Sync for bitcoin_units::SignedAmount
 impl core::marker::Sync for bitcoin_units::amount::Denomination
 impl core::marker::Sync for bitcoin_units::amount::Display
-impl core::marker::Sync for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Sync for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Sync for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Sync for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Sync for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Sync for bitcoin_units::amount::ParseAmountError
-impl core::marker::Sync for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Sync for bitcoin_units::amount::ParseError
-impl core::marker::Sync for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Sync for bitcoin_units::amount::TooPreciseError
-impl core::marker::Sync for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Sync for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Sync for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Sync for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseError
+impl core::marker::Sync for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Sync for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Sync for bitcoin_units::block::BlockHeight
 impl core::marker::Sync for bitcoin_units::block::BlockInterval
 impl core::marker::Sync for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -441,17 +445,17 @@ impl core::marker::Unpin for bitcoin_units::Amount
 impl core::marker::Unpin for bitcoin_units::SignedAmount
 impl core::marker::Unpin for bitcoin_units::amount::Denomination
 impl core::marker::Unpin for bitcoin_units::amount::Display
-impl core::marker::Unpin for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Unpin for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Unpin for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Unpin for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Unpin for bitcoin_units::amount::ParseAmountError
-impl core::marker::Unpin for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::ParseError
-impl core::marker::Unpin for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::TooPreciseError
-impl core::marker::Unpin for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Unpin for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Unpin for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Unpin for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseError
+impl core::marker::Unpin for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Unpin for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Unpin for bitcoin_units::block::BlockHeight
 impl core::marker::Unpin for bitcoin_units::block::BlockInterval
 impl core::marker::Unpin for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -541,17 +545,17 @@ impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::Amount
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::SignedAmount
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::Denomination
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::Display
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::InputTooLargeError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::InvalidCharacterError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::MissingDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::MissingDigitsError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::OutOfRangeError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseAmountError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::TooPreciseError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::UnknownDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::InputTooLargeError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::InvalidCharacterError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::MissingDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::MissingDigitsError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::OutOfRangeError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseAmountError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::TooPreciseError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::UnknownDenominationError
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::BlockHeight
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::BlockInterval
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -572,17 +576,17 @@ impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::Amount
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::SignedAmount
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::Denomination
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::Display
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::InputTooLargeError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::InvalidCharacterError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::MissingDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::MissingDigitsError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::OutOfRangeError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseAmountError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::TooPreciseError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::UnknownDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::InputTooLargeError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::InvalidCharacterError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::MissingDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::MissingDigitsError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::OutOfRangeError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseAmountError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::TooPreciseError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::UnknownDenominationError
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::BlockHeight
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::BlockInterval
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -620,14 +624,7 @@ impl serde::ser::Serialize for bitcoin_units::locktime::relative::Time
 impl serde::ser::Serialize for bitcoin_units::weight::Weight
 impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::Amount
 impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::SignedAmount
-impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::amount::Denomination
-impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::block::BlockHeight
-impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::block::BlockInterval
 impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::fee_rate::FeeRate
-impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::locktime::absolute::Height
-impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::locktime::absolute::Time
-impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::locktime::relative::Height
-impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::locktime::relative::Time
 impl<'a> arbitrary::Arbitrary<'a> for bitcoin_units::weight::Weight
 impl<'a> core::iter::traits::accum::Sum<&'a bitcoin_units::Amount> for bitcoin_units::Amount
 impl<'a> core::iter::traits::accum::Sum<&'a bitcoin_units::SignedAmount> for bitcoin_units::SignedAmount
@@ -658,8 +655,10 @@ pub bitcoin_units::amount::Denomination::CentiBitcoin
 pub bitcoin_units::amount::Denomination::MicroBitcoin
 pub bitcoin_units::amount::Denomination::MilliBitcoin
 pub bitcoin_units::amount::Denomination::Satoshi
-pub bitcoin_units::amount::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::PossiblyConfusingDenominationError)
-pub bitcoin_units::amount::ParseDenominationError::Unknown(bitcoin_units::amount::UnknownDenominationError)
+pub bitcoin_units::amount::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::error::PossiblyConfusingDenominationError)
+pub bitcoin_units::amount::ParseDenominationError::Unknown(bitcoin_units::amount::error::UnknownDenominationError)
+pub bitcoin_units::amount::error::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::error::PossiblyConfusingDenominationError)
+pub bitcoin_units::amount::error::ParseDenominationError::Unknown(bitcoin_units::amount::error::UnknownDenominationError)
 pub const bitcoin_units::Amount::MAX: Self
 pub const bitcoin_units::Amount::MAX_MONEY: Self
 pub const bitcoin_units::Amount::MIN: Self
@@ -804,12 +803,12 @@ pub fn bitcoin_units::Amount::div(self, rhs: u64) -> Self::Output
 pub fn bitcoin_units::Amount::div_assign(&mut self, rhs: u64)
 pub fn bitcoin_units::Amount::eq(&self, other: &bitcoin_units::Amount) -> bool
 pub fn bitcoin_units::Amount::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::Amount::from_btc(btc: f64) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::Amount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::Amount::from_int_btc<T: core::convert::Into<u64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::Amount::from_btc(btc: f64) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::Amount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::Amount::from_int_btc<T: core::convert::Into<u64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::Amount::from_str(s: &str) -> core::result::Result<Self, Self::Err>
-pub fn bitcoin_units::Amount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::Amount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseError>
+pub fn bitcoin_units::Amount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::Amount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseError>
 pub fn bitcoin_units::Amount::hash<__H: core::hash::Hasher>(&self, state: &mut __H)
 pub fn bitcoin_units::Amount::mul(self, rhs: u64) -> Self::Output
 pub fn bitcoin_units::Amount::mul_assign(&mut self, rhs: u64)
@@ -830,7 +829,7 @@ pub fn bitcoin_units::Amount::sum<I: core::iter::traits::iterator::Iterator<Item
 pub fn bitcoin_units::Amount::sum<I>(iter: I) -> Self where I: core::iter::traits::iterator::Iterator<Item = &'a bitcoin_units::Amount>
 pub fn bitcoin_units::Amount::to_btc(self) -> f64
 pub fn bitcoin_units::Amount::to_float_in(self, denom: bitcoin_units::amount::Denomination) -> f64
-pub fn bitcoin_units::Amount::to_signed(self) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::Amount::to_signed(self) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::Amount::to_string_in(self, denom: bitcoin_units::amount::Denomination) -> alloc::string::String
 pub fn bitcoin_units::Amount::to_string_with_denomination(self, denom: bitcoin_units::amount::Denomination) -> alloc::string::String
 pub fn bitcoin_units::Amount::try_from(value: bitcoin_units::SignedAmount) -> core::result::Result<Self, Self::Error>
@@ -855,12 +854,12 @@ 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_btc(btc: f64) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::SignedAmount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::SignedAmount::from_int_btc<T: core::convert::Into<i64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::SignedAmount::from_btc(btc: f64) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::SignedAmount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::SignedAmount::from_int_btc<T: core::convert::Into<i64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::SignedAmount::from_str(s: &str) -> core::result::Result<Self, Self::Err>
-pub fn bitcoin_units::SignedAmount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::SignedAmount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseError>
+pub fn bitcoin_units::SignedAmount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::SignedAmount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseError>
 pub fn bitcoin_units::SignedAmount::hash<__H: core::hash::Hasher>(&self, state: &mut __H)
 pub fn bitcoin_units::SignedAmount::is_negative(self) -> bool
 pub fn bitcoin_units::SignedAmount::is_positive(self) -> bool
@@ -888,14 +887,13 @@ pub fn bitcoin_units::SignedAmount::to_btc(self) -> f64
 pub fn bitcoin_units::SignedAmount::to_float_in(self, denom: bitcoin_units::amount::Denomination) -> f64
 pub fn bitcoin_units::SignedAmount::to_string_in(self, denom: bitcoin_units::amount::Denomination) -> alloc::string::String
 pub fn bitcoin_units::SignedAmount::to_string_with_denomination(self, denom: bitcoin_units::amount::Denomination) -> alloc::string::String
-pub fn bitcoin_units::SignedAmount::to_unsigned(self) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::SignedAmount::to_unsigned(self) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::SignedAmount::try_from(value: bitcoin_units::Amount) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::SignedAmount::type_prefix(_: private::Token) -> &'static str
 pub fn bitcoin_units::SignedAmount::unchecked_add(self, rhs: bitcoin_units::SignedAmount) -> bitcoin_units::SignedAmount
 pub fn bitcoin_units::SignedAmount::unchecked_sub(self, rhs: bitcoin_units::SignedAmount) -> bitcoin_units::SignedAmount
 pub fn bitcoin_units::SignedAmount::unsigned_abs(self) -> bitcoin_units::Amount
 pub fn bitcoin_units::amount::CheckedSum::checked_sum(self) -> core::option::Option<R>
-pub fn bitcoin_units::amount::Denomination::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
 pub fn bitcoin_units::amount::Denomination::clone(&self) -> bitcoin_units::amount::Denomination
 pub fn bitcoin_units::amount::Denomination::eq(&self, other: &bitcoin_units::amount::Denomination) -> bool
 pub fn bitcoin_units::amount::Denomination::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
@@ -904,62 +902,62 @@ pub fn bitcoin_units::amount::Denomination::hash<__H: core::hash::Hasher>(&self,
 pub fn bitcoin_units::amount::Display::clone(&self) -> bitcoin_units::amount::Display
 pub fn bitcoin_units::amount::Display::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
 pub fn bitcoin_units::amount::Display::show_denomination(self) -> Self
-pub fn bitcoin_units::amount::InputTooLargeError::clone(&self) -> bitcoin_units::amount::InputTooLargeError
-pub fn bitcoin_units::amount::InputTooLargeError::eq(&self, other: &bitcoin_units::amount::InputTooLargeError) -> bool
-pub fn bitcoin_units::amount::InputTooLargeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::InvalidCharacterError::clone(&self) -> bitcoin_units::amount::InvalidCharacterError
-pub fn bitcoin_units::amount::InvalidCharacterError::eq(&self, other: &bitcoin_units::amount::InvalidCharacterError) -> bool
-pub fn bitcoin_units::amount::InvalidCharacterError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::MissingDenominationError::clone(&self) -> bitcoin_units::amount::MissingDenominationError
-pub fn bitcoin_units::amount::MissingDenominationError::eq(&self, other: &bitcoin_units::amount::MissingDenominationError) -> bool
-pub fn bitcoin_units::amount::MissingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::MissingDigitsError::clone(&self) -> bitcoin_units::amount::MissingDigitsError
-pub fn bitcoin_units::amount::MissingDigitsError::eq(&self, other: &bitcoin_units::amount::MissingDigitsError) -> bool
-pub fn bitcoin_units::amount::MissingDigitsError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::OutOfRangeError::clone(&self) -> bitcoin_units::amount::OutOfRangeError
-pub fn bitcoin_units::amount::OutOfRangeError::eq(&self, other: &bitcoin_units::amount::OutOfRangeError) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::OutOfRangeError::is_above_max(self) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::is_below_min(self) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::valid_range(self) -> (i64, u64)
-pub fn bitcoin_units::amount::ParseAmountError::clone(&self) -> bitcoin_units::amount::ParseAmountError
-pub fn bitcoin_units::amount::ParseAmountError::eq(&self, other: &bitcoin_units::amount::ParseAmountError) -> bool
-pub fn bitcoin_units::amount::ParseAmountError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseAmountError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::InputTooLargeError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::InvalidCharacterError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::MissingDigitsError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::OutOfRangeError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::TooPreciseError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
-pub fn bitcoin_units::amount::ParseDenominationError::clone(&self) -> bitcoin_units::amount::ParseDenominationError
-pub fn bitcoin_units::amount::ParseDenominationError::eq(&self, other: &bitcoin_units::amount::ParseDenominationError) -> bool
-pub fn bitcoin_units::amount::ParseDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseDenominationError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::ParseDenominationError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
-pub fn bitcoin_units::amount::ParseError::clone(&self) -> bitcoin_units::amount::ParseError
-pub fn bitcoin_units::amount::ParseError::eq(&self, other: &bitcoin_units::amount::ParseError) -> bool
-pub fn bitcoin_units::amount::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::InputTooLargeError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::InvalidCharacterError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::MissingDigitsError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::OutOfRangeError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::ParseAmountError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::ParseDenominationError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::TooPreciseError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::ParseError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::clone(&self) -> bitcoin_units::amount::PossiblyConfusingDenominationError
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::eq(&self, other: &bitcoin_units::amount::PossiblyConfusingDenominationError) -> bool
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
-pub fn bitcoin_units::amount::TooPreciseError::clone(&self) -> bitcoin_units::amount::TooPreciseError
-pub fn bitcoin_units::amount::TooPreciseError::eq(&self, other: &bitcoin_units::amount::TooPreciseError) -> bool
-pub fn bitcoin_units::amount::TooPreciseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::UnknownDenominationError::clone(&self) -> bitcoin_units::amount::UnknownDenominationError
-pub fn bitcoin_units::amount::UnknownDenominationError::eq(&self, other: &bitcoin_units::amount::UnknownDenominationError) -> bool
-pub fn bitcoin_units::amount::UnknownDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::UnknownDenominationError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
+pub fn bitcoin_units::amount::error::InputTooLargeError::clone(&self) -> bitcoin_units::amount::error::InputTooLargeError
+pub fn bitcoin_units::amount::error::InputTooLargeError::eq(&self, other: &bitcoin_units::amount::error::InputTooLargeError) -> bool
+pub fn bitcoin_units::amount::error::InputTooLargeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::InvalidCharacterError::clone(&self) -> bitcoin_units::amount::error::InvalidCharacterError
+pub fn bitcoin_units::amount::error::InvalidCharacterError::eq(&self, other: &bitcoin_units::amount::error::InvalidCharacterError) -> bool
+pub fn bitcoin_units::amount::error::InvalidCharacterError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::MissingDenominationError::clone(&self) -> bitcoin_units::amount::error::MissingDenominationError
+pub fn bitcoin_units::amount::error::MissingDenominationError::eq(&self, other: &bitcoin_units::amount::error::MissingDenominationError) -> bool
+pub fn bitcoin_units::amount::error::MissingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::MissingDigitsError::clone(&self) -> bitcoin_units::amount::error::MissingDigitsError
+pub fn bitcoin_units::amount::error::MissingDigitsError::eq(&self, other: &bitcoin_units::amount::error::MissingDigitsError) -> bool
+pub fn bitcoin_units::amount::error::MissingDigitsError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::OutOfRangeError::clone(&self) -> bitcoin_units::amount::error::OutOfRangeError
+pub fn bitcoin_units::amount::error::OutOfRangeError::eq(&self, other: &bitcoin_units::amount::error::OutOfRangeError) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::OutOfRangeError::is_above_max(self) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::is_below_min(self) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::valid_range(self) -> (i64, u64)
+pub fn bitcoin_units::amount::error::ParseAmountError::clone(&self) -> bitcoin_units::amount::error::ParseAmountError
+pub fn bitcoin_units::amount::error::ParseAmountError::eq(&self, other: &bitcoin_units::amount::error::ParseAmountError) -> bool
+pub fn bitcoin_units::amount::error::ParseAmountError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseAmountError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::InputTooLargeError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::InvalidCharacterError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::MissingDigitsError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::OutOfRangeError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::TooPreciseError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
+pub fn bitcoin_units::amount::error::ParseDenominationError::clone(&self) -> bitcoin_units::amount::error::ParseDenominationError
+pub fn bitcoin_units::amount::error::ParseDenominationError::eq(&self, other: &bitcoin_units::amount::error::ParseDenominationError) -> bool
+pub fn bitcoin_units::amount::error::ParseDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseDenominationError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::ParseDenominationError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
+pub fn bitcoin_units::amount::error::ParseError::clone(&self) -> bitcoin_units::amount::error::ParseError
+pub fn bitcoin_units::amount::error::ParseError::eq(&self, other: &bitcoin_units::amount::error::ParseError) -> bool
+pub fn bitcoin_units::amount::error::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::InputTooLargeError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::InvalidCharacterError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::MissingDigitsError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::OutOfRangeError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::ParseAmountError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::ParseDenominationError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::TooPreciseError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::ParseError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::clone(&self) -> bitcoin_units::amount::error::PossiblyConfusingDenominationError
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::eq(&self, other: &bitcoin_units::amount::error::PossiblyConfusingDenominationError) -> bool
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
+pub fn bitcoin_units::amount::error::TooPreciseError::clone(&self) -> bitcoin_units::amount::error::TooPreciseError
+pub fn bitcoin_units::amount::error::TooPreciseError::eq(&self, other: &bitcoin_units::amount::error::TooPreciseError) -> bool
+pub fn bitcoin_units::amount::error::TooPreciseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::UnknownDenominationError::clone(&self) -> bitcoin_units::amount::error::UnknownDenominationError
+pub fn bitcoin_units::amount::error::UnknownDenominationError::eq(&self, other: &bitcoin_units::amount::error::UnknownDenominationError) -> bool
+pub fn bitcoin_units::amount::error::UnknownDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::UnknownDenominationError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
 pub fn bitcoin_units::amount::serde::SerdeAmount::des_btc<'d, D: serde::de::Deserializer<'d>>(d: D, _: private::Token) -> core::result::Result<Self, <D as serde::de::Deserializer>::Error>
 pub fn bitcoin_units::amount::serde::SerdeAmount::des_sat<'d, D: serde::de::Deserializer<'d>>(d: D, _: private::Token) -> core::result::Result<Self, <D as serde::de::Deserializer>::Error>
 pub fn bitcoin_units::amount::serde::SerdeAmount::des_str<'d, D: serde::de::Deserializer<'d>>(d: D, _: private::Token) -> core::result::Result<Self, <D as serde::de::Deserializer>::Error>
@@ -983,7 +981,6 @@ pub fn bitcoin_units::amount::serde::as_str::opt::deserialize<'d, A: bitcoin_uni
 pub fn bitcoin_units::amount::serde::as_str::opt::serialize<A: bitcoin_units::amount::serde::SerdeAmountForOpt, S: serde::ser::Serializer>(a: &core::option::Option<A>, s: S) -> core::result::Result<<S as serde::ser::Serializer>::Ok, <S as serde::ser::Serializer>::Error>
 pub fn bitcoin_units::amount::serde::as_str::serialize<A: bitcoin_units::amount::serde::SerdeAmount, S: serde::ser::Serializer>(a: &A, s: S) -> core::result::Result<<S as serde::ser::Serializer>::Ok, <S as serde::ser::Serializer>::Error>
 pub fn bitcoin_units::block::BlockHeight::add(self, rhs: bitcoin_units::block::BlockInterval) -> Self::Output
-pub fn bitcoin_units::block::BlockHeight::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
 pub fn bitcoin_units::block::BlockHeight::clone(&self) -> bitcoin_units::block::BlockHeight
 pub fn bitcoin_units::block::BlockHeight::cmp(&self, other: &bitcoin_units::block::BlockHeight) -> core::cmp::Ordering
 pub fn bitcoin_units::block::BlockHeight::deserialize<__D>(__deserializer: __D) -> core::result::Result<Self, <__D as serde::de::Deserializer>::Error> where __D: serde::de::Deserializer<'de>
@@ -1002,7 +999,6 @@ pub fn bitcoin_units::block::BlockHeight::try_from(s: alloc::boxed::Box<str>) ->
 pub fn bitcoin_units::block::BlockHeight::try_from(s: alloc::string::String) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::block::BlockInterval::add(self, rhs: bitcoin_units::block::BlockInterval) -> Self::Output
 pub fn bitcoin_units::block::BlockInterval::add_assign(&mut self, rhs: bitcoin_units::block::BlockInterval)
-pub fn bitcoin_units::block::BlockInterval::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
 pub fn bitcoin_units::block::BlockInterval::clone(&self) -> bitcoin_units::block::BlockInterval
 pub fn bitcoin_units::block::BlockInterval::cmp(&self, other: &bitcoin_units::block::BlockInterval) -> core::cmp::Ordering
 pub fn bitcoin_units::block::BlockInterval::default() -> bitcoin_units::block::BlockInterval
@@ -1056,7 +1052,6 @@ pub fn bitcoin_units::locktime::absolute::ConversionError::clone(&self) -> bitco
 pub fn bitcoin_units::locktime::absolute::ConversionError::eq(&self, other: &bitcoin_units::locktime::absolute::ConversionError) -> bool
 pub fn bitcoin_units::locktime::absolute::ConversionError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
 pub fn bitcoin_units::locktime::absolute::ConversionError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
-pub fn bitcoin_units::locktime::absolute::Height::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
 pub fn bitcoin_units::locktime::absolute::Height::clone(&self) -> bitcoin_units::locktime::absolute::Height
 pub fn bitcoin_units::locktime::absolute::Height::cmp(&self, other: &bitcoin_units::locktime::absolute::Height) -> core::cmp::Ordering
 pub fn bitcoin_units::locktime::absolute::Height::deserialize<D>(deserializer: D) -> core::result::Result<Self, <D as serde::de::Deserializer>::Error> where D: serde::de::Deserializer<'de>
@@ -1079,7 +1074,6 @@ pub fn bitcoin_units::locktime::absolute::ParseTimeError::clone(&self) -> bitcoi
 pub fn bitcoin_units::locktime::absolute::ParseTimeError::eq(&self, other: &bitcoin_units::locktime::absolute::ParseTimeError) -> bool
 pub fn bitcoin_units::locktime::absolute::ParseTimeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
 pub fn bitcoin_units::locktime::absolute::ParseTimeError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
-pub fn bitcoin_units::locktime::absolute::Time::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
 pub fn bitcoin_units::locktime::absolute::Time::clone(&self) -> bitcoin_units::locktime::absolute::Time
 pub fn bitcoin_units::locktime::absolute::Time::cmp(&self, other: &bitcoin_units::locktime::absolute::Time) -> core::cmp::Ordering
 pub fn bitcoin_units::locktime::absolute::Time::deserialize<D>(deserializer: D) -> core::result::Result<Self, <D as serde::de::Deserializer>::Error> where D: serde::de::Deserializer<'de>
@@ -1093,7 +1087,6 @@ pub fn bitcoin_units::locktime::absolute::Time::serialize<S>(&self, serializer:
 pub fn bitcoin_units::locktime::absolute::Time::try_from(s: &str) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::locktime::absolute::Time::try_from(s: alloc::boxed::Box<str>) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::locktime::absolute::Time::try_from(s: alloc::string::String) -> core::result::Result<Self, Self::Error>
-pub fn bitcoin_units::locktime::relative::Height::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
 pub fn bitcoin_units::locktime::relative::Height::clone(&self) -> bitcoin_units::locktime::relative::Height
 pub fn bitcoin_units::locktime::relative::Height::cmp(&self, other: &bitcoin_units::locktime::relative::Height) -> core::cmp::Ordering
 pub fn bitcoin_units::locktime::relative::Height::default() -> bitcoin_units::locktime::relative::Height
@@ -1109,7 +1102,6 @@ pub fn bitcoin_units::locktime::relative::Height::try_from(h: bitcoin_units::blo
 pub fn bitcoin_units::locktime::relative::Height::try_from(s: &str) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::locktime::relative::Height::try_from(s: alloc::boxed::Box<str>) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::locktime::relative::Height::try_from(s: alloc::string::String) -> core::result::Result<Self, Self::Error>
-pub fn bitcoin_units::locktime::relative::Time::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
 pub fn bitcoin_units::locktime::relative::Time::clone(&self) -> bitcoin_units::locktime::relative::Time
 pub fn bitcoin_units::locktime::relative::Time::cmp(&self, other: &bitcoin_units::locktime::relative::Time) -> core::cmp::Ordering
 pub fn bitcoin_units::locktime::relative::Time::default() -> bitcoin_units::locktime::relative::Time
@@ -1197,6 +1189,7 @@ pub macro bitcoin_units::impl_tryfrom_str!
 pub macro bitcoin_units::impl_tryfrom_str_from_int_infallible!
 pub mod bitcoin_units
 pub mod bitcoin_units::amount
+pub mod bitcoin_units::amount::error
 pub mod bitcoin_units::amount::serde
 pub mod bitcoin_units::amount::serde::as_btc
 pub mod bitcoin_units::amount::serde::as_btc::opt
@@ -1227,6 +1220,13 @@ pub struct bitcoin_units::amount::ParseAmountError(_)
 pub struct bitcoin_units::amount::ParseError(_)
 pub struct bitcoin_units::amount::SignedAmount(_)
 pub struct bitcoin_units::amount::TooPreciseError
+pub struct bitcoin_units::amount::error::InputTooLargeError
+pub struct bitcoin_units::amount::error::InvalidCharacterError
+pub struct bitcoin_units::amount::error::MissingDigitsError
+pub struct bitcoin_units::amount::error::OutOfRangeError
+pub struct bitcoin_units::amount::error::ParseAmountError(_)
+pub struct bitcoin_units::amount::error::ParseError(_)
+pub struct bitcoin_units::amount::error::TooPreciseError
 pub struct bitcoin_units::block::BlockHeight(pub u32)
 pub struct bitcoin_units::block::BlockInterval(pub u32)
 pub struct bitcoin_units::block::TooBigForRelativeBlockHeightError(_)
@@ -1249,14 +1249,14 @@ pub type &bitcoin_units::Amount::Output = bitcoin_units::Amount
 pub type &bitcoin_units::SignedAmount::Output = bitcoin_units::SignedAmount
 pub type &bitcoin_units::fee_rate::FeeRate::Output = bitcoin_units::fee_rate::FeeRate
 pub type &bitcoin_units::weight::Weight::Output = bitcoin_units::weight::Weight
-pub type bitcoin_units::Amount::Err = bitcoin_units::amount::ParseError
-pub type bitcoin_units::Amount::Error = bitcoin_units::amount::OutOfRangeError
+pub type bitcoin_units::Amount::Err = bitcoin_units::amount::error::ParseError
+pub type bitcoin_units::Amount::Error = bitcoin_units::amount::error::OutOfRangeError
 pub type bitcoin_units::Amount::Output = bitcoin_units::Amount
 pub type bitcoin_units::Amount::Output = bitcoin_units::fee_rate::FeeRate
-pub type bitcoin_units::SignedAmount::Err = bitcoin_units::amount::ParseError
-pub type bitcoin_units::SignedAmount::Error = bitcoin_units::amount::OutOfRangeError
+pub type bitcoin_units::SignedAmount::Err = bitcoin_units::amount::error::ParseError
+pub type bitcoin_units::SignedAmount::Error = bitcoin_units::amount::error::OutOfRangeError
 pub type bitcoin_units::SignedAmount::Output = bitcoin_units::SignedAmount
-pub type bitcoin_units::amount::Denomination::Err = bitcoin_units::amount::ParseDenominationError
+pub type bitcoin_units::amount::Denomination::Err = bitcoin_units::amount::error::ParseDenominationError
 pub type bitcoin_units::block::BlockHeight::Err = bitcoin_units::parse::ParseIntError
 pub type bitcoin_units::block::BlockHeight::Error = bitcoin_units::parse::ParseIntError
 pub type bitcoin_units::block::BlockHeight::Output = bitcoin_units::block::BlockHeight
diff --git a/api/units/alloc-only.txt b/api/units/alloc-only.txt
index bfe3a73d..ae1768de 100644
--- a/api/units/alloc-only.txt
+++ b/api/units/alloc-only.txt
@@ -1,15 +1,19 @@
 #[non_exhaustive] pub enum bitcoin_units::amount::Denomination
 #[non_exhaustive] pub enum bitcoin_units::amount::ParseDenominationError
+#[non_exhaustive] pub enum bitcoin_units::amount::error::ParseDenominationError
 #[non_exhaustive] pub struct bitcoin_units::amount::MissingDenominationError
 #[non_exhaustive] pub struct bitcoin_units::amount::PossiblyConfusingDenominationError(_)
 #[non_exhaustive] pub struct bitcoin_units::amount::UnknownDenominationError(_)
+#[non_exhaustive] pub struct bitcoin_units::amount::error::MissingDenominationError
+#[non_exhaustive] pub struct bitcoin_units::amount::error::PossiblyConfusingDenominationError(_)
+#[non_exhaustive] pub struct bitcoin_units::amount::error::UnknownDenominationError(_)
 #[non_exhaustive] pub struct bitcoin_units::locktime::absolute::ConversionError
 #[non_exhaustive] pub struct bitcoin_units::parse::ParseIntError
 impl bitcoin_units::Amount
 impl bitcoin_units::SignedAmount
 impl bitcoin_units::amount::Denomination
 impl bitcoin_units::amount::Display
-impl bitcoin_units::amount::OutOfRangeError
+impl bitcoin_units::amount::error::OutOfRangeError
 impl bitcoin_units::block::BlockHeight
 impl bitcoin_units::block::BlockInterval
 impl bitcoin_units::fee_rate::FeeRate
@@ -33,17 +37,17 @@ impl core::clone::Clone for bitcoin_units::Amount
 impl core::clone::Clone for bitcoin_units::SignedAmount
 impl core::clone::Clone for bitcoin_units::amount::Denomination
 impl core::clone::Clone for bitcoin_units::amount::Display
-impl core::clone::Clone for bitcoin_units::amount::InputTooLargeError
-impl core::clone::Clone for bitcoin_units::amount::InvalidCharacterError
-impl core::clone::Clone for bitcoin_units::amount::MissingDenominationError
-impl core::clone::Clone for bitcoin_units::amount::MissingDigitsError
-impl core::clone::Clone for bitcoin_units::amount::OutOfRangeError
-impl core::clone::Clone for bitcoin_units::amount::ParseAmountError
-impl core::clone::Clone for bitcoin_units::amount::ParseDenominationError
-impl core::clone::Clone for bitcoin_units::amount::ParseError
-impl core::clone::Clone for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::clone::Clone for bitcoin_units::amount::TooPreciseError
-impl core::clone::Clone for bitcoin_units::amount::UnknownDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::InputTooLargeError
+impl core::clone::Clone for bitcoin_units::amount::error::InvalidCharacterError
+impl core::clone::Clone for bitcoin_units::amount::error::MissingDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::MissingDigitsError
+impl core::clone::Clone for bitcoin_units::amount::error::OutOfRangeError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseAmountError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseError
+impl core::clone::Clone for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::TooPreciseError
+impl core::clone::Clone for bitcoin_units::amount::error::UnknownDenominationError
 impl core::clone::Clone for bitcoin_units::block::BlockHeight
 impl core::clone::Clone for bitcoin_units::block::BlockInterval
 impl core::clone::Clone for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -63,17 +67,17 @@ impl core::clone::Clone for bitcoin_units::weight::Weight
 impl core::cmp::Eq for bitcoin_units::Amount
 impl core::cmp::Eq for bitcoin_units::SignedAmount
 impl core::cmp::Eq for bitcoin_units::amount::Denomination
-impl core::cmp::Eq for bitcoin_units::amount::InputTooLargeError
-impl core::cmp::Eq for bitcoin_units::amount::InvalidCharacterError
-impl core::cmp::Eq for bitcoin_units::amount::MissingDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::MissingDigitsError
-impl core::cmp::Eq for bitcoin_units::amount::OutOfRangeError
-impl core::cmp::Eq for bitcoin_units::amount::ParseAmountError
-impl core::cmp::Eq for bitcoin_units::amount::ParseDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::ParseError
-impl core::cmp::Eq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::TooPreciseError
-impl core::cmp::Eq for bitcoin_units::amount::UnknownDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::InputTooLargeError
+impl core::cmp::Eq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::cmp::Eq for bitcoin_units::amount::error::MissingDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::MissingDigitsError
+impl core::cmp::Eq for bitcoin_units::amount::error::OutOfRangeError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseAmountError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseError
+impl core::cmp::Eq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::TooPreciseError
+impl core::cmp::Eq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::cmp::Eq for bitcoin_units::block::BlockHeight
 impl core::cmp::Eq for bitcoin_units::block::BlockInterval
 impl core::cmp::Eq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -103,17 +107,17 @@ impl core::cmp::Ord for bitcoin_units::weight::Weight
 impl core::cmp::PartialEq for bitcoin_units::Amount
 impl core::cmp::PartialEq for bitcoin_units::SignedAmount
 impl core::cmp::PartialEq for bitcoin_units::amount::Denomination
-impl core::cmp::PartialEq for bitcoin_units::amount::InputTooLargeError
-impl core::cmp::PartialEq for bitcoin_units::amount::InvalidCharacterError
-impl core::cmp::PartialEq for bitcoin_units::amount::MissingDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::MissingDigitsError
-impl core::cmp::PartialEq for bitcoin_units::amount::OutOfRangeError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseAmountError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseError
-impl core::cmp::PartialEq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::TooPreciseError
-impl core::cmp::PartialEq for bitcoin_units::amount::UnknownDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::InputTooLargeError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::MissingDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::MissingDigitsError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::OutOfRangeError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseAmountError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::TooPreciseError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::cmp::PartialEq for bitcoin_units::block::BlockHeight
 impl core::cmp::PartialEq for bitcoin_units::block::BlockInterval
 impl core::cmp::PartialEq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -141,18 +145,18 @@ 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<core::num::error::ParseIntError> for bitcoin_units::parse::ParseIntError
-impl core::convert::From<bitcoin_units::amount::InputTooLargeError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::InputTooLargeError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::InvalidCharacterError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::InvalidCharacterError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::MissingDigitsError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::MissingDigitsError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::OutOfRangeError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::OutOfRangeError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::ParseAmountError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::ParseDenominationError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::TooPreciseError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::TooPreciseError> for bitcoin_units::amount::ParseError
+impl core::convert::From<bitcoin_units::amount::error::InputTooLargeError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::InputTooLargeError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::InvalidCharacterError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::InvalidCharacterError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::MissingDigitsError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::MissingDigitsError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::OutOfRangeError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::OutOfRangeError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::ParseAmountError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::ParseDenominationError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::TooPreciseError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::TooPreciseError> for bitcoin_units::amount::error::ParseError
 impl core::convert::From<bitcoin_units::block::BlockHeight> for u32
 impl core::convert::From<bitcoin_units::block::BlockInterval> for u32
 impl core::convert::From<bitcoin_units::fee_rate::FeeRate> for u64
@@ -162,9 +166,9 @@ impl core::convert::From<bitcoin_units::parse::ParseIntError> for bitcoin_units:
 impl core::convert::From<bitcoin_units::parse::ParseIntError> for bitcoin_units::parse::UnprefixedHexError
 impl core::convert::From<bitcoin_units::parse::ParseIntError> for core::num::error::ParseIntError
 impl core::convert::From<bitcoin_units::weight::Weight> for u64
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseDenominationError
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseDenominationError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseError
 impl core::convert::From<core::convert::Infallible> for bitcoin_units::parse::PrefixedHexError
 impl core::convert::From<core::convert::Infallible> for bitcoin_units::parse::UnprefixedHexError
 impl core::convert::From<u16> for bitcoin_units::locktime::relative::Height
@@ -207,17 +211,17 @@ impl core::fmt::Debug for bitcoin_units::Amount
 impl core::fmt::Debug for bitcoin_units::SignedAmount
 impl core::fmt::Debug for bitcoin_units::amount::Denomination
 impl core::fmt::Debug for bitcoin_units::amount::Display
-impl core::fmt::Debug for bitcoin_units::amount::InputTooLargeError
-impl core::fmt::Debug for bitcoin_units::amount::InvalidCharacterError
-impl core::fmt::Debug for bitcoin_units::amount::MissingDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::MissingDigitsError
-impl core::fmt::Debug for bitcoin_units::amount::OutOfRangeError
-impl core::fmt::Debug for bitcoin_units::amount::ParseAmountError
-impl core::fmt::Debug for bitcoin_units::amount::ParseDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::ParseError
-impl core::fmt::Debug for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::TooPreciseError
-impl core::fmt::Debug for bitcoin_units::amount::UnknownDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::InputTooLargeError
+impl core::fmt::Debug for bitcoin_units::amount::error::InvalidCharacterError
+impl core::fmt::Debug for bitcoin_units::amount::error::MissingDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::MissingDigitsError
+impl core::fmt::Debug for bitcoin_units::amount::error::OutOfRangeError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseAmountError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseError
+impl core::fmt::Debug for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::TooPreciseError
+impl core::fmt::Debug for bitcoin_units::amount::error::UnknownDenominationError
 impl core::fmt::Debug for bitcoin_units::block::BlockHeight
 impl core::fmt::Debug for bitcoin_units::block::BlockInterval
 impl core::fmt::Debug for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -238,16 +242,16 @@ impl core::fmt::Display for bitcoin_units::Amount
 impl core::fmt::Display for bitcoin_units::SignedAmount
 impl core::fmt::Display for bitcoin_units::amount::Denomination
 impl core::fmt::Display for bitcoin_units::amount::Display
-impl core::fmt::Display for bitcoin_units::amount::InputTooLargeError
-impl core::fmt::Display for bitcoin_units::amount::InvalidCharacterError
-impl core::fmt::Display for bitcoin_units::amount::MissingDigitsError
-impl core::fmt::Display for bitcoin_units::amount::OutOfRangeError
-impl core::fmt::Display for bitcoin_units::amount::ParseAmountError
-impl core::fmt::Display for bitcoin_units::amount::ParseDenominationError
-impl core::fmt::Display for bitcoin_units::amount::ParseError
-impl core::fmt::Display for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::fmt::Display for bitcoin_units::amount::TooPreciseError
-impl core::fmt::Display for bitcoin_units::amount::UnknownDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::InputTooLargeError
+impl core::fmt::Display for bitcoin_units::amount::error::InvalidCharacterError
+impl core::fmt::Display for bitcoin_units::amount::error::MissingDigitsError
+impl core::fmt::Display for bitcoin_units::amount::error::OutOfRangeError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseAmountError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseError
+impl core::fmt::Display for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::TooPreciseError
+impl core::fmt::Display for bitcoin_units::amount::error::UnknownDenominationError
 impl core::fmt::Display for bitcoin_units::block::BlockHeight
 impl core::fmt::Display for bitcoin_units::block::BlockInterval
 impl core::fmt::Display for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -283,7 +287,7 @@ impl core::iter::traits::accum::Sum for bitcoin_units::weight::Weight
 impl core::marker::Copy for bitcoin_units::Amount
 impl core::marker::Copy for bitcoin_units::SignedAmount
 impl core::marker::Copy for bitcoin_units::amount::Denomination
-impl core::marker::Copy for bitcoin_units::amount::OutOfRangeError
+impl core::marker::Copy for bitcoin_units::amount::error::OutOfRangeError
 impl core::marker::Copy for bitcoin_units::block::BlockHeight
 impl core::marker::Copy for bitcoin_units::block::BlockInterval
 impl core::marker::Copy for bitcoin_units::fee_rate::FeeRate
@@ -296,17 +300,17 @@ impl core::marker::Freeze for bitcoin_units::Amount
 impl core::marker::Freeze for bitcoin_units::SignedAmount
 impl core::marker::Freeze for bitcoin_units::amount::Denomination
 impl core::marker::Freeze for bitcoin_units::amount::Display
-impl core::marker::Freeze for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Freeze for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Freeze for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Freeze for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Freeze for bitcoin_units::amount::ParseAmountError
-impl core::marker::Freeze for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::ParseError
-impl core::marker::Freeze for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::TooPreciseError
-impl core::marker::Freeze for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Freeze for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Freeze for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Freeze for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseError
+impl core::marker::Freeze for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Freeze for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Freeze for bitcoin_units::block::BlockHeight
 impl core::marker::Freeze for bitcoin_units::block::BlockInterval
 impl core::marker::Freeze for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -327,17 +331,17 @@ impl core::marker::Send for bitcoin_units::Amount
 impl core::marker::Send for bitcoin_units::SignedAmount
 impl core::marker::Send for bitcoin_units::amount::Denomination
 impl core::marker::Send for bitcoin_units::amount::Display
-impl core::marker::Send for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Send for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Send for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Send for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Send for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Send for bitcoin_units::amount::ParseAmountError
-impl core::marker::Send for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Send for bitcoin_units::amount::ParseError
-impl core::marker::Send for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Send for bitcoin_units::amount::TooPreciseError
-impl core::marker::Send for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Send for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Send for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Send for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Send for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Send for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::ParseError
+impl core::marker::Send for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Send for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Send for bitcoin_units::block::BlockHeight
 impl core::marker::Send for bitcoin_units::block::BlockInterval
 impl core::marker::Send for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -357,17 +361,17 @@ impl core::marker::Send for bitcoin_units::weight::Weight
 impl core::marker::StructuralPartialEq for bitcoin_units::Amount
 impl core::marker::StructuralPartialEq for bitcoin_units::SignedAmount
 impl core::marker::StructuralPartialEq for bitcoin_units::amount::Denomination
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::InputTooLargeError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::MissingDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::MissingDigitsError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::OutOfRangeError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseAmountError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::TooPreciseError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::StructuralPartialEq for bitcoin_units::block::BlockHeight
 impl core::marker::StructuralPartialEq for bitcoin_units::block::BlockInterval
 impl core::marker::StructuralPartialEq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -388,17 +392,17 @@ impl core::marker::Sync for bitcoin_units::Amount
 impl core::marker::Sync for bitcoin_units::SignedAmount
 impl core::marker::Sync for bitcoin_units::amount::Denomination
 impl core::marker::Sync for bitcoin_units::amount::Display
-impl core::marker::Sync for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Sync for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Sync for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Sync for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Sync for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Sync for bitcoin_units::amount::ParseAmountError
-impl core::marker::Sync for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Sync for bitcoin_units::amount::ParseError
-impl core::marker::Sync for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Sync for bitcoin_units::amount::TooPreciseError
-impl core::marker::Sync for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Sync for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Sync for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Sync for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseError
+impl core::marker::Sync for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Sync for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Sync for bitcoin_units::block::BlockHeight
 impl core::marker::Sync for bitcoin_units::block::BlockInterval
 impl core::marker::Sync for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -419,17 +423,17 @@ impl core::marker::Unpin for bitcoin_units::Amount
 impl core::marker::Unpin for bitcoin_units::SignedAmount
 impl core::marker::Unpin for bitcoin_units::amount::Denomination
 impl core::marker::Unpin for bitcoin_units::amount::Display
-impl core::marker::Unpin for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Unpin for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Unpin for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Unpin for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Unpin for bitcoin_units::amount::ParseAmountError
-impl core::marker::Unpin for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::ParseError
-impl core::marker::Unpin for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::TooPreciseError
-impl core::marker::Unpin for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Unpin for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Unpin for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Unpin for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseError
+impl core::marker::Unpin for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Unpin for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Unpin for bitcoin_units::block::BlockHeight
 impl core::marker::Unpin for bitcoin_units::block::BlockInterval
 impl core::marker::Unpin for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -519,17 +523,17 @@ impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::Amount
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::SignedAmount
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::Denomination
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::Display
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::InputTooLargeError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::InvalidCharacterError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::MissingDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::MissingDigitsError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::OutOfRangeError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseAmountError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::TooPreciseError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::UnknownDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::InputTooLargeError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::InvalidCharacterError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::MissingDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::MissingDigitsError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::OutOfRangeError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseAmountError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::TooPreciseError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::UnknownDenominationError
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::BlockHeight
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::BlockInterval
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -550,17 +554,17 @@ impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::Amount
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::SignedAmount
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::Denomination
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::Display
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::InputTooLargeError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::InvalidCharacterError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::MissingDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::MissingDigitsError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::OutOfRangeError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseAmountError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::TooPreciseError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::UnknownDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::InputTooLargeError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::InvalidCharacterError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::MissingDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::MissingDigitsError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::OutOfRangeError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseAmountError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::TooPreciseError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::UnknownDenominationError
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::BlockHeight
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::BlockInterval
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -609,8 +613,10 @@ pub bitcoin_units::amount::Denomination::CentiBitcoin
 pub bitcoin_units::amount::Denomination::MicroBitcoin
 pub bitcoin_units::amount::Denomination::MilliBitcoin
 pub bitcoin_units::amount::Denomination::Satoshi
-pub bitcoin_units::amount::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::PossiblyConfusingDenominationError)
-pub bitcoin_units::amount::ParseDenominationError::Unknown(bitcoin_units::amount::UnknownDenominationError)
+pub bitcoin_units::amount::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::error::PossiblyConfusingDenominationError)
+pub bitcoin_units::amount::ParseDenominationError::Unknown(bitcoin_units::amount::error::UnknownDenominationError)
+pub bitcoin_units::amount::error::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::error::PossiblyConfusingDenominationError)
+pub bitcoin_units::amount::error::ParseDenominationError::Unknown(bitcoin_units::amount::error::UnknownDenominationError)
 pub const bitcoin_units::Amount::MAX: Self
 pub const bitcoin_units::Amount::MAX_MONEY: Self
 pub const bitcoin_units::Amount::MIN: Self
@@ -751,12 +757,12 @@ pub fn bitcoin_units::Amount::div(self, rhs: u64) -> Self::Output
 pub fn bitcoin_units::Amount::div_assign(&mut self, rhs: u64)
 pub fn bitcoin_units::Amount::eq(&self, other: &bitcoin_units::Amount) -> bool
 pub fn bitcoin_units::Amount::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::Amount::from_btc(btc: f64) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::Amount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::Amount::from_int_btc<T: core::convert::Into<u64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::Amount::from_btc(btc: f64) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::Amount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::Amount::from_int_btc<T: core::convert::Into<u64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::Amount::from_str(s: &str) -> core::result::Result<Self, Self::Err>
-pub fn bitcoin_units::Amount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::Amount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseError>
+pub fn bitcoin_units::Amount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::Amount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseError>
 pub fn bitcoin_units::Amount::hash<__H: core::hash::Hasher>(&self, state: &mut __H)
 pub fn bitcoin_units::Amount::mul(self, rhs: u64) -> Self::Output
 pub fn bitcoin_units::Amount::mul_assign(&mut self, rhs: u64)
@@ -771,7 +777,7 @@ pub fn bitcoin_units::Amount::sum<I: core::iter::traits::iterator::Iterator<Item
 pub fn bitcoin_units::Amount::sum<I>(iter: I) -> Self where I: core::iter::traits::iterator::Iterator<Item = &'a bitcoin_units::Amount>
 pub fn bitcoin_units::Amount::to_btc(self) -> f64
 pub fn bitcoin_units::Amount::to_float_in(self, denom: bitcoin_units::amount::Denomination) -> f64
-pub fn bitcoin_units::Amount::to_signed(self) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::Amount::to_signed(self) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::Amount::to_string_in(self, denom: bitcoin_units::amount::Denomination) -> alloc::string::String
 pub fn bitcoin_units::Amount::to_string_with_denomination(self, denom: bitcoin_units::amount::Denomination) -> alloc::string::String
 pub fn bitcoin_units::Amount::try_from(value: bitcoin_units::SignedAmount) -> core::result::Result<Self, Self::Error>
@@ -791,12 +797,12 @@ 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_btc(btc: f64) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::SignedAmount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::SignedAmount::from_int_btc<T: core::convert::Into<i64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::SignedAmount::from_btc(btc: f64) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::SignedAmount::from_float_in(value: f64, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::SignedAmount::from_int_btc<T: core::convert::Into<i64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::SignedAmount::from_str(s: &str) -> core::result::Result<Self, Self::Err>
-pub fn bitcoin_units::SignedAmount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::SignedAmount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseError>
+pub fn bitcoin_units::SignedAmount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::SignedAmount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseError>
 pub fn bitcoin_units::SignedAmount::hash<__H: core::hash::Hasher>(&self, state: &mut __H)
 pub fn bitcoin_units::SignedAmount::is_negative(self) -> bool
 pub fn bitcoin_units::SignedAmount::is_positive(self) -> bool
@@ -818,7 +824,7 @@ pub fn bitcoin_units::SignedAmount::to_btc(self) -> f64
 pub fn bitcoin_units::SignedAmount::to_float_in(self, denom: bitcoin_units::amount::Denomination) -> f64
 pub fn bitcoin_units::SignedAmount::to_string_in(self, denom: bitcoin_units::amount::Denomination) -> alloc::string::String
 pub fn bitcoin_units::SignedAmount::to_string_with_denomination(self, denom: bitcoin_units::amount::Denomination) -> alloc::string::String
-pub fn bitcoin_units::SignedAmount::to_unsigned(self) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::SignedAmount::to_unsigned(self) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::SignedAmount::try_from(value: bitcoin_units::Amount) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::SignedAmount::unchecked_add(self, rhs: bitcoin_units::SignedAmount) -> bitcoin_units::SignedAmount
 pub fn bitcoin_units::SignedAmount::unchecked_sub(self, rhs: bitcoin_units::SignedAmount) -> bitcoin_units::SignedAmount
@@ -832,57 +838,57 @@ pub fn bitcoin_units::amount::Denomination::hash<__H: core::hash::Hasher>(&self,
 pub fn bitcoin_units::amount::Display::clone(&self) -> bitcoin_units::amount::Display
 pub fn bitcoin_units::amount::Display::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
 pub fn bitcoin_units::amount::Display::show_denomination(self) -> Self
-pub fn bitcoin_units::amount::InputTooLargeError::clone(&self) -> bitcoin_units::amount::InputTooLargeError
-pub fn bitcoin_units::amount::InputTooLargeError::eq(&self, other: &bitcoin_units::amount::InputTooLargeError) -> bool
-pub fn bitcoin_units::amount::InputTooLargeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::InvalidCharacterError::clone(&self) -> bitcoin_units::amount::InvalidCharacterError
-pub fn bitcoin_units::amount::InvalidCharacterError::eq(&self, other: &bitcoin_units::amount::InvalidCharacterError) -> bool
-pub fn bitcoin_units::amount::InvalidCharacterError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::MissingDenominationError::clone(&self) -> bitcoin_units::amount::MissingDenominationError
-pub fn bitcoin_units::amount::MissingDenominationError::eq(&self, other: &bitcoin_units::amount::MissingDenominationError) -> bool
-pub fn bitcoin_units::amount::MissingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::MissingDigitsError::clone(&self) -> bitcoin_units::amount::MissingDigitsError
-pub fn bitcoin_units::amount::MissingDigitsError::eq(&self, other: &bitcoin_units::amount::MissingDigitsError) -> bool
-pub fn bitcoin_units::amount::MissingDigitsError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::OutOfRangeError::clone(&self) -> bitcoin_units::amount::OutOfRangeError
-pub fn bitcoin_units::amount::OutOfRangeError::eq(&self, other: &bitcoin_units::amount::OutOfRangeError) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::OutOfRangeError::is_above_max(self) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::is_below_min(self) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::valid_range(self) -> (i64, u64)
-pub fn bitcoin_units::amount::ParseAmountError::clone(&self) -> bitcoin_units::amount::ParseAmountError
-pub fn bitcoin_units::amount::ParseAmountError::eq(&self, other: &bitcoin_units::amount::ParseAmountError) -> bool
-pub fn bitcoin_units::amount::ParseAmountError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseAmountError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::InputTooLargeError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::InvalidCharacterError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::MissingDigitsError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::OutOfRangeError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::TooPreciseError) -> Self
-pub fn bitcoin_units::amount::ParseDenominationError::clone(&self) -> bitcoin_units::amount::ParseDenominationError
-pub fn bitcoin_units::amount::ParseDenominationError::eq(&self, other: &bitcoin_units::amount::ParseDenominationError) -> bool
-pub fn bitcoin_units::amount::ParseDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseDenominationError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::ParseError::clone(&self) -> bitcoin_units::amount::ParseError
-pub fn bitcoin_units::amount::ParseError::eq(&self, other: &bitcoin_units::amount::ParseError) -> bool
-pub fn bitcoin_units::amount::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::InputTooLargeError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::InvalidCharacterError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::MissingDigitsError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::OutOfRangeError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::ParseAmountError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::ParseDenominationError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::TooPreciseError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::clone(&self) -> bitcoin_units::amount::PossiblyConfusingDenominationError
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::eq(&self, other: &bitcoin_units::amount::PossiblyConfusingDenominationError) -> bool
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::TooPreciseError::clone(&self) -> bitcoin_units::amount::TooPreciseError
-pub fn bitcoin_units::amount::TooPreciseError::eq(&self, other: &bitcoin_units::amount::TooPreciseError) -> bool
-pub fn bitcoin_units::amount::TooPreciseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::UnknownDenominationError::clone(&self) -> bitcoin_units::amount::UnknownDenominationError
-pub fn bitcoin_units::amount::UnknownDenominationError::eq(&self, other: &bitcoin_units::amount::UnknownDenominationError) -> bool
-pub fn bitcoin_units::amount::UnknownDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::InputTooLargeError::clone(&self) -> bitcoin_units::amount::error::InputTooLargeError
+pub fn bitcoin_units::amount::error::InputTooLargeError::eq(&self, other: &bitcoin_units::amount::error::InputTooLargeError) -> bool
+pub fn bitcoin_units::amount::error::InputTooLargeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::InvalidCharacterError::clone(&self) -> bitcoin_units::amount::error::InvalidCharacterError
+pub fn bitcoin_units::amount::error::InvalidCharacterError::eq(&self, other: &bitcoin_units::amount::error::InvalidCharacterError) -> bool
+pub fn bitcoin_units::amount::error::InvalidCharacterError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::MissingDenominationError::clone(&self) -> bitcoin_units::amount::error::MissingDenominationError
+pub fn bitcoin_units::amount::error::MissingDenominationError::eq(&self, other: &bitcoin_units::amount::error::MissingDenominationError) -> bool
+pub fn bitcoin_units::amount::error::MissingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::MissingDigitsError::clone(&self) -> bitcoin_units::amount::error::MissingDigitsError
+pub fn bitcoin_units::amount::error::MissingDigitsError::eq(&self, other: &bitcoin_units::amount::error::MissingDigitsError) -> bool
+pub fn bitcoin_units::amount::error::MissingDigitsError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::OutOfRangeError::clone(&self) -> bitcoin_units::amount::error::OutOfRangeError
+pub fn bitcoin_units::amount::error::OutOfRangeError::eq(&self, other: &bitcoin_units::amount::error::OutOfRangeError) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::OutOfRangeError::is_above_max(self) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::is_below_min(self) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::valid_range(self) -> (i64, u64)
+pub fn bitcoin_units::amount::error::ParseAmountError::clone(&self) -> bitcoin_units::amount::error::ParseAmountError
+pub fn bitcoin_units::amount::error::ParseAmountError::eq(&self, other: &bitcoin_units::amount::error::ParseAmountError) -> bool
+pub fn bitcoin_units::amount::error::ParseAmountError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseAmountError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::InputTooLargeError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::InvalidCharacterError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::MissingDigitsError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::OutOfRangeError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::TooPreciseError) -> Self
+pub fn bitcoin_units::amount::error::ParseDenominationError::clone(&self) -> bitcoin_units::amount::error::ParseDenominationError
+pub fn bitcoin_units::amount::error::ParseDenominationError::eq(&self, other: &bitcoin_units::amount::error::ParseDenominationError) -> bool
+pub fn bitcoin_units::amount::error::ParseDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseDenominationError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::ParseError::clone(&self) -> bitcoin_units::amount::error::ParseError
+pub fn bitcoin_units::amount::error::ParseError::eq(&self, other: &bitcoin_units::amount::error::ParseError) -> bool
+pub fn bitcoin_units::amount::error::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::InputTooLargeError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::InvalidCharacterError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::MissingDigitsError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::OutOfRangeError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::ParseAmountError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::ParseDenominationError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::TooPreciseError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::clone(&self) -> bitcoin_units::amount::error::PossiblyConfusingDenominationError
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::eq(&self, other: &bitcoin_units::amount::error::PossiblyConfusingDenominationError) -> bool
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::TooPreciseError::clone(&self) -> bitcoin_units::amount::error::TooPreciseError
+pub fn bitcoin_units::amount::error::TooPreciseError::eq(&self, other: &bitcoin_units::amount::error::TooPreciseError) -> bool
+pub fn bitcoin_units::amount::error::TooPreciseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::UnknownDenominationError::clone(&self) -> bitcoin_units::amount::error::UnknownDenominationError
+pub fn bitcoin_units::amount::error::UnknownDenominationError::eq(&self, other: &bitcoin_units::amount::error::UnknownDenominationError) -> bool
+pub fn bitcoin_units::amount::error::UnknownDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
 pub fn bitcoin_units::block::BlockHeight::add(self, rhs: bitcoin_units::block::BlockInterval) -> Self::Output
 pub fn bitcoin_units::block::BlockHeight::clone(&self) -> bitcoin_units::block::BlockHeight
 pub fn bitcoin_units::block::BlockHeight::cmp(&self, other: &bitcoin_units::block::BlockHeight) -> core::cmp::Ordering
@@ -1068,6 +1074,7 @@ pub macro bitcoin_units::impl_tryfrom_str!
 pub macro bitcoin_units::impl_tryfrom_str_from_int_infallible!
 pub mod bitcoin_units
 pub mod bitcoin_units::amount
+pub mod bitcoin_units::amount::error
 pub mod bitcoin_units::block
 pub mod bitcoin_units::fee_rate
 pub mod bitcoin_units::locktime
@@ -1091,6 +1098,13 @@ pub struct bitcoin_units::amount::ParseAmountError(_)
 pub struct bitcoin_units::amount::ParseError(_)
 pub struct bitcoin_units::amount::SignedAmount(_)
 pub struct bitcoin_units::amount::TooPreciseError
+pub struct bitcoin_units::amount::error::InputTooLargeError
+pub struct bitcoin_units::amount::error::InvalidCharacterError
+pub struct bitcoin_units::amount::error::MissingDigitsError
+pub struct bitcoin_units::amount::error::OutOfRangeError
+pub struct bitcoin_units::amount::error::ParseAmountError(_)
+pub struct bitcoin_units::amount::error::ParseError(_)
+pub struct bitcoin_units::amount::error::TooPreciseError
 pub struct bitcoin_units::block::BlockHeight(pub u32)
 pub struct bitcoin_units::block::BlockInterval(pub u32)
 pub struct bitcoin_units::block::TooBigForRelativeBlockHeightError(_)
@@ -1111,14 +1125,14 @@ pub type &bitcoin_units::Amount::Output = bitcoin_units::Amount
 pub type &bitcoin_units::SignedAmount::Output = bitcoin_units::SignedAmount
 pub type &bitcoin_units::fee_rate::FeeRate::Output = bitcoin_units::fee_rate::FeeRate
 pub type &bitcoin_units::weight::Weight::Output = bitcoin_units::weight::Weight
-pub type bitcoin_units::Amount::Err = bitcoin_units::amount::ParseError
-pub type bitcoin_units::Amount::Error = bitcoin_units::amount::OutOfRangeError
+pub type bitcoin_units::Amount::Err = bitcoin_units::amount::error::ParseError
+pub type bitcoin_units::Amount::Error = bitcoin_units::amount::error::OutOfRangeError
 pub type bitcoin_units::Amount::Output = bitcoin_units::Amount
 pub type bitcoin_units::Amount::Output = bitcoin_units::fee_rate::FeeRate
-pub type bitcoin_units::SignedAmount::Err = bitcoin_units::amount::ParseError
-pub type bitcoin_units::SignedAmount::Error = bitcoin_units::amount::OutOfRangeError
+pub type bitcoin_units::SignedAmount::Err = bitcoin_units::amount::error::ParseError
+pub type bitcoin_units::SignedAmount::Error = bitcoin_units::amount::error::OutOfRangeError
 pub type bitcoin_units::SignedAmount::Output = bitcoin_units::SignedAmount
-pub type bitcoin_units::amount::Denomination::Err = bitcoin_units::amount::ParseDenominationError
+pub type bitcoin_units::amount::Denomination::Err = bitcoin_units::amount::error::ParseDenominationError
 pub type bitcoin_units::block::BlockHeight::Err = bitcoin_units::parse::ParseIntError
 pub type bitcoin_units::block::BlockHeight::Error = bitcoin_units::parse::ParseIntError
 pub type bitcoin_units::block::BlockHeight::Output = bitcoin_units::block::BlockHeight
diff --git a/api/units/no-features.txt b/api/units/no-features.txt
index 60c1ac1b..197e438e 100644
--- a/api/units/no-features.txt
+++ b/api/units/no-features.txt
@@ -1,15 +1,19 @@
 #[non_exhaustive] pub enum bitcoin_units::amount::Denomination
 #[non_exhaustive] pub enum bitcoin_units::amount::ParseDenominationError
+#[non_exhaustive] pub enum bitcoin_units::amount::error::ParseDenominationError
 #[non_exhaustive] pub struct bitcoin_units::amount::MissingDenominationError
 #[non_exhaustive] pub struct bitcoin_units::amount::PossiblyConfusingDenominationError(_)
 #[non_exhaustive] pub struct bitcoin_units::amount::UnknownDenominationError(_)
+#[non_exhaustive] pub struct bitcoin_units::amount::error::MissingDenominationError
+#[non_exhaustive] pub struct bitcoin_units::amount::error::PossiblyConfusingDenominationError(_)
+#[non_exhaustive] pub struct bitcoin_units::amount::error::UnknownDenominationError(_)
 #[non_exhaustive] pub struct bitcoin_units::locktime::absolute::ConversionError
 #[non_exhaustive] pub struct bitcoin_units::parse::ParseIntError
 impl bitcoin_units::Amount
 impl bitcoin_units::SignedAmount
 impl bitcoin_units::amount::Denomination
 impl bitcoin_units::amount::Display
-impl bitcoin_units::amount::OutOfRangeError
+impl bitcoin_units::amount::error::OutOfRangeError
 impl bitcoin_units::block::BlockHeight
 impl bitcoin_units::block::BlockInterval
 impl bitcoin_units::fee_rate::FeeRate
@@ -33,17 +37,17 @@ impl core::clone::Clone for bitcoin_units::Amount
 impl core::clone::Clone for bitcoin_units::SignedAmount
 impl core::clone::Clone for bitcoin_units::amount::Denomination
 impl core::clone::Clone for bitcoin_units::amount::Display
-impl core::clone::Clone for bitcoin_units::amount::InputTooLargeError
-impl core::clone::Clone for bitcoin_units::amount::InvalidCharacterError
-impl core::clone::Clone for bitcoin_units::amount::MissingDenominationError
-impl core::clone::Clone for bitcoin_units::amount::MissingDigitsError
-impl core::clone::Clone for bitcoin_units::amount::OutOfRangeError
-impl core::clone::Clone for bitcoin_units::amount::ParseAmountError
-impl core::clone::Clone for bitcoin_units::amount::ParseDenominationError
-impl core::clone::Clone for bitcoin_units::amount::ParseError
-impl core::clone::Clone for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::clone::Clone for bitcoin_units::amount::TooPreciseError
-impl core::clone::Clone for bitcoin_units::amount::UnknownDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::InputTooLargeError
+impl core::clone::Clone for bitcoin_units::amount::error::InvalidCharacterError
+impl core::clone::Clone for bitcoin_units::amount::error::MissingDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::MissingDigitsError
+impl core::clone::Clone for bitcoin_units::amount::error::OutOfRangeError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseAmountError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::ParseError
+impl core::clone::Clone for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::clone::Clone for bitcoin_units::amount::error::TooPreciseError
+impl core::clone::Clone for bitcoin_units::amount::error::UnknownDenominationError
 impl core::clone::Clone for bitcoin_units::block::BlockHeight
 impl core::clone::Clone for bitcoin_units::block::BlockInterval
 impl core::clone::Clone for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -63,17 +67,17 @@ impl core::clone::Clone for bitcoin_units::weight::Weight
 impl core::cmp::Eq for bitcoin_units::Amount
 impl core::cmp::Eq for bitcoin_units::SignedAmount
 impl core::cmp::Eq for bitcoin_units::amount::Denomination
-impl core::cmp::Eq for bitcoin_units::amount::InputTooLargeError
-impl core::cmp::Eq for bitcoin_units::amount::InvalidCharacterError
-impl core::cmp::Eq for bitcoin_units::amount::MissingDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::MissingDigitsError
-impl core::cmp::Eq for bitcoin_units::amount::OutOfRangeError
-impl core::cmp::Eq for bitcoin_units::amount::ParseAmountError
-impl core::cmp::Eq for bitcoin_units::amount::ParseDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::ParseError
-impl core::cmp::Eq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::cmp::Eq for bitcoin_units::amount::TooPreciseError
-impl core::cmp::Eq for bitcoin_units::amount::UnknownDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::InputTooLargeError
+impl core::cmp::Eq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::cmp::Eq for bitcoin_units::amount::error::MissingDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::MissingDigitsError
+impl core::cmp::Eq for bitcoin_units::amount::error::OutOfRangeError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseAmountError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::ParseError
+impl core::cmp::Eq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::cmp::Eq for bitcoin_units::amount::error::TooPreciseError
+impl core::cmp::Eq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::cmp::Eq for bitcoin_units::block::BlockHeight
 impl core::cmp::Eq for bitcoin_units::block::BlockInterval
 impl core::cmp::Eq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -103,17 +107,17 @@ impl core::cmp::Ord for bitcoin_units::weight::Weight
 impl core::cmp::PartialEq for bitcoin_units::Amount
 impl core::cmp::PartialEq for bitcoin_units::SignedAmount
 impl core::cmp::PartialEq for bitcoin_units::amount::Denomination
-impl core::cmp::PartialEq for bitcoin_units::amount::InputTooLargeError
-impl core::cmp::PartialEq for bitcoin_units::amount::InvalidCharacterError
-impl core::cmp::PartialEq for bitcoin_units::amount::MissingDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::MissingDigitsError
-impl core::cmp::PartialEq for bitcoin_units::amount::OutOfRangeError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseAmountError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::ParseError
-impl core::cmp::PartialEq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::cmp::PartialEq for bitcoin_units::amount::TooPreciseError
-impl core::cmp::PartialEq for bitcoin_units::amount::UnknownDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::InputTooLargeError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::MissingDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::MissingDigitsError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::OutOfRangeError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseAmountError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::ParseError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::TooPreciseError
+impl core::cmp::PartialEq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::cmp::PartialEq for bitcoin_units::block::BlockHeight
 impl core::cmp::PartialEq for bitcoin_units::block::BlockInterval
 impl core::cmp::PartialEq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -141,18 +145,18 @@ 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<core::num::error::ParseIntError> for bitcoin_units::parse::ParseIntError
-impl core::convert::From<bitcoin_units::amount::InputTooLargeError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::InputTooLargeError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::InvalidCharacterError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::InvalidCharacterError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::MissingDigitsError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::MissingDigitsError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::OutOfRangeError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::OutOfRangeError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::ParseAmountError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::ParseDenominationError> for bitcoin_units::amount::ParseError
-impl core::convert::From<bitcoin_units::amount::TooPreciseError> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<bitcoin_units::amount::TooPreciseError> for bitcoin_units::amount::ParseError
+impl core::convert::From<bitcoin_units::amount::error::InputTooLargeError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::InputTooLargeError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::InvalidCharacterError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::InvalidCharacterError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::MissingDigitsError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::MissingDigitsError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::OutOfRangeError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::OutOfRangeError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::ParseAmountError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::ParseDenominationError> for bitcoin_units::amount::error::ParseError
+impl core::convert::From<bitcoin_units::amount::error::TooPreciseError> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<bitcoin_units::amount::error::TooPreciseError> for bitcoin_units::amount::error::ParseError
 impl core::convert::From<bitcoin_units::block::BlockHeight> for u32
 impl core::convert::From<bitcoin_units::block::BlockInterval> for u32
 impl core::convert::From<bitcoin_units::fee_rate::FeeRate> for u64
@@ -162,9 +166,9 @@ impl core::convert::From<bitcoin_units::parse::ParseIntError> for bitcoin_units:
 impl core::convert::From<bitcoin_units::parse::ParseIntError> for bitcoin_units::parse::UnprefixedHexError
 impl core::convert::From<bitcoin_units::parse::ParseIntError> for core::num::error::ParseIntError
 impl core::convert::From<bitcoin_units::weight::Weight> for u64
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseAmountError
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseDenominationError
-impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::ParseError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseAmountError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseDenominationError
+impl core::convert::From<core::convert::Infallible> for bitcoin_units::amount::error::ParseError
 impl core::convert::From<core::convert::Infallible> for bitcoin_units::parse::PrefixedHexError
 impl core::convert::From<core::convert::Infallible> for bitcoin_units::parse::UnprefixedHexError
 impl core::convert::From<u16> for bitcoin_units::locktime::relative::Height
@@ -191,17 +195,17 @@ impl core::fmt::Debug for bitcoin_units::Amount
 impl core::fmt::Debug for bitcoin_units::SignedAmount
 impl core::fmt::Debug for bitcoin_units::amount::Denomination
 impl core::fmt::Debug for bitcoin_units::amount::Display
-impl core::fmt::Debug for bitcoin_units::amount::InputTooLargeError
-impl core::fmt::Debug for bitcoin_units::amount::InvalidCharacterError
-impl core::fmt::Debug for bitcoin_units::amount::MissingDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::MissingDigitsError
-impl core::fmt::Debug for bitcoin_units::amount::OutOfRangeError
-impl core::fmt::Debug for bitcoin_units::amount::ParseAmountError
-impl core::fmt::Debug for bitcoin_units::amount::ParseDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::ParseError
-impl core::fmt::Debug for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::fmt::Debug for bitcoin_units::amount::TooPreciseError
-impl core::fmt::Debug for bitcoin_units::amount::UnknownDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::InputTooLargeError
+impl core::fmt::Debug for bitcoin_units::amount::error::InvalidCharacterError
+impl core::fmt::Debug for bitcoin_units::amount::error::MissingDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::MissingDigitsError
+impl core::fmt::Debug for bitcoin_units::amount::error::OutOfRangeError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseAmountError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::ParseError
+impl core::fmt::Debug for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::fmt::Debug for bitcoin_units::amount::error::TooPreciseError
+impl core::fmt::Debug for bitcoin_units::amount::error::UnknownDenominationError
 impl core::fmt::Debug for bitcoin_units::block::BlockHeight
 impl core::fmt::Debug for bitcoin_units::block::BlockInterval
 impl core::fmt::Debug for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -222,16 +226,16 @@ impl core::fmt::Display for bitcoin_units::Amount
 impl core::fmt::Display for bitcoin_units::SignedAmount
 impl core::fmt::Display for bitcoin_units::amount::Denomination
 impl core::fmt::Display for bitcoin_units::amount::Display
-impl core::fmt::Display for bitcoin_units::amount::InputTooLargeError
-impl core::fmt::Display for bitcoin_units::amount::InvalidCharacterError
-impl core::fmt::Display for bitcoin_units::amount::MissingDigitsError
-impl core::fmt::Display for bitcoin_units::amount::OutOfRangeError
-impl core::fmt::Display for bitcoin_units::amount::ParseAmountError
-impl core::fmt::Display for bitcoin_units::amount::ParseDenominationError
-impl core::fmt::Display for bitcoin_units::amount::ParseError
-impl core::fmt::Display for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::fmt::Display for bitcoin_units::amount::TooPreciseError
-impl core::fmt::Display for bitcoin_units::amount::UnknownDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::InputTooLargeError
+impl core::fmt::Display for bitcoin_units::amount::error::InvalidCharacterError
+impl core::fmt::Display for bitcoin_units::amount::error::MissingDigitsError
+impl core::fmt::Display for bitcoin_units::amount::error::OutOfRangeError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseAmountError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::ParseError
+impl core::fmt::Display for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::fmt::Display for bitcoin_units::amount::error::TooPreciseError
+impl core::fmt::Display for bitcoin_units::amount::error::UnknownDenominationError
 impl core::fmt::Display for bitcoin_units::block::BlockHeight
 impl core::fmt::Display for bitcoin_units::block::BlockInterval
 impl core::fmt::Display for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -267,7 +271,7 @@ impl core::iter::traits::accum::Sum for bitcoin_units::weight::Weight
 impl core::marker::Copy for bitcoin_units::Amount
 impl core::marker::Copy for bitcoin_units::SignedAmount
 impl core::marker::Copy for bitcoin_units::amount::Denomination
-impl core::marker::Copy for bitcoin_units::amount::OutOfRangeError
+impl core::marker::Copy for bitcoin_units::amount::error::OutOfRangeError
 impl core::marker::Copy for bitcoin_units::block::BlockHeight
 impl core::marker::Copy for bitcoin_units::block::BlockInterval
 impl core::marker::Copy for bitcoin_units::fee_rate::FeeRate
@@ -280,17 +284,17 @@ impl core::marker::Freeze for bitcoin_units::Amount
 impl core::marker::Freeze for bitcoin_units::SignedAmount
 impl core::marker::Freeze for bitcoin_units::amount::Denomination
 impl core::marker::Freeze for bitcoin_units::amount::Display
-impl core::marker::Freeze for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Freeze for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Freeze for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Freeze for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Freeze for bitcoin_units::amount::ParseAmountError
-impl core::marker::Freeze for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::ParseError
-impl core::marker::Freeze for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Freeze for bitcoin_units::amount::TooPreciseError
-impl core::marker::Freeze for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Freeze for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Freeze for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Freeze for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::ParseError
+impl core::marker::Freeze for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Freeze for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Freeze for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Freeze for bitcoin_units::block::BlockHeight
 impl core::marker::Freeze for bitcoin_units::block::BlockInterval
 impl core::marker::Freeze for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -311,17 +315,17 @@ impl core::marker::Send for bitcoin_units::Amount
 impl core::marker::Send for bitcoin_units::SignedAmount
 impl core::marker::Send for bitcoin_units::amount::Denomination
 impl core::marker::Send for bitcoin_units::amount::Display
-impl core::marker::Send for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Send for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Send for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Send for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Send for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Send for bitcoin_units::amount::ParseAmountError
-impl core::marker::Send for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Send for bitcoin_units::amount::ParseError
-impl core::marker::Send for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Send for bitcoin_units::amount::TooPreciseError
-impl core::marker::Send for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Send for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Send for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Send for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Send for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Send for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::ParseError
+impl core::marker::Send for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Send for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Send for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Send for bitcoin_units::block::BlockHeight
 impl core::marker::Send for bitcoin_units::block::BlockInterval
 impl core::marker::Send for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -341,17 +345,17 @@ impl core::marker::Send for bitcoin_units::weight::Weight
 impl core::marker::StructuralPartialEq for bitcoin_units::Amount
 impl core::marker::StructuralPartialEq for bitcoin_units::SignedAmount
 impl core::marker::StructuralPartialEq for bitcoin_units::amount::Denomination
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::InputTooLargeError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::MissingDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::MissingDigitsError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::OutOfRangeError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseAmountError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::ParseError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::TooPreciseError
-impl core::marker::StructuralPartialEq for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::ParseError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::StructuralPartialEq for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::StructuralPartialEq for bitcoin_units::block::BlockHeight
 impl core::marker::StructuralPartialEq for bitcoin_units::block::BlockInterval
 impl core::marker::StructuralPartialEq for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -372,17 +376,17 @@ impl core::marker::Sync for bitcoin_units::Amount
 impl core::marker::Sync for bitcoin_units::SignedAmount
 impl core::marker::Sync for bitcoin_units::amount::Denomination
 impl core::marker::Sync for bitcoin_units::amount::Display
-impl core::marker::Sync for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Sync for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Sync for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Sync for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Sync for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Sync for bitcoin_units::amount::ParseAmountError
-impl core::marker::Sync for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Sync for bitcoin_units::amount::ParseError
-impl core::marker::Sync for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Sync for bitcoin_units::amount::TooPreciseError
-impl core::marker::Sync for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Sync for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Sync for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Sync for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::ParseError
+impl core::marker::Sync for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Sync for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Sync for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Sync for bitcoin_units::block::BlockHeight
 impl core::marker::Sync for bitcoin_units::block::BlockInterval
 impl core::marker::Sync for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -403,17 +407,17 @@ impl core::marker::Unpin for bitcoin_units::Amount
 impl core::marker::Unpin for bitcoin_units::SignedAmount
 impl core::marker::Unpin for bitcoin_units::amount::Denomination
 impl core::marker::Unpin for bitcoin_units::amount::Display
-impl core::marker::Unpin for bitcoin_units::amount::InputTooLargeError
-impl core::marker::Unpin for bitcoin_units::amount::InvalidCharacterError
-impl core::marker::Unpin for bitcoin_units::amount::MissingDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::MissingDigitsError
-impl core::marker::Unpin for bitcoin_units::amount::OutOfRangeError
-impl core::marker::Unpin for bitcoin_units::amount::ParseAmountError
-impl core::marker::Unpin for bitcoin_units::amount::ParseDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::ParseError
-impl core::marker::Unpin for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::marker::Unpin for bitcoin_units::amount::TooPreciseError
-impl core::marker::Unpin for bitcoin_units::amount::UnknownDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::InputTooLargeError
+impl core::marker::Unpin for bitcoin_units::amount::error::InvalidCharacterError
+impl core::marker::Unpin for bitcoin_units::amount::error::MissingDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::MissingDigitsError
+impl core::marker::Unpin for bitcoin_units::amount::error::OutOfRangeError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseAmountError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::ParseError
+impl core::marker::Unpin for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::marker::Unpin for bitcoin_units::amount::error::TooPreciseError
+impl core::marker::Unpin for bitcoin_units::amount::error::UnknownDenominationError
 impl core::marker::Unpin for bitcoin_units::block::BlockHeight
 impl core::marker::Unpin for bitcoin_units::block::BlockInterval
 impl core::marker::Unpin for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -503,17 +507,17 @@ impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::Amount
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::SignedAmount
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::Denomination
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::Display
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::InputTooLargeError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::InvalidCharacterError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::MissingDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::MissingDigitsError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::OutOfRangeError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseAmountError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::ParseError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::TooPreciseError
-impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::UnknownDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::InputTooLargeError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::InvalidCharacterError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::MissingDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::MissingDigitsError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::OutOfRangeError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseAmountError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::ParseError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::TooPreciseError
+impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::UnknownDenominationError
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::BlockHeight
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::BlockInterval
 impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -534,17 +538,17 @@ impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::Amount
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::SignedAmount
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::Denomination
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::Display
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::InputTooLargeError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::InvalidCharacterError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::MissingDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::MissingDigitsError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::OutOfRangeError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseAmountError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::ParseError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::PossiblyConfusingDenominationError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::TooPreciseError
-impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::UnknownDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::InputTooLargeError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::InvalidCharacterError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::MissingDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::MissingDigitsError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::OutOfRangeError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseAmountError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::ParseError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::PossiblyConfusingDenominationError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::TooPreciseError
+impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::UnknownDenominationError
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::BlockHeight
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::BlockInterval
 impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::block::TooBigForRelativeBlockHeightError
@@ -593,8 +597,10 @@ pub bitcoin_units::amount::Denomination::CentiBitcoin
 pub bitcoin_units::amount::Denomination::MicroBitcoin
 pub bitcoin_units::amount::Denomination::MilliBitcoin
 pub bitcoin_units::amount::Denomination::Satoshi
-pub bitcoin_units::amount::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::PossiblyConfusingDenominationError)
-pub bitcoin_units::amount::ParseDenominationError::Unknown(bitcoin_units::amount::UnknownDenominationError)
+pub bitcoin_units::amount::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::error::PossiblyConfusingDenominationError)
+pub bitcoin_units::amount::ParseDenominationError::Unknown(bitcoin_units::amount::error::UnknownDenominationError)
+pub bitcoin_units::amount::error::ParseDenominationError::PossiblyConfusing(bitcoin_units::amount::error::PossiblyConfusingDenominationError)
+pub bitcoin_units::amount::error::ParseDenominationError::Unknown(bitcoin_units::amount::error::UnknownDenominationError)
 pub const bitcoin_units::Amount::MAX: Self
 pub const bitcoin_units::Amount::MAX_MONEY: Self
 pub const bitcoin_units::Amount::MIN: Self
@@ -733,10 +739,10 @@ pub fn bitcoin_units::Amount::div(self, rhs: u64) -> Self::Output
 pub fn bitcoin_units::Amount::div_assign(&mut self, rhs: u64)
 pub fn bitcoin_units::Amount::eq(&self, other: &bitcoin_units::Amount) -> bool
 pub fn bitcoin_units::Amount::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::Amount::from_int_btc<T: core::convert::Into<u64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::Amount::from_int_btc<T: core::convert::Into<u64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::Amount::from_str(s: &str) -> core::result::Result<Self, Self::Err>
-pub fn bitcoin_units::Amount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::Amount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::ParseError>
+pub fn bitcoin_units::Amount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::Amount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::ParseError>
 pub fn bitcoin_units::Amount::hash<__H: core::hash::Hasher>(&self, state: &mut __H)
 pub fn bitcoin_units::Amount::mul(self, rhs: u64) -> Self::Output
 pub fn bitcoin_units::Amount::mul_assign(&mut self, rhs: u64)
@@ -749,7 +755,7 @@ pub fn bitcoin_units::Amount::sub_assign(&mut self, rhs: &bitcoin_units::Amount)
 pub fn bitcoin_units::Amount::sub_assign(&mut self, rhs: bitcoin_units::Amount)
 pub fn bitcoin_units::Amount::sum<I: core::iter::traits::iterator::Iterator<Item = Self>>(iter: I) -> Self
 pub fn bitcoin_units::Amount::sum<I>(iter: I) -> Self where I: core::iter::traits::iterator::Iterator<Item = &'a bitcoin_units::Amount>
-pub fn bitcoin_units::Amount::to_signed(self) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::Amount::to_signed(self) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::Amount::try_from(value: bitcoin_units::SignedAmount) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::Amount::unchecked_add(self, rhs: bitcoin_units::Amount) -> bitcoin_units::Amount
 pub fn bitcoin_units::Amount::unchecked_sub(self, rhs: bitcoin_units::Amount) -> bitcoin_units::Amount
@@ -767,10 +773,10 @@ 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_int_btc<T: core::convert::Into<i64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::SignedAmount::from_int_btc<T: core::convert::Into<i64>>(whole_bitcoin: T) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::SignedAmount::from_str(s: &str) -> core::result::Result<Self, Self::Err>
-pub fn bitcoin_units::SignedAmount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseAmountError>
-pub fn bitcoin_units::SignedAmount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::ParseError>
+pub fn bitcoin_units::SignedAmount::from_str_in(s: &str, denom: bitcoin_units::amount::Denomination) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseAmountError>
+pub fn bitcoin_units::SignedAmount::from_str_with_denomination(s: &str) -> core::result::Result<bitcoin_units::SignedAmount, bitcoin_units::amount::error::ParseError>
 pub fn bitcoin_units::SignedAmount::hash<__H: core::hash::Hasher>(&self, state: &mut __H)
 pub fn bitcoin_units::SignedAmount::is_negative(self) -> bool
 pub fn bitcoin_units::SignedAmount::is_positive(self) -> bool
@@ -788,7 +794,7 @@ pub fn bitcoin_units::SignedAmount::sub_assign(&mut self, rhs: &bitcoin_units::S
 pub fn bitcoin_units::SignedAmount::sub_assign(&mut self, rhs: bitcoin_units::SignedAmount)
 pub fn bitcoin_units::SignedAmount::sum<I: core::iter::traits::iterator::Iterator<Item = Self>>(iter: I) -> Self
 pub fn bitcoin_units::SignedAmount::sum<I>(iter: I) -> Self where I: core::iter::traits::iterator::Iterator<Item = &'a bitcoin_units::SignedAmount>
-pub fn bitcoin_units::SignedAmount::to_unsigned(self) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::OutOfRangeError>
+pub fn bitcoin_units::SignedAmount::to_unsigned(self) -> core::result::Result<bitcoin_units::Amount, bitcoin_units::amount::error::OutOfRangeError>
 pub fn bitcoin_units::SignedAmount::try_from(value: bitcoin_units::Amount) -> core::result::Result<Self, Self::Error>
 pub fn bitcoin_units::SignedAmount::unchecked_add(self, rhs: bitcoin_units::SignedAmount) -> bitcoin_units::SignedAmount
 pub fn bitcoin_units::SignedAmount::unchecked_sub(self, rhs: bitcoin_units::SignedAmount) -> bitcoin_units::SignedAmount
@@ -802,57 +808,57 @@ pub fn bitcoin_units::amount::Denomination::hash<__H: core::hash::Hasher>(&self,
 pub fn bitcoin_units::amount::Display::clone(&self) -> bitcoin_units::amount::Display
 pub fn bitcoin_units::amount::Display::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
 pub fn bitcoin_units::amount::Display::show_denomination(self) -> Self
-pub fn bitcoin_units::amount::InputTooLargeError::clone(&self) -> bitcoin_units::amount::InputTooLargeError
-pub fn bitcoin_units::amount::InputTooLargeError::eq(&self, other: &bitcoin_units::amount::InputTooLargeError) -> bool
-pub fn bitcoin_units::amount::InputTooLargeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::InvalidCharacterError::clone(&self) -> bitcoin_units::amount::InvalidCharacterError
-pub fn bitcoin_units::amount::InvalidCharacterError::eq(&self, other: &bitcoin_units::amount::InvalidCharacterError) -> bool
-pub fn bitcoin_units::amount::InvalidCharacterError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::MissingDenominationError::clone(&self) -> bitcoin_units::amount::MissingDenominationError
-pub fn bitcoin_units::amount::MissingDenominationError::eq(&self, other: &bitcoin_units::amount::MissingDenominationError) -> bool
-pub fn bitcoin_units::amount::MissingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::MissingDigitsError::clone(&self) -> bitcoin_units::amount::MissingDigitsError
-pub fn bitcoin_units::amount::MissingDigitsError::eq(&self, other: &bitcoin_units::amount::MissingDigitsError) -> bool
-pub fn bitcoin_units::amount::MissingDigitsError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::OutOfRangeError::clone(&self) -> bitcoin_units::amount::OutOfRangeError
-pub fn bitcoin_units::amount::OutOfRangeError::eq(&self, other: &bitcoin_units::amount::OutOfRangeError) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::OutOfRangeError::is_above_max(self) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::is_below_min(self) -> bool
-pub fn bitcoin_units::amount::OutOfRangeError::valid_range(self) -> (i64, u64)
-pub fn bitcoin_units::amount::ParseAmountError::clone(&self) -> bitcoin_units::amount::ParseAmountError
-pub fn bitcoin_units::amount::ParseAmountError::eq(&self, other: &bitcoin_units::amount::ParseAmountError) -> bool
-pub fn bitcoin_units::amount::ParseAmountError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseAmountError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::InputTooLargeError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::InvalidCharacterError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::MissingDigitsError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::OutOfRangeError) -> Self
-pub fn bitcoin_units::amount::ParseAmountError::from(value: bitcoin_units::amount::TooPreciseError) -> Self
-pub fn bitcoin_units::amount::ParseDenominationError::clone(&self) -> bitcoin_units::amount::ParseDenominationError
-pub fn bitcoin_units::amount::ParseDenominationError::eq(&self, other: &bitcoin_units::amount::ParseDenominationError) -> bool
-pub fn bitcoin_units::amount::ParseDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseDenominationError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::ParseError::clone(&self) -> bitcoin_units::amount::ParseError
-pub fn bitcoin_units::amount::ParseError::eq(&self, other: &bitcoin_units::amount::ParseError) -> bool
-pub fn bitcoin_units::amount::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::InputTooLargeError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::InvalidCharacterError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::MissingDigitsError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::OutOfRangeError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::ParseAmountError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::ParseDenominationError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(e: bitcoin_units::amount::TooPreciseError) -> Self
-pub fn bitcoin_units::amount::ParseError::from(never: core::convert::Infallible) -> Self
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::clone(&self) -> bitcoin_units::amount::PossiblyConfusingDenominationError
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::eq(&self, other: &bitcoin_units::amount::PossiblyConfusingDenominationError) -> bool
-pub fn bitcoin_units::amount::PossiblyConfusingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::TooPreciseError::clone(&self) -> bitcoin_units::amount::TooPreciseError
-pub fn bitcoin_units::amount::TooPreciseError::eq(&self, other: &bitcoin_units::amount::TooPreciseError) -> bool
-pub fn bitcoin_units::amount::TooPreciseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub fn bitcoin_units::amount::UnknownDenominationError::clone(&self) -> bitcoin_units::amount::UnknownDenominationError
-pub fn bitcoin_units::amount::UnknownDenominationError::eq(&self, other: &bitcoin_units::amount::UnknownDenominationError) -> bool
-pub fn bitcoin_units::amount::UnknownDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::InputTooLargeError::clone(&self) -> bitcoin_units::amount::error::InputTooLargeError
+pub fn bitcoin_units::amount::error::InputTooLargeError::eq(&self, other: &bitcoin_units::amount::error::InputTooLargeError) -> bool
+pub fn bitcoin_units::amount::error::InputTooLargeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::InvalidCharacterError::clone(&self) -> bitcoin_units::amount::error::InvalidCharacterError
+pub fn bitcoin_units::amount::error::InvalidCharacterError::eq(&self, other: &bitcoin_units::amount::error::InvalidCharacterError) -> bool
+pub fn bitcoin_units::amount::error::InvalidCharacterError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::MissingDenominationError::clone(&self) -> bitcoin_units::amount::error::MissingDenominationError
+pub fn bitcoin_units::amount::error::MissingDenominationError::eq(&self, other: &bitcoin_units::amount::error::MissingDenominationError) -> bool
+pub fn bitcoin_units::amount::error::MissingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::MissingDigitsError::clone(&self) -> bitcoin_units::amount::error::MissingDigitsError
+pub fn bitcoin_units::amount::error::MissingDigitsError::eq(&self, other: &bitcoin_units::amount::error::MissingDigitsError) -> bool
+pub fn bitcoin_units::amount::error::MissingDigitsError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::OutOfRangeError::clone(&self) -> bitcoin_units::amount::error::OutOfRangeError
+pub fn bitcoin_units::amount::error::OutOfRangeError::eq(&self, other: &bitcoin_units::amount::error::OutOfRangeError) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::OutOfRangeError::is_above_max(self) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::is_below_min(self) -> bool
+pub fn bitcoin_units::amount::error::OutOfRangeError::valid_range(self) -> (i64, u64)
+pub fn bitcoin_units::amount::error::ParseAmountError::clone(&self) -> bitcoin_units::amount::error::ParseAmountError
+pub fn bitcoin_units::amount::error::ParseAmountError::eq(&self, other: &bitcoin_units::amount::error::ParseAmountError) -> bool
+pub fn bitcoin_units::amount::error::ParseAmountError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseAmountError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::InputTooLargeError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::InvalidCharacterError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::MissingDigitsError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::OutOfRangeError) -> Self
+pub fn bitcoin_units::amount::error::ParseAmountError::from(value: bitcoin_units::amount::error::TooPreciseError) -> Self
+pub fn bitcoin_units::amount::error::ParseDenominationError::clone(&self) -> bitcoin_units::amount::error::ParseDenominationError
+pub fn bitcoin_units::amount::error::ParseDenominationError::eq(&self, other: &bitcoin_units::amount::error::ParseDenominationError) -> bool
+pub fn bitcoin_units::amount::error::ParseDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseDenominationError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::ParseError::clone(&self) -> bitcoin_units::amount::error::ParseError
+pub fn bitcoin_units::amount::error::ParseError::eq(&self, other: &bitcoin_units::amount::error::ParseError) -> bool
+pub fn bitcoin_units::amount::error::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::InputTooLargeError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::InvalidCharacterError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::MissingDigitsError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::OutOfRangeError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::ParseAmountError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::ParseDenominationError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(e: bitcoin_units::amount::error::TooPreciseError) -> Self
+pub fn bitcoin_units::amount::error::ParseError::from(never: core::convert::Infallible) -> Self
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::clone(&self) -> bitcoin_units::amount::error::PossiblyConfusingDenominationError
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::eq(&self, other: &bitcoin_units::amount::error::PossiblyConfusingDenominationError) -> bool
+pub fn bitcoin_units::amount::error::PossiblyConfusingDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::TooPreciseError::clone(&self) -> bitcoin_units::amount::error::TooPreciseError
+pub fn bitcoin_units::amount::error::TooPreciseError::eq(&self, other: &bitcoin_units::amount::error::TooPreciseError) -> bool
+pub fn bitcoin_units::amount::error::TooPreciseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub fn bitcoin_units::amount::error::UnknownDenominationError::clone(&self) -> bitcoin_units::amount::error::UnknownDenominationError
+pub fn bitcoin_units::amount::error::UnknownDenominationError::eq(&self, other: &bitcoin_units::amount::error::UnknownDenominationError) -> bool
+pub fn bitcoin_units::amount::error::UnknownDenominationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
 pub fn bitcoin_units::block::BlockHeight::add(self, rhs: bitcoin_units::block::BlockInterval) -> Self::Output
 pub fn bitcoin_units::block::BlockHeight::clone(&self) -> bitcoin_units::block::BlockHeight
 pub fn bitcoin_units::block::BlockHeight::cmp(&self, other: &bitcoin_units::block::BlockHeight) -> core::cmp::Ordering
@@ -1022,6 +1028,7 @@ pub macro bitcoin_units::impl_tryfrom_str!
 pub macro bitcoin_units::impl_tryfrom_str_from_int_infallible!
 pub mod bitcoin_units
 pub mod bitcoin_units::amount
+pub mod bitcoin_units::amount::error
 pub mod bitcoin_units::block
 pub mod bitcoin_units::fee_rate
 pub mod bitcoin_units::locktime
@@ -1045,6 +1052,13 @@ pub struct bitcoin_units::amount::ParseAmountError(_)
 pub struct bitcoin_units::amount::ParseError(_)
 pub struct bitcoin_units::amount::SignedAmount(_)
 pub struct bitcoin_units::amount::TooPreciseError
+pub struct bitcoin_units::amount::error::InputTooLargeError
+pub struct bitcoin_units::amount::error::InvalidCharacterError
+pub struct bitcoin_units::amount::error::MissingDigitsError
+pub struct bitcoin_units::amount::error::OutOfRangeError
+pub struct bitcoin_units::amount::error::ParseAmountError(_)
+pub struct bitcoin_units::amount::error::ParseError(_)
+pub struct bitcoin_units::amount::error::TooPreciseError
 pub struct bitcoin_units::block::BlockHeight(pub u32)
 pub struct bitcoin_units::block::BlockInterval(pub u32)
 pub struct bitcoin_units::block::TooBigForRelativeBlockHeightError(_)
@@ -1065,14 +1079,14 @@ pub type &bitcoin_units::Amount::Output = bitcoin_units::Amount
 pub type &bitcoin_units::SignedAmount::Output = bitcoin_units::SignedAmount
 pub type &bitcoin_units::fee_rate::FeeRate::Output = bitcoin_units::fee_rate::FeeRate
 pub type &bitcoin_units::weight::Weight::Output = bitcoin_units::weight::Weight
-pub type bitcoin_units::Amount::Err = bitcoin_units::amount::ParseError
-pub type bitcoin_units::Amount::Error = bitcoin_units::amount::OutOfRangeError
+pub type bitcoin_units::Amount::Err = bitcoin_units::amount::error::ParseError
+pub type bitcoin_units::Amount::Error = bitcoin_units::amount::error::OutOfRangeError
 pub type bitcoin_units::Amount::Output = bitcoin_units::Amount
 pub type bitcoin_units::Amount::Output = bitcoin_units::fee_rate::FeeRate
-pub type bitcoin_units::SignedAmount::Err = bitcoin_units::amount::ParseError
-pub type bitcoin_units::SignedAmount::Error = bitcoin_units::amount::OutOfRangeError
+pub type bitcoin_units::SignedAmount::Err = bitcoin_units::amount::error::ParseError
+pub type bitcoin_units::SignedAmount::Error = bitcoin_units::amount::error::OutOfRangeError
 pub type bitcoin_units::SignedAmount::Output = bitcoin_units::SignedAmount
-pub type bitcoin_units::amount::Denomination::Err = bitcoin_units::amount::ParseDenominationError
+pub type bitcoin_units::amount::Denomination::Err = bitcoin_units::amount::error::ParseDenominationError
 pub type bitcoin_units::block::BlockHeight::Err = bitcoin_units::parse::ParseIntError
 pub type bitcoin_units::block::BlockHeight::Error = bitcoin_units::parse::ParseIntError
 pub type bitcoin_units::block::BlockHeight::Output = bitcoin_units::block::BlockHeight
diff --git a/bitcoin/src/psbt/mod.rs b/bitcoin/src/psbt/mod.rs
index 071b5afa..098e853e 100644
--- a/bitcoin/src/psbt/mod.rs
+++ b/bitcoin/src/psbt/mod.rs
@@ -712,15 +712,15 @@ fn output_type(&self, input_index: usize) -> Result<OutputType, SignError> {
     /// - [`Error::NegativeFee`] if calculated value is negative.
     /// - [`Error::FeeOverflow`] if an integer overflow occurs.
     pub fn fee(&self) -> Result<Amount, Error> {
-        let mut inputs: u64 = 0;
+        let mut inputs = Amount::ZERO;
         for utxo in self.iter_funding_utxos() {
-            inputs = inputs.checked_add(utxo?.value.to_sat()).ok_or(Error::FeeOverflow)?;
+            inputs = inputs.checked_add(utxo?.value).ok_or(Error::FeeOverflow)?;
         }
-        let mut outputs: u64 = 0;
+        let mut outputs = Amount::ZERO;
         for out in &self.unsigned_tx.output {
-            outputs = outputs.checked_add(out.value.to_sat()).ok_or(Error::FeeOverflow)?;
+            outputs = outputs.checked_add(out.value).ok_or(Error::FeeOverflow)?;
         }
-        inputs.checked_sub(outputs).map(Amount::from_sat).ok_or(Error::NegativeFee)
+        inputs.checked_sub(outputs).ok_or(Error::NegativeFee)
     }
 }
 
diff --git a/contrib/api.sh b/contrib/api.sh
index 97bfcf1e..e4ec0811 100755
--- a/contrib/api.sh
+++ b/contrib/api.sh
@@ -99,12 +99,12 @@ main() {
 
 # Print all public structs and enums.
 structs_and_enums() {
-    grep -oP 'pub (struct|enum) \K[\w:]+(?=\(|;| |$)' "$file" | sed "s/^${crate_full_name}:://"
+    grep -oP 'pub (struct|enum) \K[\w:]+(?=\(|;| )' "$file" | sed "s/^${crate_full_name}:://"
 }
 
 # Print all public structs and enums excluding error types.
 structs_and_enums_no_err() {
-    grep -oP 'pub (struct|enum) \K[\w:]+(?=\(|;| |$)' "$file" | sed "s/^${crate_full_name}:://" | grep -v Error
+    grep -oP 'pub (struct|enum) \K[\w:]+(?=\(|;| )' "$file" | sed "s/^${crate_full_name}:://" | grep -v Error
 }
 
 # Print all public traits.
diff --git a/nightly-version b/nightly-version
index a9dd23c1..71ef52e1 100644
--- a/nightly-version
+++ b/nightly-version
@@ -1,1 +1,1 @@
-nightly-2024-12-20
+nightly-2024-12-06
diff --git a/units/src/amount/mod.rs b/units/src/amount/mod.rs
index f340b90d..9a364fd0 100644
--- a/units/src/amount/mod.rs
+++ b/units/src/amount/mod.rs
@@ -5,7 +5,7 @@
 //! This module mainly introduces the [`Amount`] and [`SignedAmount`] types.
 //! We refer to the documentation on the types for more information.
 
-mod error;
+pub mod error;
 #[cfg(feature = "serde")]
 pub mod serde;
 
@@ -20,9 +20,6 @@
 use core::fmt;
 use core::str::FromStr;
 
-#[cfg(feature = "arbitrary")]
-use arbitrary::{Arbitrary, Unstructured};
-
 use self::error::{MissingDigitsKind, ParseAmountErrorInner, ParseErrorInner};
 
 #[rustfmt::skip]                // Keep public re-exports separate.
@@ -603,18 +600,3 @@ pub trait Sealed<A> {}
     impl<T> Sealed<Amount> for T where T: Iterator<Item = Amount> {}
     impl<T> Sealed<SignedAmount> for T where T: Iterator<Item = SignedAmount> {}
 }
-
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for Denomination {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let choice = u.int_in_range(0..=5)?;
-        match choice {
-            0 => Ok(Denomination::Bitcoin),
-            1 => Ok(Denomination::CentiBitcoin),
-            2 => Ok(Denomination::MilliBitcoin),
-            3 => Ok(Denomination::MicroBitcoin),
-            4 => Ok(Denomination::Bit),
-            _ => Ok(Denomination::Satoshi),
-        }
-    }
-}
diff --git a/units/src/amount/signed.rs b/units/src/amount/signed.rs
index 2faa7e45..a817566e 100644
--- a/units/src/amount/signed.rs
+++ b/units/src/amount/signed.rs
@@ -19,15 +19,15 @@
 /// A signed amount.
 ///
 /// The [`SignedAmount`] type can be used to express Bitcoin amounts that support arithmetic and
-/// conversion to various denominations. The [`SignedAmount`] type does not implement [`serde`]
-/// traits but we do provide modules for serializing as satoshis or bitcoin.
+/// conversion to various denominations. The `Amount` type does not implement `serde` traits but we
+/// do provide modules for serializing as satoshis or bitcoin.
 ///
 /// Warning!
 ///
 /// This type implements several arithmetic operations from [`core::ops`].
 /// To prevent errors due to overflow or underflow when using these operations,
 /// it is advised to instead use the checked arithmetic methods whose names
-/// start with `checked_`. The operations from [`core::ops`] that [`SignedAmount`]
+/// start with `checked_`. The operations from [`core::ops`] that [`Amount`]
 /// implements will panic when overflow or underflow occurs.
 ///
 /// # Examples
@@ -63,41 +63,12 @@ impl SignedAmount {
     pub const MAX: Self = SignedAmount::MAX_MONEY;
 
     /// Constructs a new [`SignedAmount`] with satoshi precision and the given number of satoshis.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::SignedAmount;
-    /// let amount = SignedAmount::from_sat(-100_000);
-    /// assert_eq!(amount.to_sat(), -100_000);
-    /// ```
     pub const fn from_sat(satoshi: i64) -> SignedAmount { SignedAmount(satoshi) }
 
     /// Gets the number of satoshis in this [`SignedAmount`].
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::SignedAmount;
-    /// assert_eq!(SignedAmount::ONE_BTC.to_sat(), 100_000_000);
-    /// ```
     pub const fn to_sat(self) -> i64 { self.0 }
 
-    /// Converts from a value expressing a decimal number of bitcoin to a [`SignedAmount`].
-    ///
-    /// # Errors
-    ///
-    /// If the amount is too big (positive or negative) or too precise.
-    ///
-    /// Please be aware of the risk of using floating-point numbers.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::SignedAmount;
-    /// let amount = SignedAmount::from_btc(-0.01).expect("we know 0.01 is valid");
-    /// assert_eq!(amount.to_sat(), -1_000_000);
-    /// ```
+    /// Converts from a value expressing a whole number of bitcoin to a [`SignedAmount`].
     #[cfg(feature = "alloc")]
     pub fn from_btc(btc: f64) -> Result<SignedAmount, ParseAmountError> {
         SignedAmount::from_float_in(btc, Denomination::Bitcoin)
@@ -130,14 +101,10 @@ pub const fn from_int_btc_const(whole_bitcoin: i64) -> SignedAmount {
         }
     }
 
-    /// Parses a decimal string as a value in the given [`Denomination`].
-    ///
-    /// Note: This only parses the value string. If you want to parse a string
-    /// containing the value with denomination, use [`FromStr`].
-    ///
-    /// # Errors
+    /// Parses a decimal string as a value in the given denomination.
     ///
-    /// If the amount is too big (positive or negative) or too precise.
+    /// Note: This only parses the value string. If you want to parse a value
+    /// with denomination, use [`FromStr`].
     pub fn from_str_in(s: &str, denom: Denomination) -> Result<SignedAmount, ParseAmountError> {
         match parse_signed_to_satoshi(s, denom).map_err(|error| error.convert(true))? {
             // (negative, amount)
@@ -156,41 +123,20 @@ pub fn from_str_in(s: &str, denom: Denomination) -> Result<SignedAmount, ParseAm
     /// or with [`fmt::Display`].
     ///
     /// If you want to parse only the amount without the denomination, use [`Self::from_str_in`].
-    ///
-    /// # Errors
-    ///
-    /// If the amount is too big (positive or negative) or too precise.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::{amount, SignedAmount};
-    /// let amount = SignedAmount::from_str_with_denomination("0.1 BTC")?;
-    /// assert_eq!(amount, SignedAmount::from_sat(10_000_000));
-    /// # Ok::<_, amount::ParseError>(())
-    /// ```
     pub fn from_str_with_denomination(s: &str) -> Result<SignedAmount, ParseError> {
         let (amt, denom) = split_amount_and_denomination(s)?;
         SignedAmount::from_str_in(amt, denom).map_err(Into::into)
     }
 
-    /// Expresses this [`SignedAmount`] as a floating-point value in the given [`Denomination`].
+    /// Express this [`SignedAmount`] as a floating-point value in the given denomination.
     ///
     /// Please be aware of the risk of using floating-point numbers.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::amount::{SignedAmount, Denomination};
-    /// let amount = SignedAmount::from_sat(100_000);
-    /// assert_eq!(amount.to_float_in(Denomination::Bitcoin), 0.001)
-    /// ```
     #[cfg(feature = "alloc")]
     pub fn to_float_in(self, denom: Denomination) -> f64 {
         self.to_string_in(denom).parse::<f64>().unwrap()
     }
 
-    /// Expresses this [`SignedAmount`] as a floating-point value in Bitcoin.
+    /// Express this [`SignedAmount`] as a floating-point value in Bitcoin.
     ///
     /// Please be aware of the risk of using floating-point numbers.
     ///
@@ -204,11 +150,12 @@ pub fn to_float_in(self, denom: Denomination) -> f64 {
     #[cfg(feature = "alloc")]
     pub fn to_btc(self) -> f64 { self.to_float_in(Denomination::Bitcoin) }
 
-    /// Converts this [`SignedAmount`] in floating-point notation in the given [`Denomination`].
+    /// Convert this [`SignedAmount`] in floating-point notation with a given
+    /// denomination.
     ///
     /// # Errors
     ///
-    /// If the amount is too big (positive or negative) or too precise.
+    /// If the amount is too big, too precise or negative.
     ///
     /// Please be aware of the risk of using floating-point numbers.
     #[cfg(feature = "alloc")]
@@ -221,21 +168,7 @@ pub fn from_float_in(
         SignedAmount::from_str_in(&value.to_string(), denom)
     }
 
-    /// Constructs a new object that implements [`fmt::Display`] in the given [`Denomination`].
-    ///
-    /// This function is useful if you do not wish to allocate. See also [`Self::to_string_in`].
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::amount::{SignedAmount, Denomination};
-    /// # use std::fmt::Write;
-    /// let amount = SignedAmount::from_sat(10_000_000);
-    /// let mut output = String::new();
-    /// write!(&mut output, "{}", amount.display_in(Denomination::Bitcoin))?;
-    /// assert_eq!(output, "0.1");
-    /// # Ok::<(), std::fmt::Error>(())
-    /// ```
+    /// Constructs a new object that implements [`fmt::Display`] using specified denomination.
     #[must_use]
     pub fn display_in(self, denomination: Denomination) -> Display {
         Display {
@@ -245,8 +178,7 @@ pub fn display_in(self, denomination: Denomination) -> Display {
         }
     }
 
-    /// Constructs a new object that implements [`fmt::Display`] dynamically selecting
-    /// [`Denomination`].
+    /// Constructs a new object that implements [`fmt::Display`] dynamically selecting denomination.
     ///
     /// This will use BTC for values greater than or equal to 1 BTC and satoshis otherwise. To
     /// avoid confusion the denomination is always shown.
@@ -259,30 +191,14 @@ pub fn display_dynamic(self) -> Display {
         }
     }
 
-    /// Returns a formatted string representing this [`SignedAmount`] in the given [`Denomination`].
-    ///
-    /// Returned string does not include the denomination.
-    ///
-    /// # Examples
+    /// Returns a formatted string representing this [`SignedAmount`] in the given denomination.
     ///
-    /// ```
-    /// # use bitcoin_units::amount::{SignedAmount, Denomination};
-    /// let amount = SignedAmount::from_sat(10_000_000);
-    /// assert_eq!(amount.to_string_in(Denomination::Bitcoin), "0.1")
-    /// ```
+    /// Does not include the denomination.
     #[cfg(feature = "alloc")]
     pub fn to_string_in(self, denom: Denomination) -> String { self.display_in(denom).to_string() }
 
-    /// Returns a formatted string representing this [`SignedAmount`] in the given [`Denomination`],
-    /// suffixed with the abbreviation for the denomination.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::amount::{SignedAmount, Denomination};
-    /// let amount = SignedAmount::from_sat(10_000_000);
-    /// assert_eq!(amount.to_string_with_denomination(Denomination::Bitcoin), "0.1 BTC")
-    /// ```
+    /// Returns a formatted string representing this [`Amount`] in the given denomination, suffixed
+    /// with the abbreviation for the denomination.
     #[cfg(feature = "alloc")]
     pub fn to_string_with_denomination(self, denom: Denomination) -> String {
         self.display_in(denom).show_denomination().to_string()
@@ -290,7 +206,7 @@ pub fn to_string_with_denomination(self, denom: Denomination) -> String {
 
     // Some arithmetic that doesn't fit in [`core::ops`] traits.
 
-    /// Gets the absolute value of this [`SignedAmount`].
+    /// Get the absolute value of this [`SignedAmount`].
     #[must_use]
     pub fn abs(self) -> SignedAmount { SignedAmount(self.0.abs()) }
 
@@ -322,7 +238,7 @@ pub fn is_negative(self) -> bool { self.0.is_negative() }
     ///
     /// Consider using `unsigned_abs` which is often more practical.
     ///
-    /// Returns [`None`] if overflow occurred. (`self == i64::MIN`)
+    /// Returns [`None`] if overflow occurred. (`self == MIN`)
     #[must_use]
     pub const fn checked_abs(self) -> Option<SignedAmount> {
         // No `map()` in const context.
@@ -334,7 +250,7 @@ pub const fn checked_abs(self) -> Option<SignedAmount> {
 
     /// Checked addition.
     ///
-    /// Returns [`None`] if the sum is above [`SignedAmount::MAX`] or below [`SignedAmount::MIN`].
+    /// Returns [`None`] if overflow occurred.
     #[must_use]
     pub const fn checked_add(self, rhs: SignedAmount) -> Option<SignedAmount> {
         // No `map()` in const context.
@@ -346,8 +262,7 @@ pub const fn checked_add(self, rhs: SignedAmount) -> Option<SignedAmount> {
 
     /// Checked subtraction.
     ///
-    /// Returns [`None`] if the difference is above [`SignedAmount::MAX`] or below
-    /// [`SignedAmount::MIN`].
+    /// Returns [`None`] if overflow occurred.
     #[must_use]
     pub const fn checked_sub(self, rhs: SignedAmount) -> Option<SignedAmount> {
         // No `map()` in const context.
@@ -359,8 +274,7 @@ pub const fn checked_sub(self, rhs: SignedAmount) -> Option<SignedAmount> {
 
     /// Checked multiplication.
     ///
-    /// Returns [`None`] if the product is above [`SignedAmount::MAX`] or below
-    /// [`SignedAmount::MIN`].
+    /// Returns [`None`] if overflow occurred.
     #[must_use]
     pub const fn checked_mul(self, rhs: i64) -> Option<SignedAmount> {
         // No `map()` in const context.
@@ -431,10 +345,6 @@ pub fn positive_sub(self, rhs: SignedAmount) -> Option<SignedAmount> {
     }
 
     /// Converts to an unsigned amount.
-    ///
-    /// # Errors
-    ///
-    /// If the amount is negative.
     pub fn to_unsigned(self) -> Result<Amount, OutOfRangeError> {
         if self.is_negative() {
             Err(OutOfRangeError::negative())
diff --git a/units/src/amount/unsigned.rs b/units/src/amount/unsigned.rs
index 49edb71b..be18ea8f 100644
--- a/units/src/amount/unsigned.rs
+++ b/units/src/amount/unsigned.rs
@@ -81,13 +81,6 @@ impl Amount {
     pub const fn from_sat(satoshi: u64) -> Amount { Amount(satoshi) }
 
     /// Gets the number of satoshis in this [`Amount`].
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::Amount;
-    /// assert_eq!(Amount::ONE_BTC.to_sat(), 100_000_000);
-    /// ```
     pub const fn to_sat(self) -> u64 { self.0 }
 
     /// Converts from a value expressing a decimal number of bitcoin to an [`Amount`].
@@ -97,14 +90,6 @@ pub const fn to_sat(self) -> u64 { self.0 }
     /// If the amount is too big, too precise or negative.
     ///
     /// Please be aware of the risk of using floating-point numbers.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::Amount;
-    /// let amount = Amount::from_btc(0.01).expect("we know 0.01 is valid");
-    /// assert_eq!(amount.to_sat(), 1_000_000);
-    /// ```
     #[cfg(feature = "alloc")]
     pub fn from_btc(btc: f64) -> Result<Amount, ParseAmountError> {
         Amount::from_float_in(btc, Denomination::Bitcoin)
@@ -214,7 +199,8 @@ pub fn to_float_in(self, denom: Denomination) -> f64 {
     #[cfg(feature = "alloc")]
     pub fn to_btc(self) -> f64 { self.to_float_in(Denomination::Bitcoin) }
 
-    /// Converts this [`Amount`] in floating-point notation in the given [`Denomination`].
+    /// Converts this [`Amount`] in floating-point notation in the given
+    /// [`Denomination`].
     ///
     /// # Errors
     ///
@@ -232,20 +218,6 @@ pub fn from_float_in(value: f64, denom: Denomination) -> Result<Amount, ParseAmo
     }
 
     /// Constructs a new object that implements [`fmt::Display`] in the given [`Denomination`].
-    ///
-    /// This function is useful if you do not wish to allocate. See also [`Self::to_string_in`].
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// # use bitcoin_units::amount::{Amount, Denomination};
-    /// # use std::fmt::Write;
-    /// let amount = Amount::from_sat(10_000_000);
-    /// let mut output = String::new();
-    /// write!(&mut output, "{}", amount.display_in(Denomination::Bitcoin))?;
-    /// assert_eq!(output, "0.1");
-    /// # Ok::<(), std::fmt::Error>(())
-    /// ```
     #[must_use]
     pub fn display_in(self, denomination: Denomination) -> Display {
         Display {
@@ -354,7 +326,7 @@ pub const fn checked_div(self, rhs: u64) -> Option<Amount> {
     ///
     /// Be aware that integer division loses the remainder if no exact division
     /// can be made. This method rounds up ensuring the transaction fee-rate is
-    /// sufficient. See also [`Self::checked_div_by_weight_floor`].
+    /// sufficient. See also [`Amount::checked_div_by_weight_floor`].
     ///
     /// Returns [`None`] if overflow occurred.
     ///
@@ -387,7 +359,7 @@ pub const fn checked_div_by_weight_ceil(self, rhs: Weight) -> Option<FeeRate> {
     /// Checked weight floor division.
     ///
     /// Be aware that integer division loses the remainder if no exact division
-    /// can be made. See also [`Self::checked_div_by_weight_ceil`].
+    /// can be made. See also [`Amount::checked_div_by_weight_ceil`].
     ///
     /// Returns [`None`] if overflow occurred.
     #[cfg(feature = "alloc")]
diff --git a/units/src/block.rs b/units/src/block.rs
index 9e8efa52..10e9208d 100644
--- a/units/src/block.rs
+++ b/units/src/block.rs
@@ -13,8 +13,6 @@
 
 use core::{fmt, ops};
 
-#[cfg(feature = "arbitrary")]
-use arbitrary::{Arbitrary, Unstructured};
 #[cfg(feature = "serde")]
 use serde::{Deserialize, Serialize};
 
@@ -250,30 +248,6 @@ fn sum<I>(iter: I) -> Self
     }
 }
 
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for BlockHeight {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let choice = u.int_in_range(0..=2)?;
-        match choice {
-            0 => Ok(BlockHeight::MIN),
-            1 => Ok(BlockHeight::MAX),
-            _ => Ok(BlockHeight::from_u32(u32::arbitrary(u)?)),
-        }
-    }
-}
-
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for BlockInterval {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let choice = u.int_in_range(0..=2)?;
-        match choice {
-            0 => Ok(BlockInterval::MIN),
-            1 => Ok(BlockInterval::MAX),
-            _ => Ok(BlockInterval::from_u32(u32::arbitrary(u)?)),
-        }
-    }
-}
-
 #[cfg(test)]
 mod tests {
     use super::*;
diff --git a/units/src/fee_rate.rs b/units/src/fee_rate.rs
index 3429aa44..9f84a766 100644
--- a/units/src/fee_rate.rs
+++ b/units/src/fee_rate.rs
@@ -161,6 +161,14 @@ pub fn fee_vb(self, vb: u64) -> Option<Amount> {
     }
 }
 
+#[cfg(feature = "arbitrary")]
+impl<'a> Arbitrary<'a> for FeeRate {
+    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
+        let f = u64::arbitrary(u)?;
+        Ok(FeeRate(f))
+    }
+}
+
 /// Alternative will display the unit.
 impl fmt::Display for FeeRate {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
@@ -237,20 +245,6 @@ fn sum<I>(iter: I) -> Self
 
 crate::impl_parse_str_from_int_infallible!(FeeRate, u64, from_sat_per_kwu);
 
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for FeeRate {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let choice = u.int_in_range(0..=4)?;
-        match choice {
-            0 => Ok(FeeRate::MIN),
-            1 => Ok(FeeRate::BROADCAST_MIN),
-            2 => Ok(FeeRate::DUST),
-            3 => Ok(FeeRate::MAX),
-            _ => Ok(FeeRate(u64::arbitrary(u)?)),
-        }
-    }
-}
-
 #[cfg(test)]
 mod tests {
     use super::*;
diff --git a/units/src/locktime/absolute.rs b/units/src/locktime/absolute.rs
index 25de4f79..1ab4b82c 100644
--- a/units/src/locktime/absolute.rs
+++ b/units/src/locktime/absolute.rs
@@ -4,8 +4,6 @@
 
 use core::fmt;
 
-#[cfg(feature = "arbitrary")]
-use arbitrary::{Arbitrary, Unstructured};
 use internals::error::InputString;
 
 use crate::parse::{self, ParseIntError};
@@ -388,40 +386,6 @@ impl From<ConversionError> for ParseError {
     fn from(value: ConversionError) -> Self { Self::Conversion(value.input.into()) }
 }
 
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for Height {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let choice = u.int_in_range(0..=2)?;
-        match choice {
-            0 => Ok(Height::MIN),
-            1 => Ok(Height::MAX),
-            _ => {
-                let min = Height::MIN.to_consensus_u32();
-                let max = Height::MAX.to_consensus_u32();
-                let h = u.int_in_range(min..=max)?;
-                Ok(Height::from_consensus(h).unwrap())
-            }
-        }
-    }
-}
-
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for Time {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let choice = u.int_in_range(0..=2)?;
-        match choice {
-            0 => Ok(Time::MIN),
-            1 => Ok(Time::MAX),
-            _ => {
-                let min = Time::MIN.to_consensus_u32();
-                let max = Time::MAX.to_consensus_u32();
-                let t = u.int_in_range(min..=max)?;
-                Ok(Time::from_consensus(t).unwrap())
-            }
-        }
-    }
-}
-
 #[cfg(test)]
 mod tests {
     #[cfg(feature = "serde")]
diff --git a/units/src/locktime/relative.rs b/units/src/locktime/relative.rs
index 25c875ee..283ec1aa 100644
--- a/units/src/locktime/relative.rs
+++ b/units/src/locktime/relative.rs
@@ -4,8 +4,6 @@
 
 use core::fmt;
 
-#[cfg(feature = "arbitrary")]
-use arbitrary::{Arbitrary, Unstructured};
 #[cfg(feature = "serde")]
 use serde::{Deserialize, Serialize};
 
@@ -161,32 +159,6 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
 #[cfg(feature = "std")]
 impl std::error::Error for TimeOverflowError {}
 
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for Height {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let choice = u.int_in_range(0..=2)?;
-
-        match choice {
-            0 => Ok(Height::MIN),
-            1 => Ok(Height::MAX),
-            _ => Ok(Height::from_height(u16::arbitrary(u)?)),
-        }
-    }
-}
-
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for Time {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let choice = u.int_in_range(0..=2)?;
-
-        match choice {
-            0 => Ok(Time::MIN),
-            1 => Ok(Time::MAX),
-            _ => Ok(Time::from_512_second_intervals(u16::arbitrary(u)?)),
-        }
-    }
-}
-
 #[cfg(test)]
 mod tests {
     use super::*;


Test patch:
diff --git a/units/tests/api.rs b/units/tests/api.rs
index 6fb84cfa..20746a3a 100644
--- a/units/tests/api.rs
+++ b/units/tests/api.rs
@@ -25,8 +25,6 @@
     amount, block, fee_rate, locktime, parse, weight, Amount, BlockHeight, BlockInterval, FeeRate,
     SignedAmount, Weight,
 };
-#[cfg(feature = "arbitrary")]
-use arbitrary::{Arbitrary, Unstructured};
 
 /// A struct that includes all public non-error enums.
 #[derive(Debug)] // All public types implement Debug (C-DEBUG).
@@ -124,17 +122,17 @@ struct Errors {
     i: amount::PossiblyConfusingDenominationError,
     j: amount::TooPreciseError,
     k: amount::UnknownDenominationError,
-    l: amount::InputTooLargeError,
-    m: amount::InvalidCharacterError,
-    n: amount::MissingDenominationError,
-    o: amount::MissingDigitsError,
-    p: amount::OutOfRangeError,
-    q: amount::ParseAmountError,
-    r: amount::ParseDenominationError,
-    s: amount::ParseError,
-    t: amount::PossiblyConfusingDenominationError,
-    u: amount::TooPreciseError,
-    v: amount::UnknownDenominationError,
+    l: amount::error::InputTooLargeError,
+    m: amount::error::InvalidCharacterError,
+    n: amount::error::MissingDenominationError,
+    o: amount::error::MissingDigitsError,
+    p: amount::error::OutOfRangeError,
+    q: amount::error::ParseAmountError,
+    r: amount::error::ParseDenominationError,
+    s: amount::error::ParseError,
+    t: amount::error::PossiblyConfusingDenominationError,
+    u: amount::error::TooPreciseError,
+    v: amount::error::UnknownDenominationError,
     w: block::TooBigForRelativeBlockHeightError,
     x: locktime::absolute::ConversionError,
     y: locktime::absolute::Height,
@@ -166,6 +164,15 @@ fn api_can_use_all_types_from_module_amount() {
     };
 }
 
+#[test]
+fn api_can_use_all_types_from_module_amount_error() {
+    use bitcoin_units::amount::error::{
+        InputTooLargeError, InvalidCharacterError, MissingDenominationError, MissingDigitsError,
+        OutOfRangeError, ParseAmountError, ParseDenominationError, ParseError,
+        PossiblyConfusingDenominationError, TooPreciseError, UnknownDenominationError,
+    };
+}
+
 #[test]
 fn api_can_use_all_types_from_module_block() {
     use bitcoin_units::block::{BlockHeight, BlockInterval, TooBigForRelativeBlockHeightError};
@@ -256,42 +263,3 @@ fn regression_default() {
     };
     assert_eq!(got, want);
 }
-
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for Types {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let a = Types { a: Enums::arbitrary(u)?, b: Structs::arbitrary(u)? };
-        Ok(a)
-    }
-}
-
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for Structs {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let a = Structs {
-            a: Amount::arbitrary(u)?,
-            // Skip the `Display` type.
-            b: Amount::MAX.display_in(amount::Denomination::Bitcoin),
-            c: SignedAmount::arbitrary(u)?,
-            d: BlockHeight::arbitrary(u)?,
-            e: BlockInterval::arbitrary(u)?,
-            f: FeeRate::arbitrary(u)?,
-            g: absolute::Height::arbitrary(u)?,
-            h: absolute::Time::arbitrary(u)?,
-            i: relative::Height::arbitrary(u)?,
-            j: relative::Time::arbitrary(u)?,
-            k: Weight::arbitrary(u)?,
-        };
-        Ok(a)
-    }
-}
-
-#[cfg(feature = "arbitrary")]
-impl<'a> Arbitrary<'a> for Enums {
-    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
-        let a = Enums {
-            a: amount::Denomination::arbitrary(u)?,
-        };
-        Ok(a)
-    }
-}