2025-07-19 23:46:42 +08:00
|
|
|
pub mod types;
|
|
|
|
|
pub mod utils;
|
2025-08-16 14:48:51 +08:00
|
|
|
pub mod filter;
|
2025-07-19 23:46:42 +08:00
|
|
|
|
|
|
|
|
/// 自动生成UnifiedEvent trait实现的宏
|
|
|
|
|
#[macro_export]
|
|
|
|
|
macro_rules! impl_unified_event {
|
|
|
|
|
// 带有自定义ID表达式的版本
|
|
|
|
|
($struct_name:ident, $($field:ident),*) => {
|
|
|
|
|
impl $crate::streaming::event_parser::core::traits::UnifiedEvent for $struct_name {
|
|
|
|
|
fn event_type(&self) -> $crate::streaming::event_parser::common::types::EventType {
|
|
|
|
|
self.metadata.event_type.clone()
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-02 17:27:27 +08:00
|
|
|
fn signature(&self) -> &solana_sdk::signature::Signature {
|
2025-07-19 23:46:42 +08:00
|
|
|
&self.metadata.signature
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn slot(&self) -> u64 {
|
|
|
|
|
self.metadata.slot
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-26 17:57:39 +08:00
|
|
|
fn program_received_time_us(&self) -> i64 {
|
|
|
|
|
self.metadata.program_received_time_us
|
2025-07-19 23:46:42 +08:00
|
|
|
}
|
|
|
|
|
|
2025-08-26 17:57:39 +08:00
|
|
|
fn program_handle_time_consuming_us(&self) -> i64 {
|
|
|
|
|
self.metadata.program_handle_time_consuming_us
|
2025-07-29 14:48:43 +08:00
|
|
|
}
|
|
|
|
|
|
2025-08-26 17:57:39 +08:00
|
|
|
fn set_program_handle_time_consuming_us(&mut self, program_handle_time_consuming_us: i64) {
|
|
|
|
|
self.metadata.program_handle_time_consuming_us = program_handle_time_consuming_us;
|
2025-07-29 14:48:43 +08:00
|
|
|
}
|
|
|
|
|
|
2025-07-19 23:46:42 +08:00
|
|
|
fn as_any(&self) -> &dyn std::any::Any {
|
|
|
|
|
self
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
|
|
|
|
|
self
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn clone_boxed(&self) -> Box<dyn $crate::streaming::event_parser::core::traits::UnifiedEvent> {
|
|
|
|
|
Box::new(self.clone())
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-27 21:31:31 +08:00
|
|
|
fn merge(&mut self, other: &dyn $crate::streaming::event_parser::core::traits::UnifiedEvent) {
|
2025-08-03 05:37:04 +08:00
|
|
|
if let Some(_e) = other.as_any().downcast_ref::<$struct_name>() {
|
2025-07-19 23:46:42 +08:00
|
|
|
$(
|
2025-08-03 05:37:04 +08:00
|
|
|
self.$field = _e.$field.clone();
|
2025-07-19 23:46:42 +08:00
|
|
|
)*
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-07-21 23:55:13 +08:00
|
|
|
|
2025-08-26 17:57:39 +08:00
|
|
|
fn set_swap_data(&mut self, swap_data: $crate::streaming::event_parser::common::types::SwapData) {
|
|
|
|
|
self.metadata.set_swap_data(swap_data);
|
2025-07-21 23:55:13 +08:00
|
|
|
}
|
2025-07-26 17:11:28 +08:00
|
|
|
|
2025-08-31 22:18:18 +08:00
|
|
|
fn swap_data_is_parsed(&self) -> bool {
|
|
|
|
|
self.metadata.swap_data.is_some()
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-27 21:31:31 +08:00
|
|
|
fn instruction_outer_index(&self) -> i64 {
|
|
|
|
|
self.metadata.instruction_outer_index
|
2025-07-26 17:11:28 +08:00
|
|
|
}
|
2025-08-25 00:37:31 +08:00
|
|
|
|
2025-08-27 21:31:31 +08:00
|
|
|
fn instruction_inner_index(&self) -> Option<i64> {
|
|
|
|
|
self.metadata.instruction_inner_index
|
|
|
|
|
}
|
2025-08-25 00:37:31 +08:00
|
|
|
fn transaction_index(&self) -> Option<u64> {
|
|
|
|
|
self.metadata.transaction_index
|
|
|
|
|
}
|
2025-07-19 23:46:42 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub use types::*;
|
|
|
|
|
pub use utils::*;
|