pub struct EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>(/* private fields */);Expand description
EnsureOrigin implementation that checks that an origin has equal or higher privilege
compared to the expected Origin.
It will take the shortcut of comparing the incoming origin with the expected Origin and if
both are the same the origin is accepted.
§Example
#[derive(Eq, PartialEq, Debug)]
pub enum Origin {
Root,
SomethingBelowRoot,
NormalUser,
}
struct OriginPrivilegeCmp;
impl PrivilegeCmp<Origin> for OriginPrivilegeCmp {
fn cmp_privilege(left: &Origin, right: &Origin) -> Option<Ordering> {
match (left, right) {
(Origin::Root, Origin::Root) => Some(Ordering::Equal),
(Origin::Root, _) => Some(Ordering::Greater),
(Origin::SomethingBelowRoot, Origin::SomethingBelowRoot) => Some(Ordering::Equal),
(Origin::SomethingBelowRoot, Origin::Root) => Some(Ordering::Less),
(Origin::SomethingBelowRoot, Origin::NormalUser) => Some(Ordering::Greater),
(Origin::NormalUser, Origin::NormalUser) => Some(Ordering::Equal),
(Origin::NormalUser, _) => Some(Ordering::Less),
}
}
}
parameter_types! {
pub const ExpectedOrigin: Origin = Origin::SomethingBelowRoot;
}
type EnsureOrigin = EnsureOriginEqualOrHigherPrivilege<ExpectedOrigin, OriginPrivilegeCmp>;
// `Root` has an higher privilege as our expected origin.
assert!(EnsureOrigin::ensure_origin(Origin::Root).is_ok());
// `SomethingBelowRoot` is exactly the expected origin.
assert!(EnsureOrigin::ensure_origin(Origin::SomethingBelowRoot).is_ok());
// The `NormalUser` origin is not allowed.
assert!(EnsureOrigin::ensure_origin(Origin::NormalUser).is_err());Trait Implementations§
source§impl<OuterOrigin, Origin, PrivilegeCmp> EnsureOrigin<OuterOrigin> for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<OuterOrigin, Origin, PrivilegeCmp> EnsureOrigin<OuterOrigin> for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
Auto Trait Implementations§
impl<Origin, PrivilegeCmp> Freeze for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<Origin, PrivilegeCmp> RefUnwindSafe for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>where
Origin: RefUnwindSafe,
PrivilegeCmp: RefUnwindSafe,
impl<Origin, PrivilegeCmp> Send for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<Origin, PrivilegeCmp> Sync for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<Origin, PrivilegeCmp> Unpin for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<Origin, PrivilegeCmp> UnwindSafe for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>where
Origin: UnwindSafe,
PrivilegeCmp: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
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 T
impl<T, Outer> IsWrappedBy<Outer> 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>,
Consume self to return an equivalent value of
T. 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
The counterpart to
unchecked_from.source§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
Consume self to return an equivalent value of
T.