use async_trait::async_trait;
use clasp_core::SignalType;
use crate::entry::{JournalEntry, ParamSnapshot};
use crate::error::Result;
#[async_trait]
pub trait Journal: Send + Sync {
async fn append(&self, entry: JournalEntry) -> Result<u64>;
async fn query(
&self,
pattern: &str,
from: Option<u64>,
to: Option<u64>,
limit: Option<u32>,
types: &[SignalType],
) -> Result<Vec<JournalEntry>>;
async fn since(&self, seq: u64, limit: Option<u32>) -> Result<Vec<JournalEntry>>;
async fn latest_seq(&self) -> Result<u64>;
async fn snapshot(&self, state: &[ParamSnapshot]) -> Result<u64>;
async fn load_snapshot(&self) -> Result<Option<Vec<ParamSnapshot>>>;
async fn compact(&self, before_seq: u64) -> Result<u64>;
async fn len(&self) -> Result<usize>;
async fn is_empty(&self) -> Result<bool> {
Ok(self.len().await? == 0)
}
}