Attribute Macro ruva_macro::event_hook
source · #[event_hook]Expand description
Attribute macro for marking repository methods that collect events
Example
ⓘ
#[aggregate]
#[derive(Default, Serialize, Deserialize)]
struct TestAggregate {
#[identifier]
pub age: i64,
}
#[async_trait]
impl TRepository<SQLExecutor, TestAggregate> for SqlRepository<TestAggregate> {
fn new(executor: Arc<RwLock<SQLExecutor>>) -> Self {
...
}
#[event_hook]
async fn update(
&mut self,
aggregate: &mut TestAggregate,
) -> Result<(), BaseError> {
Ok(())
}
}
async fn test_event_hook() {
'_given: {
let mut repo = SqlRepository::new(SQLExecutor::new());
let mut aggregate = TestAggregate::default().set_age(64);
aggregate.raise_event(SomeEvent { id: aggregate.age }.to_message());
'_when: {
let _ = repo.update(&mut aggregate).await;
let events = repo.get_events();
'_then: {
assert!(!events.is_empty())
}
}
}
}