diff --git a/omni-utils-derive/src/trusted_relayer.rs b/omni-utils-derive/src/trusted_relayer.rs index d8c56a6..2113874 100644 --- a/omni-utils-derive/src/trusted_relayer.rs +++ b/omni-utils-derive/src/trusted_relayer.rs @@ -42,8 +42,7 @@ impl Parse for MacroParam { struct TrustedRelayerImplArgs { bypass_roles: Option>, manager_roles: Vec, - /// Optional separate roles for `set_relayer_config`. Falls back to `manager_roles` if absent. - config_roles: Option>, + config_roles: Vec, custom_is_trusted_relayer: bool, } @@ -110,6 +109,13 @@ impl Parse for TrustedRelayerImplArgs { ) })?; + let config_roles = config_roles.ok_or_else(|| { + syn::Error::new( + proc_macro2::Span::call_site(), + "`config_roles(...)` is required for `#[trusted_relayer]` on impl blocks", + ) + })?; + if custom_is_trusted_relayer && bypass_roles.is_some() { return Err(syn::Error::new( proc_macro2::Span::call_site(), @@ -389,8 +395,8 @@ fn process_impl_block(args: TokenStream, input: TokenStream) -> TokenStream { &args.bypass_roles, args.custom_is_trusted_relayer, ); - let config_roles = args.config_roles.as_deref().unwrap_or(&args.manager_roles); - let public_methods = gen_public_methods(self_ty, generics, &args.manager_roles, config_roles); + let public_methods = + gen_public_methods(self_ty, generics, &args.manager_roles, &args.config_roles); let output = quote! { #item_impl diff --git a/tests/test-contract-custom/src/lib.rs b/tests/test-contract-custom/src/lib.rs index 984e604..bf97b73 100644 --- a/tests/test-contract-custom/src/lib.rs +++ b/tests/test-contract-custom/src/lib.rs @@ -41,7 +41,11 @@ impl TrustedRelayer for CustomContract { } } -#[trusted_relayer(manager_roles(Role::Admin), custom_is_trusted_relayer)] +#[trusted_relayer( + manager_roles(Role::Admin), + config_roles(Role::Admin), + custom_is_trusted_relayer +)] #[near] impl CustomContract { #[init] diff --git a/tests/test-contract/src/lib.rs b/tests/test-contract/src/lib.rs index 1931144..a008a3c 100644 --- a/tests/test-contract/src/lib.rs +++ b/tests/test-contract/src/lib.rs @@ -19,9 +19,9 @@ pub struct TestContract { } #[trusted_relayer( - manager_roles(Role::Admin, Role::RelayerManager), - config_roles(Role::Admin), bypass_roles(Role::Relayer), + manager_roles(Role::Admin, Role::RelayerManager), + config_roles(Role::Admin) )] #[near] impl TestContract {