Enum xcm::v0::prelude::MultiLocation
source · pub enum MultiLocation {
Null,
X1(Junction),
X2(Junction, Junction),
X3(Junction, Junction, Junction),
X4(Junction, Junction, Junction, Junction),
X5(Junction, Junction, Junction, Junction, Junction),
X6(Junction, Junction, Junction, Junction, Junction, Junction),
X7(Junction, Junction, Junction, Junction, Junction, Junction, Junction),
X8(Junction, Junction, Junction, Junction, Junction, Junction, Junction, Junction),
}Expand description
A relative path between state-bearing consensus systems.
A location in a consensus system is defined as an isolatable state machine held within global consensus. The location in question need not have a sophisticated consensus algorithm of its own; a single account within Ethereum, for example, could be considered a location.
A very-much non-exhaustive list of types of location include:
- A (normal, layer-1) block chain, e.g. the Bitcoin mainnet or a parachain.
- A layer-0 super-chain, e.g. the Polkadot Relay chain.
- A layer-2 smart contract, e.g. an ERC-20 on Ethereum.
- A logical functional component of a chain, e.g. a single instance of a pallet on a Frame-based Substrate chain.
- An account.
A MultiLocation is a relative identifier, meaning that it can only be used to define the relative path
between two locations, and cannot generally be used to refer to a location universally. It is comprised of a
number of junctions, each morphing the previous location, either diving down into one of its internal locations,
called a sub-consensus, or going up into its parent location. Correct MultiLocation values must have all
Parent junctions as a prefix to all sub-consensus junctions.
This specific MultiLocation implementation uses a Rust enum in order to make pattern matching easier.
The MultiLocation value of Null simply refers to the interpreting consensus system.
Variants§
Null
The interpreting consensus system.
X1(Junction)
A relative path comprising 1 junction.
X2(Junction, Junction)
A relative path comprising 2 junctions.
X3(Junction, Junction, Junction)
A relative path comprising 3 junctions.
X4(Junction, Junction, Junction, Junction)
A relative path comprising 4 junctions.
X5(Junction, Junction, Junction, Junction, Junction)
A relative path comprising 5 junctions.
X6(Junction, Junction, Junction, Junction, Junction, Junction)
A relative path comprising 6 junctions.
X7(Junction, Junction, Junction, Junction, Junction, Junction, Junction)
A relative path comprising 7 junctions.
X8(Junction, Junction, Junction, Junction, Junction, Junction, Junction, Junction)
A relative path comprising 8 junctions.
Implementations§
source§impl MultiLocation
impl MultiLocation
sourcepub fn first(&self) -> Option<&Junction>
pub fn first(&self) -> Option<&Junction>
Returns first junction, or None if the location is empty.
sourcepub fn last(&self) -> Option<&Junction>
pub fn last(&self) -> Option<&Junction>
Returns last junction, or None if the location is empty.
sourcepub fn split_first(self) -> (MultiLocation, Option<Junction>)
pub fn split_first(self) -> (MultiLocation, Option<Junction>)
Splits off the first junction, returning the remaining suffix (first item in tuple) and the first element
(second item in tuple) or None if it was empty.
sourcepub fn split_last(self) -> (MultiLocation, Option<Junction>)
pub fn split_last(self) -> (MultiLocation, Option<Junction>)
Splits off the last junction, returning the remaining prefix (first item in tuple) and the last element
(second item in tuple) or None if it was empty.
sourcepub fn take_first(&mut self) -> Option<Junction>
pub fn take_first(&mut self) -> Option<Junction>
Removes the first element from self, returning it (or None if it was empty).
sourcepub fn take_last(&mut self) -> Option<Junction>
pub fn take_last(&mut self) -> Option<Junction>
Removes the last element from self, returning it (or None if it was empty).
sourcepub fn pushed_with(self, new: Junction) -> Result<Self, Self>
pub fn pushed_with(self, new: Junction) -> Result<Self, Self>
Consumes self and returns a MultiLocation suffixed with new, or an Err with the original value of
self in case of overflow.
sourcepub fn pushed_front_with(self, new: Junction) -> Result<Self, Self>
pub fn pushed_front_with(self, new: Junction) -> Result<Self, Self>
Consumes self and returns a MultiLocation prefixed with new, or an Err with the original value of
self in case of overflow.
sourcepub fn at(&self, i: usize) -> Option<&Junction>
pub fn at(&self, i: usize) -> Option<&Junction>
Returns the junction at index i, or None if the location doesn’t contain that many elements.
sourcepub fn at_mut(&mut self, i: usize) -> Option<&mut Junction>
pub fn at_mut(&mut self, i: usize) -> Option<&mut Junction>
Returns a mutable reference to the junction at index i, or None if the location doesn’t contain that many
elements.
sourcepub fn iter(&self) -> MultiLocationRefIterator<'_>
pub fn iter(&self) -> MultiLocationRefIterator<'_>
Returns a reference iterator over the junctions.
sourcepub fn iter_rev(&self) -> MultiLocationReverseRefIterator<'_>
pub fn iter_rev(&self) -> MultiLocationReverseRefIterator<'_>
Returns a reference iterator over the junctions in reverse.
sourcepub fn into_iter(self) -> MultiLocationIterator
pub fn into_iter(self) -> MultiLocationIterator
Consumes self and returns an iterator over the junctions.
sourcepub fn into_iter_rev(self) -> MultiLocationReverseIterator
pub fn into_iter_rev(self) -> MultiLocationReverseIterator
Consumes self and returns an iterator over the junctions in reverse.
sourcepub fn match_and_split(&self, prefix: &MultiLocation) -> Option<&Junction>
pub fn match_and_split(&self, prefix: &MultiLocation) -> Option<&Junction>
Ensures that self begins with prefix and that it has a single Junction item following.
If so, returns a reference to this Junction item.
Example
let mut m = X3(Parent, PalletInstance(3), OnlyChild);
assert_eq!(m.match_and_split(&X2(Parent, PalletInstance(3))), Some(&OnlyChild));
assert_eq!(m.match_and_split(&X1(Parent)), None);sourcepub fn push(&mut self, new: Junction) -> Result<(), ()>
pub fn push(&mut self, new: Junction) -> Result<(), ()>
Mutates self, suffixing it with new. Returns Err in case of overflow.
sourcepub fn push_front(&mut self, new: Junction) -> Result<(), ()>
pub fn push_front(&mut self, new: Junction) -> Result<(), ()>
Mutates self, prefixing it with new. Returns Err in case of overflow.
sourcepub fn leading_parent_count(&self) -> usize
pub fn leading_parent_count(&self) -> usize
Returns the number of Parent junctions at the beginning of self.
sourcepub fn canonicalize(&mut self)
pub fn canonicalize(&mut self)
This function ensures a multi-junction is in its canonicalized/normalized form, removing
any internal [Non-Parent, Parent] combinations.
sourcepub fn append_with(&mut self, suffix: MultiLocation) -> Result<(), MultiLocation>
pub fn append_with(&mut self, suffix: MultiLocation) -> Result<(), MultiLocation>
Mutate self so that it is suffixed with suffix. The correct normalized form is returned,
removing any internal [Non-Parent, Parent] combinations.
In the case of overflow, self is unmodified and we return Err with suffix.
Example
let mut m = X3(Parent, Parachain(21), OnlyChild);
assert_eq!(m.append_with(X2(Parent, PalletInstance(3))), Ok(()));
assert_eq!(m, X3(Parent, Parachain(21), PalletInstance(3)));sourcepub fn prepend_with(
&mut self,
prefix: MultiLocation
) -> Result<(), MultiLocation>
pub fn prepend_with(
&mut self,
prefix: MultiLocation
) -> Result<(), MultiLocation>
Mutate self so that it is prefixed with prefix. The correct normalized form is returned,
removing any internal [Non-Parent, Parent] combinations.
In the case of overflow, self is unmodified and we return Err with prefix.
Example
let mut m = X3(Parent, Parent, PalletInstance(3));
assert_eq!(m.prepend_with(X3(Parent, Parachain(21), OnlyChild)), Ok(()));
assert_eq!(m, X2(Parent, PalletInstance(3)));sourcepub fn is_interior(&self) -> bool
pub fn is_interior(&self) -> bool
Returns true iff self is an interior location. For this it may not contain any Junctions
for which Junction::is_interior returns false. This is generally true, except for the
Parent item.
Example
let parent = X1(Parent);
assert_eq!(parent.is_interior(), false);
let m = X2(PalletInstance(12), AccountIndex64 { network: Any, index: 23 });
assert_eq!(m.is_interior(), true);Trait Implementations§
source§impl Clone for MultiLocation
impl Clone for MultiLocation
source§fn clone(&self) -> MultiLocation
fn clone(&self) -> MultiLocation
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for MultiLocation
impl Debug for MultiLocation
source§impl Decode for MultiLocation
impl Decode for MultiLocation
source§impl Encode for MultiLocation
impl Encode for MultiLocation
source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
source§fn using_encoded<R, F>(&self, f: F) -> Rwhere
F: FnOnce(&[u8]) -> R,
fn using_encoded<R, F>(&self, f: F) -> Rwhere
F: FnOnce(&[u8]) -> R,
source§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
source§impl From<()> for MultiLocation
impl From<()> for MultiLocation
source§impl From<(Junction, Junction, Junction, Junction, Junction, Junction, Junction, Junction)> for MultiLocation
impl From<(Junction, Junction, Junction, Junction, Junction, Junction, Junction, Junction)> for MultiLocation
source§impl From<(Junction, Junction, Junction, Junction, Junction, Junction, Junction)> for MultiLocation
impl From<(Junction, Junction, Junction, Junction, Junction, Junction, Junction)> for MultiLocation
source§impl From<(Junction,)> for MultiLocation
impl From<(Junction,)> for MultiLocation
source§impl From<Junction> for MultiLocation
impl From<Junction> for MultiLocation
source§impl From<MultiLocation> for VersionedMultiLocation
impl From<MultiLocation> for VersionedMultiLocation
source§fn from(x: MultiLocation) -> Self
fn from(x: MultiLocation) -> Self
source§impl Ord for MultiLocation
impl Ord for MultiLocation
source§fn cmp(&self, other: &MultiLocation) -> Ordering
fn cmp(&self, other: &MultiLocation) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq<MultiLocation> for MultiLocation
impl PartialEq<MultiLocation> for MultiLocation
source§fn eq(&self, other: &MultiLocation) -> bool
fn eq(&self, other: &MultiLocation) -> bool
source§impl PartialOrd<MultiLocation> for MultiLocation
impl PartialOrd<MultiLocation> for MultiLocation
source§fn partial_cmp(&self, other: &MultiLocation) -> Option<Ordering>
fn partial_cmp(&self, other: &MultiLocation) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read moresource§impl TryFrom<MultiLocation> for MultiLocation
impl TryFrom<MultiLocation> for MultiLocation
source§impl TryFrom<MultiLocation> for MultiLocation
impl TryFrom<MultiLocation> for MultiLocation
source§impl TypeInfo for MultiLocation
impl TypeInfo for MultiLocation
impl EncodeLike<MultiLocation> for MultiLocation
impl Eq for MultiLocation
impl StructuralEq for MultiLocation
impl StructuralPartialEq for MultiLocation
Auto Trait Implementations§
impl RefUnwindSafe for MultiLocation
impl Send for MultiLocation
impl Sync for MultiLocation
impl Unpin for MultiLocation
impl UnwindSafe for MultiLocation
Blanket Implementations§
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
source§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait. Read moresource§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait. Read moresource§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s. Read moresource§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s. Read moresource§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
impl<T, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
self, then passes self.as_ref() into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T. Read moresource§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
Borrow<B> of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
BorrowMut<B> of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
AsRef<R> view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
AsMut<R> view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
Deref::Target of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Deref::Target of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds. Read moresource§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
.tap_borrow() only in debug builds, and is erased in release
builds. Read moresource§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
.tap_borrow_mut() only in debug builds, and is erased in release
builds. Read moresource§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
.tap_ref() only in debug builds, and is erased in release
builds. Read moresource§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
.tap_ref_mut() only in debug builds, and is erased in release
builds. Read moresource§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from.source§impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T.