event_store 0.1.1

Crate to deal with every aspect of an eventstore
Documentation
use super::state::SubscriptionState;
use super::subscriber::Subscriber;
use crate::prelude::*;
use actix::prelude::*;

#[derive(PartialEq, Debug)]
enum FSM {
    Initialized,
    Terminated,
}

impl std::default::Default for FSM {
    fn default() -> Self {
        Self::Initialized
    }
}

#[derive(Default, Debug)]
pub struct SubscriptionFSM {
    data: SubscriptionState,
    state: FSM,
}

impl SubscriptionFSM {
    pub fn has_subscriber(&self, subscriber: &Recipient<RecordedEvents>) -> bool {
        self.data.subscribers.get(subscriber).is_some()
    }

    pub async fn notify_subscribers(&mut self) {}

    pub async fn connect_subscriber(&mut self, subscriber: &Recipient<RecordedEvents>) {
        let addr = Subscriber {
            recipient: subscriber.clone(),
        }
        .start();

        self.data.subscribers.insert(subscriber.clone(), addr);

        if self.state != FSM::Initialized {
            self.notify_subscribers().await;
        }
    }
}