Skip to content
Snippets Groups Projects
Unverified Commit 6f4768cf authored by Xiliang Chen's avatar Xiliang Chen Committed by GitHub
Browse files

fix EnsureDelayed generic type (#275)

parent 432ebafe
No related branches found
No related tags found
No related merge requests found
...@@ -40,30 +40,34 @@ mod tests; ...@@ -40,30 +40,34 @@ mod tests;
/// A delayed origin. Can only be dispatched via `dispatch_as` with a delay. /// A delayed origin. Can only be dispatched via `dispatch_as` with a delay.
#[derive(PartialEq, Eq, Clone, RuntimeDebug, Encode, Decode)] #[derive(PartialEq, Eq, Clone, RuntimeDebug, Encode, Decode)]
pub struct DelayedOrigin<BlockNumber, Origin> { pub struct DelayedOrigin<BlockNumber, PalletsOrigin> {
/// Number of blocks that this call have been delayed. /// Number of blocks that this call have been delayed.
pub delay: BlockNumber, pub delay: BlockNumber,
/// The initial origin. /// The initial origin.
pub origin: Box<Origin>, pub origin: Box<PalletsOrigin>,
} }
/// Ensure the origin have a minimum amount of delay. /// Ensure the origin have a minimum amount of delay.
pub struct EnsureDelayed<Delay, Inner, BlockNumber>(sp_std::marker::PhantomData<(Delay, Inner, BlockNumber)>); pub struct EnsureDelayed<Delay, Inner, BlockNumber, PalletsOrigin>(
sp_std::marker::PhantomData<(Delay, Inner, BlockNumber, PalletsOrigin)>,
);
impl< impl<
O: Into<Result<DelayedOrigin<BlockNumber, O>, O>> + From<DelayedOrigin<BlockNumber, O>>, PalletsOrigin: Into<O>,
O: Into<Result<DelayedOrigin<BlockNumber, PalletsOrigin>, O>> + From<DelayedOrigin<BlockNumber, PalletsOrigin>>,
Delay: Get<BlockNumber>, Delay: Get<BlockNumber>,
Inner: EnsureOrigin<O>, Inner: EnsureOrigin<O>,
BlockNumber: PartialOrd, BlockNumber: PartialOrd,
> EnsureOrigin<O> for EnsureDelayed<Delay, Inner, BlockNumber> > EnsureOrigin<O> for EnsureDelayed<Delay, Inner, BlockNumber, PalletsOrigin>
{ {
type Success = Inner::Success; type Success = Inner::Success;
fn try_origin(o: O) -> Result<Self::Success, O> { fn try_origin(o: O) -> Result<Self::Success, O> {
o.into().and_then(|delayed_origin| { o.into().and_then(|delayed_origin| {
if delayed_origin.delay >= Delay::get() { if delayed_origin.delay >= Delay::get() {
Inner::try_origin(*delayed_origin.origin) let pallets_origin = *delayed_origin.origin;
Inner::try_origin(pallets_origin.into())
} else { } else {
Err(*delayed_origin.origin) Err(delayed_origin.into())
} }
}) })
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment