nitinol-persistence 0.1.1

Extension library for `nitinol-process` to persist Events using `nitinol-protocol`
Documentation
use nitinol_core::event::Event;
use nitinol_core::identifier::EntityId;
use nitinol_protocol::io::{WriteProtocol, Writer};

#[derive(Debug, Clone)]
pub struct EventWriter {
    writer: WriteProtocol,
    retry: i64
}

impl EventWriter {
    pub fn new(writer: impl Writer) -> EventWriter {
        Self { writer: WriteProtocol::new(writer), retry: 3 }
    }
    
    pub fn set_retry(mut self, retry: i64) -> Self {
        self.retry = retry;
        self
    }
}

impl EventWriter {
    pub(crate) async fn write<E: Event>(&self, id: EntityId, event: &E, seq: i64) {
        let mut retry = 0;
        loop {
            match self.writer.write(id.clone(), event, seq).await {
                Ok(()) => break,
                Err(e) => {
                    tracing::error!("on failure persist caused reason `{e}`");
                    
                    retry += 1;
                    
                    if retry >= self.retry {
                        tracing::error!("retry limit exceeded");
                        break;
                    } else {
                        continue;
                    }
                }
            }
        }
    }
}