use crate::{commit::CommitSpan, events::EventLogType, AccountId};
use serde::{Deserialize, Serialize};
use std::sync::OnceLock;
use tokio::sync::watch;
static CHANGES_FEED: OnceLock<watch::Sender<LocalChangeEvent>> =
OnceLock::new();
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub enum LocalChangeEvent {
#[default]
Init,
AccountCreated(AccountId),
AccountModified {
account_id: AccountId,
log_type: EventLogType,
commit_span: CommitSpan,
},
AccountDeleted(AccountId),
}
pub fn changes_feed<'a>() -> &'a watch::Sender<LocalChangeEvent> {
CHANGES_FEED.get_or_init(|| {
let (tx, _) = watch::channel(LocalChangeEvent::default());
tx
})
}