use async_trait::async_trait;
use futures::Stream;
use crate::event::StreamEvent;
use crate::filter::StreamFilter;
use crate::namespace::Namespace;
#[async_trait]
pub trait WriteQueueBackend: Send + Sync {
async fn publish<N: Namespace>(
&self,
namespace: &N,
payload: &[u8],
filter_value: Option<&str>,
) -> crate::Result<()>;
}
#[async_trait]
pub trait ReadStreamBackend: Send + Sync {
async fn stream_exists<N: Namespace>(&self, namespace: &N) -> crate::Result<bool>;
async fn create_read_stream<N: Namespace>(
&self,
namespace: &N,
max_event_bytes: u64,
) -> crate::Result<()>;
async fn publish_to_stream(&self, event: &StreamEvent) -> crate::Result<()>;
async fn populate_stream(&self, events: &[StreamEvent]) -> crate::Result<()>;
async fn subscribe_live<N: Namespace>(
&self,
namespace: &N,
filter: Option<&StreamFilter>,
) -> crate::Result<impl Stream<Item = crate::Result<StreamEvent>> + Send>;
}