generate Network <-> Magic From and TryFrom with a macro
This commit is contained in:
parent
f260b097f4
commit
76826313a1
|
@ -243,31 +243,38 @@ impl FromStr for Magic {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Network> for Magic {
|
macro_rules! generate_network_magic_conversion {
|
||||||
fn from(network: Network) -> Magic {
|
($(Network::$network:ident => Magic::$magic:ident,)*) => {
|
||||||
match network {
|
impl From<Network> for Magic {
|
||||||
// Note: new network entries must explicitly be matched in `try_from` below.
|
fn from(network: Network) -> Magic {
|
||||||
Network::Bitcoin => Magic::BITCOIN,
|
match network {
|
||||||
Network::Testnet => Magic::TESTNET,
|
$(
|
||||||
Network::Signet => Magic::SIGNET,
|
Network::$network => Magic::$magic,
|
||||||
Network::Regtest => Magic::REGTEST,
|
)*
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
impl TryFrom<Magic> for Network {
|
||||||
|
type Error = UnknownMagicError;
|
||||||
|
|
||||||
|
fn try_from(magic: Magic) -> Result<Self, Self::Error> {
|
||||||
|
match magic {
|
||||||
|
$(
|
||||||
|
Magic::$magic => Ok(Network::$network),
|
||||||
|
)*
|
||||||
|
_ => Err(UnknownMagicError(magic)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<Magic> for Network {
|
generate_network_magic_conversion! {
|
||||||
type Error = UnknownMagicError;
|
Network::Bitcoin => Magic::BITCOIN,
|
||||||
|
Network::Testnet => Magic::TESTNET,
|
||||||
fn try_from(magic: Magic) -> Result<Self, Self::Error> {
|
Network::Signet => Magic::SIGNET,
|
||||||
match magic {
|
Network::Regtest => Magic::REGTEST,
|
||||||
// Note: any new network entries must be matched against here.
|
|
||||||
Magic::BITCOIN => Ok(Network::Bitcoin),
|
|
||||||
Magic::TESTNET => Ok(Network::Testnet),
|
|
||||||
Magic::SIGNET => Ok(Network::Signet),
|
|
||||||
Magic::REGTEST => Ok(Network::Regtest),
|
|
||||||
_ => Err(UnknownMagicError(magic)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for Magic {
|
impl fmt::Display for Magic {
|
||||||
|
|
Loading…
Reference in New Issue