Expand description
Utility for sending an XCM message.
These can be amalgamated in tuples to form sophisticated routing systems. In tuple format, each router might return
CannotReachDestination
to pass the execution to the next sender item. Note that each CannotReachDestination
might alter the destination and the XCM message for to the next router.
struct Sender1;
impl SendXcm for Sender1 {
fn send_xcm(destination: impl Into<MultiLocation>, message: Xcm<()>) -> SendResult {
return Err(SendError::CannotReachDestination(destination.into(), message))
}
}
struct Sender2;
impl SendXcm for Sender2 {
fn send_xcm(destination: impl Into<MultiLocation>, message: Xcm<()>) -> SendResult {
if let MultiLocation { parents: 0, interior: X2(j1, j2) } = destination.into() {
Ok(())
} else {
Err(SendError::Unroutable)
}
}
}
struct Sender3;
impl SendXcm for Sender3 {
fn send_xcm(destination: impl Into<MultiLocation>, message: Xcm<()>) -> SendResult {
let destination = destination.into();
match destination {
MultiLocation { parents: 1, interior: Here } => Ok(()),
_ => Err(SendError::CannotReachDestination(destination, message)),
}
}
}
let call: Vec<u8> = ().encode();
let message = Xcm(vec![Instruction::Transact {
origin_type: OriginKind::Superuser,
require_weight_at_most: 0,
call: call.into(),
}]);
assert!(
<(Sender1, Sender2, Sender3) as SendXcm>::send_xcm(Parent, message.clone())
.is_err()
);
assert!(
<(Sender1, Sender3) as SendXcm>::send_xcm(Parent, message.clone())
.is_ok()
);
Send an XCM message
to a given destination
.
If it is not a destination which can be reached with this type but possibly could by others, then it MUST
return CannotReachDestination
. Any other error will cause the tuple implementation to exit early without
trying other type fields.
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm, TupleElement22: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm, TupleElement22: SendXcm, TupleElement23: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm, TupleElement22: SendXcm, TupleElement23: SendXcm, TupleElement24: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm, TupleElement22: SendXcm, TupleElement23: SendXcm, TupleElement24: SendXcm, TupleElement25: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm, TupleElement22: SendXcm, TupleElement23: SendXcm, TupleElement24: SendXcm, TupleElement25: SendXcm, TupleElement26: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm, TupleElement22: SendXcm, TupleElement23: SendXcm, TupleElement24: SendXcm, TupleElement25: SendXcm, TupleElement26: SendXcm, TupleElement27: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26, TupleElement27)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm, TupleElement22: SendXcm, TupleElement23: SendXcm, TupleElement24: SendXcm, TupleElement25: SendXcm, TupleElement26: SendXcm, TupleElement27: SendXcm, TupleElement28: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26, TupleElement27, TupleElement28)
impl<TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm, TupleElement12: SendXcm, TupleElement13: SendXcm, TupleElement14: SendXcm, TupleElement15: SendXcm, TupleElement16: SendXcm, TupleElement17: SendXcm, TupleElement18: SendXcm, TupleElement19: SendXcm, TupleElement20: SendXcm, TupleElement21: SendXcm, TupleElement22: SendXcm, TupleElement23: SendXcm, TupleElement24: SendXcm, TupleElement25: SendXcm, TupleElement26: SendXcm, TupleElement27: SendXcm, TupleElement28: SendXcm, TupleElement29: SendXcm> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26, TupleElement27, TupleElement28, TupleElement29)