use crate::expressions::Expression;
use crate::policy::{BasePolicy, PolicyLike};
use crate::{CommitLevel, Expiration, GenerationPolicy, RecordExistsAction};
#[derive(Debug, Clone)]
pub struct WritePolicy {
pub base_policy: BasePolicy,
pub record_exists_action: RecordExistsAction,
pub generation_policy: GenerationPolicy,
pub commit_level: CommitLevel,
pub generation: u32,
pub expiration: Expiration,
pub send_key: bool,
pub respond_per_each_op: bool,
pub durable_delete: bool,
}
impl WritePolicy {
pub fn new(gen: u32, exp: Expiration) -> Self {
Self {
generation: gen,
expiration: exp,
..WritePolicy::default()
}
}
pub const fn filter_expression(&self) -> &Option<Expression> {
&self.base_policy.filter_expression
}
}
impl Default for WritePolicy {
fn default() -> Self {
let base_policy = BasePolicy {
max_retries: 0,
..BasePolicy::default()
};
WritePolicy {
base_policy,
record_exists_action: RecordExistsAction::Update,
generation_policy: GenerationPolicy::None,
commit_level: CommitLevel::CommitAll,
generation: 0,
expiration: Expiration::NamespaceDefault,
send_key: false,
respond_per_each_op: false,
durable_delete: false,
}
}
}
impl PolicyLike for WritePolicy {
fn base(&self) -> &BasePolicy {
&self.base_policy
}
}
#[cfg(test)]
mod tests {
use crate::policy::{Policy, WritePolicy};
#[test]
fn default_write_policy_max_retries_is_zero() {
let policy = WritePolicy::default();
assert_eq!(policy.max_retries(), 0);
assert_eq!(policy.base_policy.max_retries, 0);
}
}