Remove conversion impl macro for `Magic`/`Network`

Closes #4560

Handle the coversion of new networks directly in the `From` and
`TryFrom` implementations, as new networks are added infrequently.
This commit is contained in:
rustaceanrob 2025-05-27 11:38:00 +01:00
parent 5e0b86d2b1
commit 028a0d6558
No known key found for this signature in database
GPG Key ID: F4DD8F8486EC0F1F
1 changed files with 24 additions and 32 deletions

View File

@ -249,40 +249,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 {
fn from(network: Network) -> Magic {
match network { match network {
$(
Network::$network$((TestnetVersion::$testnet_version))? => Magic::$magic,
)*
}
}
}
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::Bitcoin => Magic::BITCOIN,
Network::Testnet(TestnetVersion::V3) => Magic::TESTNET3, Network::Testnet(TestnetVersion::V3) => Magic::TESTNET3,
Network::Testnet(TestnetVersion::V4) => Magic::TESTNET4, Network::Testnet(TestnetVersion::V4) => Magic::TESTNET4,
Network::Signet => Magic::SIGNET, Network::Signet => Magic::SIGNET,
Network::Regtest => Magic::REGTEST, 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::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 { impl fmt::Display for Magic {