pub trait SendXcm {
    type Ticket;

    // Required methods
    fn validate(
        destination: &mut Option<MultiLocation>,
        message: &mut Option<Xcm<()>>
    ) -> Result<(Self::Ticket, MultiAssets), SendError>;
    fn deliver(ticket: Self::Ticket) -> Result<[u8; 32], SendError>;
}
Expand description

Utility for sending an XCM message to a given location.

These can be amalgamated in tuples to form sophisticated routing systems. In tuple format, each router might return NotApplicable to pass the execution to the next sender item. Note that each NotApplicable might alter the destination and the XCM message for to the next router.

Example


/// A sender that only passes the message through and does nothing.
struct Sender1;
impl SendXcm for Sender1 {
    type Ticket = Infallible;
    fn validate(_: &mut Option<MultiLocation>, _: &mut Option<Xcm<()>>) -> SendResult<Infallible> {
        Err(SendError::NotApplicable)
    }
    fn deliver(_: Infallible) -> Result<XcmHash, SendError> {
        unreachable!()
    }
}

/// A sender that accepts a message that has an X2 junction, otherwise stops the routing.
struct Sender2;
impl SendXcm for Sender2 {
    type Ticket = ();
    fn validate(destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>>) -> SendResult<()> {
        match destination.as_ref().ok_or(SendError::MissingArgument)? {
            MultiLocation { parents: 0, interior: X2(j1, j2) } => Ok(((), MultiAssets::new())),
            _ => Err(SendError::Unroutable),
        }
    }
    fn deliver(_: ()) -> Result<XcmHash, SendError> {
        Ok([0; 32])
    }
}

/// A sender that accepts a message from a parent, passing through otherwise.
struct Sender3;
impl SendXcm for Sender3 {
    type Ticket = ();
    fn validate(destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>>) -> SendResult<()> {
        match destination.as_ref().ok_or(SendError::MissingArgument)? {
            MultiLocation { parents: 1, interior: Here } => Ok(((), MultiAssets::new())),
            _ => Err(SendError::NotApplicable),
        }
    }
    fn deliver(_: ()) -> Result<XcmHash, SendError> {
        Ok([0; 32])
    }
}

// A call to send via XCM. We don't really care about this.
let call: Vec<u8> = ().encode();
let message = Xcm(vec![Instruction::Transact {
    origin_kind: OriginKind::Superuser,
    require_weight_at_most: Weight::zero(),
    call: call.into(),
}]);
let message_hash = message.using_encoded(sp_io::hashing::blake2_256);

// Sender2 will block this.
assert!(send_xcm::<(Sender1, Sender2, Sender3)>(Parent.into(), message.clone()).is_err());

// Sender3 will catch this.
assert!(send_xcm::<(Sender1, Sender3)>(Parent.into(), message.clone()).is_ok());

Required Associated Types§

type Ticket

Intermediate value which connects the two phases of the send operation.

Required Methods§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(Self::Ticket, MultiAssets), SendError>

Check whether the given _message is deliverable to the given _destination and if so determine the cost which will be paid by this chain to do so, returning a Validated token which can be used to enact delivery.

The destination and message must be Some (or else an error will be returned) and they may only be consumed if the Err is not NotApplicable.

If it is not a destination which can be reached with this type but possibly could by others, then this MUST return NotApplicable. Any other error will cause the tuple implementation to exit early without trying other type fields.

fn deliver(ticket: Self::Ticket) -> Result<[u8; 32], SendError>

Actually carry out the delivery operation for a previously validated message sending.

Implementations on Foreign Types§

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm,

§

impl<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> 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)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>, Option<<TupleElement22 as SendXcm>::Ticket>, Option<<TupleElement23 as SendXcm>::Ticket>, Option<<TupleElement24 as SendXcm>::Ticket>, Option<<TupleElement25 as SendXcm>::Ticket>, Option<<TupleElement26 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(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) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(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) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<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> 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)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>, Option<<TupleElement22 as SendXcm>::Ticket>, Option<<TupleElement23 as SendXcm>::Ticket>, Option<<TupleElement24 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(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) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(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) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1> SendXcm for (TupleElement0, TupleElement1)where TupleElement0: SendXcm, TupleElement1: SendXcm,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23> 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)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>, Option<<TupleElement22 as SendXcm>::Ticket>, Option<<TupleElement23 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm,

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<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> 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)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>, Option<<TupleElement22 as SendXcm>::Ticket>, Option<<TupleElement23 as SendXcm>::Ticket>, Option<<TupleElement24 as SendXcm>::Ticket>, Option<<TupleElement25 as SendXcm>::Ticket>, Option<<TupleElement26 as SendXcm>::Ticket>, Option<<TupleElement27 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(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) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(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) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm,

§

impl SendXcm for ()

§

type Ticket = ()

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<() as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver(one_ticket: <() as SendXcm>::Ticket) -> Result<[u8; 32], SendError>

§

impl<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> 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)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>, Option<<TupleElement22 as SendXcm>::Ticket>, Option<<TupleElement23 as SendXcm>::Ticket>, Option<<TupleElement24 as SendXcm>::Ticket>, Option<<TupleElement25 as SendXcm>::Ticket>, Option<<TupleElement26 as SendXcm>::Ticket>, Option<<TupleElement27 as SendXcm>::Ticket>, Option<<TupleElement28 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(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) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(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) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15)where 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,

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm,

§

impl<TupleElement0, TupleElement1, TupleElement2> SendXcm for (TupleElement0, TupleElement1, TupleElement2)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm, TupleElement8: SendXcm, TupleElement9: SendXcm, TupleElement10: SendXcm, TupleElement11: SendXcm,

§

impl<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> 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)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>, Option<<TupleElement22 as SendXcm>::Ticket>, Option<<TupleElement23 as SendXcm>::Ticket>, Option<<TupleElement24 as SendXcm>::Ticket>, Option<<TupleElement25 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(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) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(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) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm,

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm,

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14)where 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,

§

impl<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> 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)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>, Option<<TupleElement22 as SendXcm>::Ticket>, Option<<TupleElement23 as SendXcm>::Ticket>, Option<<TupleElement24 as SendXcm>::Ticket>, Option<<TupleElement25 as SendXcm>::Ticket>, Option<<TupleElement26 as SendXcm>::Ticket>, Option<<TupleElement27 as SendXcm>::Ticket>, Option<<TupleElement28 as SendXcm>::Ticket>, Option<<TupleElement29 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(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) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(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) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12)where 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,

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm,

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22> 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)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>, Option<<TupleElement22 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7)where TupleElement0: SendXcm, TupleElement1: SendXcm, TupleElement2: SendXcm, TupleElement3: SendXcm, TupleElement4: SendXcm, TupleElement5: SendXcm, TupleElement6: SendXcm, TupleElement7: SendXcm,

§

impl<TupleElement0> SendXcm for (TupleElement0,)where TupleElement0: SendXcm,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>,)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0,) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0,) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21)where 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,

§

type Ticket = (Option<<TupleElement0 as SendXcm>::Ticket>, Option<<TupleElement1 as SendXcm>::Ticket>, Option<<TupleElement2 as SendXcm>::Ticket>, Option<<TupleElement3 as SendXcm>::Ticket>, Option<<TupleElement4 as SendXcm>::Ticket>, Option<<TupleElement5 as SendXcm>::Ticket>, Option<<TupleElement6 as SendXcm>::Ticket>, Option<<TupleElement7 as SendXcm>::Ticket>, Option<<TupleElement8 as SendXcm>::Ticket>, Option<<TupleElement9 as SendXcm>::Ticket>, Option<<TupleElement10 as SendXcm>::Ticket>, Option<<TupleElement11 as SendXcm>::Ticket>, Option<<TupleElement12 as SendXcm>::Ticket>, Option<<TupleElement13 as SendXcm>::Ticket>, Option<<TupleElement14 as SendXcm>::Ticket>, Option<<TupleElement15 as SendXcm>::Ticket>, Option<<TupleElement16 as SendXcm>::Ticket>, Option<<TupleElement17 as SendXcm>::Ticket>, Option<<TupleElement18 as SendXcm>::Ticket>, Option<<TupleElement19 as SendXcm>::Ticket>, Option<<TupleElement20 as SendXcm>::Ticket>, Option<<TupleElement21 as SendXcm>::Ticket>)

§

fn validate( destination: &mut Option<MultiLocation>, message: &mut Option<Xcm<()>> ) -> Result<(<(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21) as SendXcm>::Ticket, MultiAssets), SendError>

§

fn deliver( one_ticket: <(TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21) as SendXcm>::Ticket ) -> Result<[u8; 32], SendError>

§

impl<TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13> SendXcm for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13)where 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,

Implementors§