diff --git a/polkadot/xcm/src/lib.rs b/polkadot/xcm/src/lib.rs index 40ba1dc7dc..2e8ea78b5c 100644 --- a/polkadot/xcm/src/lib.rs +++ b/polkadot/xcm/src/lib.rs @@ -242,6 +242,26 @@ versioned_type! { } } +versioned_type! { + /// A single `NetworkId` value, together with its version code. + pub enum VersionedNetworkId { + #[codec(index = 2)] + V2(v2::NetworkId), + #[codec(index = 3)] + V3(v3::NetworkId), + } +} + +versioned_type! { + /// A single `Junction` value, together with its version code. + pub enum VersionedJunction { + #[codec(index = 2)] + V2(v2::Junction), + #[codec(index = 3)] + V3(v3::Junction), + } +} + versioned_type! { /// A single `MultiLocation` value, together with its version code. #[derive(Ord, PartialOrd)] diff --git a/polkadot/xcm/src/v2/mod.rs b/polkadot/xcm/src/v2/mod.rs index 6a24cf0720..014942d6b6 100644 --- a/polkadot/xcm/src/v2/mod.rs +++ b/polkadot/xcm/src/v2/mod.rs @@ -117,16 +117,25 @@ pub enum NetworkId { Kusama, } -impl TryInto for Option { +impl TryFrom> for NetworkId { type Error = (); - fn try_into(self) -> result::Result { + fn try_from(new: Option) -> result::Result { + match new { + None => Ok(NetworkId::Any), + Some(id) => Self::try_from(id), + } + } +} + +impl TryFrom for NetworkId { + type Error = (); + fn try_from(new: NewNetworkId) -> result::Result { use NewNetworkId::*; - Ok(match self { - None => NetworkId::Any, - Some(Polkadot) => NetworkId::Polkadot, - Some(Kusama) => NetworkId::Kusama, - _ => return Err(()), - }) + match new { + Polkadot => Ok(NetworkId::Polkadot), + Kusama => Ok(NetworkId::Kusama), + _ => Err(()), + } } } diff --git a/polkadot/xcm/src/v3/junction.rs b/polkadot/xcm/src/v3/junction.rs index cf3437ac6a..5fee8d1f83 100644 --- a/polkadot/xcm/src/v3/junction.rs +++ b/polkadot/xcm/src/v3/junction.rs @@ -88,6 +88,18 @@ impl From for Option { } } +impl TryFrom for NetworkId { + type Error = (); + fn try_from(old: OldNetworkId) -> Result { + use OldNetworkId::*; + match old { + Any | Named(_) => Err(()), + Polkadot => Ok(NetworkId::Polkadot), + Kusama => Ok(NetworkId::Kusama), + } + } +} + /// An identifier of a pluralistic body. #[derive( Copy,