Rust 在事件类型之间转换

Rust 在事件类型之间转换,rust,substrate,Rust,Substrate,关于如何正确比较从frame\u system::Module::events()获取的事件是否等于当前托盘decl\u事件中的特定事件,是否有任何线索 我已尝试将列表中的事件与内部后创建的事件匹配: let events:Vec=SystemModule:::events(); iter().filter(| EventRecord{event,…}|{ 匹配!(事件,RawEvent::后创建(,)) }); 但是,有一个错误: 428 |匹配!(事件,RawEvent::后创建(,))

关于如何正确比较从
frame\u system::Module::events()
获取的事件是否等于当前托盘
decl\u事件中的特定事件,是否有任何线索

我已尝试将列表中的事件与内部
后创建的
事件匹配:

let events:Vec=SystemModule:::events();
iter().filter(| EventRecord{event,…}|{
匹配!(事件,RawEvent::后创建(,))
});
但是,有一个错误:

428 |匹配!(事件,RawEvent::后创建(,))
|----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^预期的关联类型,找到枚举`RawEvent`
|                      |
|此表达式的类型为`&::Event`
|
=注意:应为关联类型“::事件`
找到枚举`RawEvent`
=帮助:考虑将关联类型“::事件”约束为“RAWEVER”
此外,如果我将
.into()
添加到事件中,则会出现另一个错误:

428 |匹配!(event.into(),RawEvent::PostCreated(,))
|^^^^未为`RawEvent'实现特性`std::convert::From``
|
=注意:由于'std::convert::Into'for`&::Event的impl要求,因此需要`
我将感谢任何帮助。确保这几行代码确实有问题。

您的“通用”事件类型应在配置中定义如下:

/// The overarching event type.
type Event: From<Event<Self>> + Into<<Self as frame_system::Trait>::Event>;

然后,您可以将此
system\u事件
与从
frame\u system::Module:::events()

返回的事件进行比较,如果我的事件具有泛型,并且看起来像是
后创建的(AccountId,PostId)
,那么我上面描述的步骤不应该更改。您需要将
转换为
两次,以从托盘事件转换为通用事件,再转换为系统事件。通过搜索
last_event
查看基板,您将看到一些实现此功能的函数。
let generic_event: <T as Trait>::Event = RawEvent::MyEvent.into();
let system_event: <T as frame_system::Trait>::Event = generic_event.into();