use azure_data_cosmos_driver::models::{MaxItemCountHint, SessionToken};
use azure_data_cosmos_driver::options::OperationOptions;
use crate::feed::ContinuationToken;
use crate::options::FeedOptions;
pub use azure_data_cosmos_driver::models::ChangeFeedStartFrom;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub enum ChangeFeedMode {
#[default]
LatestVersion,
}
#[derive(Clone, Default)]
#[non_exhaustive]
pub struct ChangeFeedOptions {
pub operation: OperationOptions,
pub feed: FeedOptions,
pub session_token: Option<SessionToken>,
pub mode: ChangeFeedMode,
}
impl ChangeFeedOptions {
pub fn with_mode(mut self, mode: ChangeFeedMode) -> Self {
self.mode = mode;
self
}
pub fn with_session_token(mut self, token: impl Into<SessionToken>) -> Self {
self.session_token = Some(token.into());
self
}
pub fn with_operation_options(mut self, operation: OperationOptions) -> Self {
self.operation = operation;
self
}
pub fn with_feed_options(mut self, feed: FeedOptions) -> Self {
self.feed = feed;
self
}
pub fn with_max_item_count(mut self, max_item_count: MaxItemCountHint) -> Self {
self.feed = self.feed.with_max_item_count(max_item_count);
self
}
pub fn with_continuation_token(mut self, token: ContinuationToken) -> Self {
self.feed = self.feed.with_continuation_token(token);
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_mode_is_latest_version() {
assert_eq!(ChangeFeedMode::default(), ChangeFeedMode::LatestVersion);
assert_eq!(
ChangeFeedOptions::default().mode,
ChangeFeedMode::LatestVersion
);
}
#[test]
fn options_builder_chain() {
let opts = ChangeFeedOptions::default().with_mode(ChangeFeedMode::LatestVersion);
assert_eq!(opts.mode, ChangeFeedMode::LatestVersion);
}
}