У меня есть метод, который принимает вызов (аналогичный sudo или поддонам восстановления), и я хочу выполнить некоторую проверку вызова перед его отправкой. Проверка в основном связана с ограничением того, какие методы мы можем вызывать с помощью этого метода.
Вот пример кода, который у меня есть:
decl_module! {
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
type Error = Error<T>;
fn deposit_event() = default;
pub fn foo(origin, call: Box<<T as Trait>::Call>) -> DispatchResult {
ensure_signed(origin)?;
let sender = match *call {
Call::test(x) => Ok(()),
_ => Err(())
};
Ok(())
}
pub fn test(origin, x: u32) -> DispatchResult {
Ok(())
}
}
}
В этом примере я хочу, чтобы это было успешным, только если call
вызывает мою test()
функцию.
К сожалению, я получаю ошибку о несоответствии типов, и любая помощь будет принята с благодарностью.
я получаю следующую ошибку:
Call::test(x) => Ok(()),
| ^^^^^^^^^^^^^ expected associated type, found enum Call
|
= note: expected associated type <T as Trait>::Call
found enum Call<_>
= note: consider constraining the associated type <T as Trait>::Call to Call<_> or calling a method that returns <T as Trait>::Call