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