#![allow(clippy::option_if_let_else)]
use arangors_lite::document::options::{InsertOptions, RemoveOptions, UpdateOptions};
#[derive(Clone, Debug)]
pub struct OperationOptions {
pub wait_for_sync: Option<bool>,
pub ignore_revs: bool,
pub ignore_hooks: bool,
}
impl OperationOptions {
#[inline]
#[must_use]
pub const fn wait_for_sync(mut self, value: bool) -> Self {
self.wait_for_sync = Some(value);
self
}
#[inline]
#[must_use]
pub const fn ignore_revs(mut self, value: bool) -> Self {
self.ignore_revs = value;
self
}
#[inline]
#[must_use]
pub const fn ignore_hooks(mut self, value: bool) -> Self {
self.ignore_hooks = value;
self
}
}
impl Default for OperationOptions {
fn default() -> Self {
Self {
wait_for_sync: None, ignore_revs: true,
ignore_hooks: false,
}
}
}
impl From<OperationOptions> for InsertOptions {
fn from(option: OperationOptions) -> Self {
let builder = Self::builder()
.return_new(true) .return_old(false)
.silent(false);
if let Some(value) = option.wait_for_sync {
builder.wait_for_sync(value).build()
} else {
builder.build()
}
}
}
impl From<OperationOptions> for UpdateOptions {
fn from(option: OperationOptions) -> Self {
let builder = Self::builder()
.keep_null(true)
.ignore_revs(option.ignore_revs)
.return_new(true) .return_old(false)
.silent(false);
if let Some(value) = option.wait_for_sync {
builder.wait_for_sync(value).build()
} else {
builder.build()
}
}
}
impl From<OperationOptions> for RemoveOptions {
fn from(option: OperationOptions) -> Self {
let builder = Self::builder().return_old(false).silent(true); if let Some(value) = option.wait_for_sync {
builder.wait_for_sync(value).build()
} else {
builder.build()
}
}
}