diff --git a/near-plugins-derive/src/access_controllable.rs b/near-plugins-derive/src/access_controllable.rs index 2088ebb..bffecac 100644 --- a/near-plugins-derive/src/access_controllable.rs +++ b/near-plugins-derive/src/access_controllable.rs @@ -11,7 +11,7 @@ use syn::{parse_macro_input, AttributeArgs, ItemFn, ItemStruct}; pub struct MacroArgs { #[darling(default)] storage_prefix: Option, - role_type: syn::Path, + role_type: darling::util::PathList, } const DEFAULT_STORAGE_PREFIX: &str = "__acl"; @@ -42,7 +42,11 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream let storage_prefix = macro_args .storage_prefix .unwrap_or_else(|| DEFAULT_STORAGE_PREFIX.to_string()); - let role_type = macro_args.role_type; + assert!( + macro_args.role_type.len() == 1, + "role_type should be exactly one path" + ); + let role_type = ¯o_args.role_type[0]; let output = quote! { #input diff --git a/near-plugins/tests/contracts/access_controllable/src/lib.rs b/near-plugins/tests/contracts/access_controllable/src/lib.rs index 394222f..951c3f1 100644 --- a/near-plugins/tests/contracts/access_controllable/src/lib.rs +++ b/near-plugins/tests/contracts/access_controllable/src/lib.rs @@ -14,7 +14,7 @@ pub enum Role { LevelC, } -#[access_control(role_type = "Role")] +#[access_control(role_type(Role))] #[near_bindgen] #[derive(Default, BorshDeserialize, BorshSerialize)] pub struct StatusMessage {