Attribute Macro ruva::event_hook

source ·
#[event_hook]
Expand description

Attribute macro for marking repository methods that collect events

§Example


#[aggregate]
#[derive(Default, Serialize, Deserialize)]
struct TestAggregate {
     
    pub age: i64,
}

#[async_trait]
impl TRepository< 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())
}