pub mod frame;
use crate::{ClientWriterId, LinkSecret, StreamId};
pub const MAX_READ_SELECTOR_VALUE: u64 = 9_007_199_254_740_991;
pub const DEFAULT_READ_TAIL_OFFSET: u64 = 80;
pub const MIN_PLAYBACK_RATE_PERMILLE: u64 = 100;
pub const MAX_PLAYBACK_RATE_PERMILLE: u64 = 100_000;
#[derive(Clone, Debug)]
pub struct ReadStreamOptions {
pub stream_id: StreamId,
pub start: Option<ReadStart>,
pub limit: Option<u64>,
pub end_seq_num: Option<u64>,
pub playback_rate_permille: Option<u64>,
pub snapshot: bool,
pub link_secret: Option<LinkSecret>,
}
impl ReadStreamOptions {
pub fn new(stream_id: StreamId) -> Self {
Self {
stream_id,
start: None,
limit: None,
end_seq_num: None,
playback_rate_permille: None,
snapshot: false,
link_secret: None,
}
}
pub fn with_link_secret(mut self, link_secret: impl Into<LinkSecret>) -> Self {
self.link_secret = Some(link_secret.into());
self
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ReadStart {
SeqNum(u64),
TimestampMs(u64),
TailOffset(u64),
}
#[derive(Clone, Debug)]
pub struct WriteStreamOptions {
pub stream_id: StreamId,
pub client_writer_id: ClientWriterId,
pub link_secret: LinkSecret,
pub expected_next_seq_num: Option<u64>,
}
impl WriteStreamOptions {
pub fn new(
stream_id: StreamId,
client_writer_id: ClientWriterId,
link_secret: impl Into<LinkSecret>,
) -> Self {
Self {
stream_id,
client_writer_id,
link_secret: link_secret.into(),
expected_next_seq_num: None,
}
}
pub fn with_expected_next_seq_num(mut self, expected_next_seq_num: u64) -> Self {
self.expected_next_seq_num = Some(expected_next_seq_num);
self
}
}