diff --git a/xcm/procedural/src/v0/multilocation.rs b/xcm/procedural/src/v0/multilocation.rs index 82db5cce4ee5..247ef856b14e 100644 --- a/xcm/procedural/src/v0/multilocation.rs +++ b/xcm/procedural/src/v0/multilocation.rs @@ -96,7 +96,7 @@ fn generate_conversion_from_v1() -> TokenStream { .collect::(); quote! { - impl TryFrom for MultiLocation { + impl core::convert::TryFrom for MultiLocation { type Error = (); fn try_from(v1: crate::v1::MultiLocation) -> core::result::Result { let mut res = MultiLocation::Null; diff --git a/xcm/procedural/src/v1/multilocation.rs b/xcm/procedural/src/v1/multilocation.rs index c58f85ca31ff..eae3d677b075 100644 --- a/xcm/procedural/src/v1/multilocation.rs +++ b/xcm/procedural/src/v1/multilocation.rs @@ -172,7 +172,7 @@ fn generate_conversion_from_v0() -> TokenStream { if #( #parent_idents.is_parent() )&&* => Ok(MultiLocation { parents: #parent_count, - interior: #junction_variant( #( #junction_idents.try_into()? ),* ), + interior: #junction_variant( #( core::convert::TryInto::try_into(#junction_idents)? ),* ), }), } }) @@ -184,16 +184,18 @@ fn generate_conversion_from_v0() -> TokenStream { Ok(MultiLocation::ancestor(#num_ancestors)), #intermediate_match_arms crate::v0::MultiLocation::#variant( #(#idents),* ) => - Ok( #variant( #( #idents.try_into()? ),* ).into() ), + Ok( #variant( #( core::convert::TryInto::try_into(#idents)? ),* ).into() ), } }) .collect::(); quote! { - impl TryFrom for MultiLocation { + impl core::convert::TryFrom for MultiLocation { type Error = (); - fn try_from(v0: crate::v0::MultiLocation) -> core::result::Result { + fn try_from(mut v0: crate::v0::MultiLocation) -> core::result::Result { use Junctions::*; + + v0.canonicalize(); match v0 { crate::v0::MultiLocation::Null => Ok(Here.into()), #match_variants diff --git a/xcm/src/v0/multi_location.rs b/xcm/src/v0/multi_location.rs index 1a6f4beb241f..6205071690f0 100644 --- a/xcm/src/v0/multi_location.rs +++ b/xcm/src/v0/multi_location.rs @@ -17,7 +17,7 @@ //! Cross-Consensus Message format data structures. use super::Junction; -use core::{convert::TryFrom, mem, result}; +use core::{mem, result}; use parity_scale_codec::{self, Decode, Encode}; /// A relative path between state-bearing consensus systems. diff --git a/xcm/src/v1/multilocation.rs b/xcm/src/v1/multilocation.rs index d702422b6d05..87c963187672 100644 --- a/xcm/src/v1/multilocation.rs +++ b/xcm/src/v1/multilocation.rs @@ -17,10 +17,7 @@ //! Cross-Consensus Message format data structures. use super::Junction; -use core::{ - convert::{TryFrom, TryInto}, - mem, result, -}; +use core::{convert::TryFrom, mem, result}; use parity_scale_codec::{Decode, Encode}; /// A relative path between state-bearing consensus systems. @@ -898,7 +895,7 @@ mod tests { ); assert_eq!( v0::MultiLocation::X2(v0::Junction::Parachain(88), v0::Junction::Parent).try_into(), - Err::(()), + Ok(MultiLocation::here()), ); assert_eq!( v0::MultiLocation::X3(