mod file;
mod memory;
pub use file::FileStorage;
pub use memory::MemoryStorage;
use std::error::Error;
use std::future::Future;
use std::pin::Pin;
#[derive(Debug, Clone, Copy, Default, serde::Serialize, serde::Deserialize)]
pub struct GeneratorState {
pub worker_id: u16,
pub last_timestamp: u64,
pub last_sequence: u64,
}
pub type StorageLoadResult = Result<GeneratorState, Box<dyn Error + Send + Sync>>;
pub type StorageSaveResult = Result<(), Box<dyn Error + Send + Sync>>;
pub trait Storage: Send + Sync {
fn load(&self) -> Pin<Box<dyn Future<Output = StorageLoadResult> + Send + '_>>;
fn save(
&self,
state: GeneratorState,
) -> Pin<Box<dyn Future<Output = StorageSaveResult> + Send + '_>>;
fn is_available(&self) -> Pin<Box<dyn Future<Output = bool> + Send + '_>> {
Box::pin(async { true })
}
}