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 { impl From<Network> for Magic {
($(Network::$network:ident$((TestnetVersion::$testnet_version:ident))? => Magic::$magic:ident,)*) => { fn from(network: Network) -> Self {
impl From<Network> for Magic { match network {
fn from(network: Network) -> Magic { Network::Bitcoin => Magic::BITCOIN,
match network { Network::Testnet(TestnetVersion::V3) => Magic::TESTNET3,
$( Network::Testnet(TestnetVersion::V4) => Magic::TESTNET4,
Network::$network$((TestnetVersion::$testnet_version))? => Magic::$magic, 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` impl TryFrom<Magic> for Network {
generate_network_magic_conversion! { type Error = UnknownMagicError;
Network::Bitcoin => Magic::BITCOIN,
Network::Testnet(TestnetVersion::V3) => Magic::TESTNET3, fn try_from(magic: Magic) -> Result<Self, Self::Error> {
Network::Testnet(TestnetVersion::V4) => Magic::TESTNET4, match magic {
Network::Signet => Magic::SIGNET, Magic::BITCOIN => Ok(Network::Bitcoin),
Network::Regtest => Magic::REGTEST, 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 { impl fmt::Display for Magic {