pub trait ConvertOrigin<Origin> {
    fn convert_origin(
        origin: impl Into<MultiLocation>,
        kind: OriginKind
    ) -> Result<Origin, MultiLocation>; }
Expand description

A converter trait for origin types.

Can be amalgamated into tuples. If any of the tuple elements returns Ok(_), it short circuits. Else, the Err(_) of the last tuple item is returned. Each intermediate Err(_) might return a different origin of type Origin which is passed to the next convert item.

// A convertor that will bump the para id and pass it to the next one.
struct BumpParaId;
impl ConvertOrigin<u32> for BumpParaId {
	fn convert_origin(origin: impl Into<MultiLocation>, _: OriginKind) -> Result<u32, MultiLocation> {
		match origin.into() {
			MultiLocation { parents: 0, interior: Junctions::X1(Junction::Parachain(id)) } => {
				Err(Junctions::X1(Junction::Parachain(id + 1)).into())
			}
			_ => unreachable!()
		}
	}
}

struct AcceptPara7;
impl ConvertOrigin<u32> for AcceptPara7 {
	fn convert_origin(origin: impl Into<MultiLocation>, _: OriginKind) -> Result<u32, MultiLocation> {
		match origin.into() {
			MultiLocation { parents: 0, interior: Junctions::X1(Junction::Parachain(id)) } if id == 7 => {
				Ok(7)
			}
			o => Err(o)
		}
	}
}
let origin: MultiLocation = Junctions::X1(Junction::Parachain(6)).into();
assert!(
	<(BumpParaId, AcceptPara7) as ConvertOrigin<u32>>::convert_origin(origin, OriginKind::Native)
		.is_ok()
);

Required Methods§

Attempt to convert origin to the generic Origin whilst consuming it.

Implementations on Foreign Types§

Implementors§

impl<Origin: OriginTrait, Deriver: ParachainPalletGeneralIndexOriginDeriver<Origin>> ConvertOrigin<Origin> for DeriveOriginFromPalletInstanceGeneralIndex<Origin, Deriver>where
    Origin::AccountId: From<[u8; 32]>,

impl<Origin: From<Origin>> ConvertOrigin<Origin> for XcmPassthrough<Origin>

impl<LocationConverter: Convert<MultiLocation, Origin::AccountId>, Origin: OriginTrait> ConvertOrigin<Origin> for SovereignSignedViaLocation<LocationConverter, Origin>where
    Origin::AccountId: Clone,

impl<Origin: OriginTrait> ConvertOrigin<Origin> for ParentAsSuperuser<Origin>

impl<ParaId: IsSystem + From<u32>, Origin: OriginTrait> ConvertOrigin<Origin> for ChildSystemParachainAsSuperuser<ParaId, Origin>

impl<ParaId: IsSystem + From<u32>, Origin: OriginTrait> ConvertOrigin<Origin> for SiblingSystemParachainAsSuperuser<ParaId, Origin>

impl<ParachainOrigin: From<u32>, Origin: From<ParachainOrigin>> ConvertOrigin<Origin> for ChildParachainAsNative<ParachainOrigin, Origin>

impl<ParachainOrigin: From<u32>, Origin: From<ParachainOrigin>> ConvertOrigin<Origin> for SiblingParachainAsNative<ParachainOrigin, Origin>

impl<RelayOrigin: Get<Origin>, Origin> ConvertOrigin<Origin> for RelayChainAsNative<RelayOrigin, Origin>

impl<Network: Get<NetworkId>, Origin: OriginTrait> ConvertOrigin<Origin> for SignedAccountId32AsNative<Network, Origin>where
    Origin::AccountId: From<[u8; 32]>,

impl<Network: Get<NetworkId>, Origin: OriginTrait> ConvertOrigin<Origin> for SignedAccountKey20AsNative<Network, Origin>where
    Origin::AccountId: From<[u8; 20]>,