use std::iter;
#[cfg(feature = "derive")]
#[doc(inline)]
pub use esrc_derive::{Event, EventGroup};
pub mod publish;
pub mod replay;
pub mod subscribe;
pub mod truncate;
pub use publish::{Publish, PublishExt};
pub use replay::{Replay, ReplayExt, ReplayOne, ReplayOneExt};
pub use subscribe::{Subscribe, SubscribeExt};
pub use truncate::Truncate;
mod future;
#[derive(Clone, Copy, Default, PartialEq, PartialOrd)]
pub struct Sequence(u64);
pub trait Event: Send {
fn name() -> &'static str;
}
pub trait EventGroup {
fn names() -> impl Iterator<Item = &'static str>;
}
impl Sequence {
pub fn new() -> Self {
Sequence(0)
}
}
impl<E: Event> EventGroup for E {
fn names() -> impl Iterator<Item = &'static str> {
iter::once(E::name())
}
}
impl From<Sequence> for u64 {
fn from(value: Sequence) -> Self {
value.0
}
}
impl From<u64> for Sequence {
fn from(value: u64) -> Self {
Sequence(value)
}
}