Merge rust-bitcoin/rust-bitcoin#4568: Remove conversion impl macro for `Magic`/`Network`

028a0d6558 Remove conversion impl macro for `Magic`/`Network` (rustaceanrob)

Pull request description:

  Closes #4560 (or at least one way to close it)

  Handle the coversion of new networks directly in the `From` and `TryFrom` implementations, as new networks are added infrequently.

ACKs for top commit:
  tcharding:
    ACK 028a0d6558
  apoelstra:
    ACK 028a0d6558129f554de8c4247481bc0ad80f1c27; successfully ran local tests

Tree-SHA512: 07b768e229305878849f23e54d3fb4940a736ce44122950e4f4bf68ddeb4f82f2d35020840e8176bd7b562726e46055650ba6de8559bae7559c881b64a437169
This commit is contained in:
merge-script 2025-06-04 18:17:25 +00:00
commit a746456601
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
1 changed files with 24 additions and 32 deletions

View File

@ -251,40 +251,32 @@ impl FromStr for Magic {
}
}
macro_rules! generate_network_magic_conversion {
($(Network::$network:ident$((TestnetVersion::$testnet_version:ident))? => Magic::$magic:ident,)*) => {
impl From<Network> for Magic {
fn from(network: Network) -> Magic {
match network {
$(
Network::$network$((TestnetVersion::$testnet_version))? => Magic::$magic,
)*
}
}
impl From<Network> for Magic {
fn from(network: Network) -> Self {
match network {
Network::Bitcoin => Magic::BITCOIN,
Network::Testnet(TestnetVersion::V3) => Magic::TESTNET3,
Network::Testnet(TestnetVersion::V4) => Magic::TESTNET4,
Network::Signet => Magic::SIGNET,
Network::Regtest => Magic::REGTEST,
// Remember to add the `TryFrom<Magic>` for new networks
}
impl TryFrom<Magic> for Network {
type Error = UnknownMagicError;
fn try_from(magic: Magic) -> Result<Self, Self::Error> {
match magic {
$(
Magic::$magic => Ok(Network::$network$((TestnetVersion::$testnet_version))?),
)*
_ => Err(UnknownMagicError(magic)),
}
}
}
};
}
}
// Generate conversion functions for all known networks.
// `Network -> Magic` and `Magic -> Network`
generate_network_magic_conversion! {
Network::Bitcoin => Magic::BITCOIN,
Network::Testnet(TestnetVersion::V3) => Magic::TESTNET3,
Network::Testnet(TestnetVersion::V4) => Magic::TESTNET4,
Network::Signet => Magic::SIGNET,
Network::Regtest => Magic::REGTEST,
impl TryFrom<Magic> for Network {
type Error = UnknownMagicError;
fn try_from(magic: Magic) -> Result<Self, Self::Error> {
match magic {
Magic::BITCOIN => Ok(Network::Bitcoin),
Magic::TESTNET3 => Ok(Network::Testnet(TestnetVersion::V3)),
Magic::TESTNET4 => Ok(Network::Testnet(TestnetVersion::V4)),
Magic::SIGNET => Ok(Network::Signet),
Magic::REGTEST => Ok(Network::Regtest),
_ => Err(UnknownMagicError(magic)),
}
}
}
impl fmt::Display for Magic {