nitinol_eventstream/
resolver.rs

1use async_trait::async_trait;
2use nitinol_core::event::Event;
3use nitinol_resolver::resolver::ResolveHandler;
4use crate::subscriber::EventSubscriber;
5
6pub(crate) const HANDLER_TYPE: &str = "subscribe";
7
8pub struct Subscribe;
9
10#[async_trait]
11impl<E: Event, T> ResolveHandler<E, T> for Subscribe 
12where
13    T: EventSubscriber<E>,
14{
15    const HANDLER_TYPE: &'static str = HANDLER_TYPE;
16    type Error = T::Error;
17    
18    async fn apply(entity: &mut Option<T>, event: E) -> Result<(), Self::Error> {
19        let Some(entity) = entity else {
20            panic!("Entity must exist in this process.");
21        };
22        
23        entity.on(event).await?;
24        Ok(())
25    }
26}