moonriver_runtime/governance/
origins.rs1pub use custom_origins::*;
17
18#[frame_support::pallet]
19pub mod custom_origins {
20 use frame_support::pallet_prelude::*;
21 use strum_macros::EnumString;
22
23 #[pallet::config]
24 pub trait Config: frame_system::Config {}
25
26 #[pallet::pallet]
27 pub struct Pallet<T>(_);
28
29 #[derive(
30 PartialEq,
31 Eq,
32 Clone,
33 MaxEncodedLen,
34 Encode,
35 Decode,
36 TypeInfo,
37 RuntimeDebug,
38 EnumString,
39 DecodeWithMemTracking,
40 )]
41 #[strum(serialize_all = "snake_case")]
42 #[pallet::origin]
43 pub enum Origin {
44 WhitelistedCaller,
46 GeneralAdmin,
48 ReferendumCanceller,
50 ReferendumKiller,
52 FastGeneralAdmin,
54 }
55
56 macro_rules! decl_unit_ensures {
57 ( $name:ident: $success_type:ty = $success:expr ) => {
58 pub struct $name;
59 impl<O: Into<Result<Origin, O>> + From<Origin>>
60 EnsureOrigin<O> for $name
61 {
62 type Success = $success_type;
63 fn try_origin(o: O) -> Result<Self::Success, O> {
64 o.into().and_then(|o| match o {
65 Origin::$name => Ok($success),
66 r => Err(O::from(r)),
67 })
68 }
69 #[cfg(feature = "runtime-benchmarks")]
70 fn try_successful_origin() -> Result<O, ()> {
71 Ok(O::from(Origin::$name))
72 }
73 }
74 };
75 ( $name:ident ) => { decl_unit_ensures! { $name : () = () } };
76 ( $name:ident: $success_type:ty = $success:expr, $( $rest:tt )* ) => {
77 decl_unit_ensures! { $name: $success_type = $success }
78 decl_unit_ensures! { $( $rest )* }
79 };
80 ( $name:ident, $( $rest:tt )* ) => {
81 decl_unit_ensures! { $name }
82 decl_unit_ensures! { $( $rest )* }
83 };
84 () => {}
85 }
86 decl_unit_ensures!(
87 ReferendumCanceller,
88 ReferendumKiller,
89 WhitelistedCaller,
90 GeneralAdmin,
91 FastGeneralAdmin,
92 );
93}