use coll::options::{CursorType, FindOptions};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct OpReplyFlags {
pub cursor_not_found: bool, pub query_failure: bool, pub await_capable: bool,
}
impl OpReplyFlags {
pub fn from_i32(i: i32) -> OpReplyFlags {
let cursor_not_found = (i & 1) != 0;
let query_failure = (i & (1 << 1)) != 0;
let await_capable = (i & (1 << 3)) != 0;
OpReplyFlags { cursor_not_found: cursor_not_found,
query_failure: query_failure,
await_capable: await_capable }
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct OpUpdateFlags {
pub upsert: bool, pub multi_update: bool,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct OpInsertFlags {
pub continue_on_error: bool,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct OpQueryFlags {
pub tailable_cursor: bool, pub slave_ok: bool, pub oplog_relay: bool, pub no_cursor_timeout: bool, pub await_data: bool, pub exhaust: bool, pub partial: bool, }
impl OpUpdateFlags {
pub fn no_flags() -> OpUpdateFlags {
OpUpdateFlags { upsert: false, multi_update: false }
}
pub fn to_i32(&self) -> i32 {
let mut i = 0 as i32;
if self.upsert {
i = 1;
}
if self.multi_update {
i |= 1 << 1;
}
i
}
}
impl OpInsertFlags {
pub fn no_flags() -> OpInsertFlags {
OpInsertFlags { continue_on_error: false }
}
pub fn to_i32(&self) -> i32 {
if self.continue_on_error {
1
} else {
0
}
}
}
impl OpQueryFlags {
pub fn no_flags() -> OpQueryFlags {
OpQueryFlags { tailable_cursor: false, slave_ok: false,
oplog_relay: false, no_cursor_timeout: false,
await_data: false, exhaust: false, partial: false }
}
pub fn with_find_options(options: &FindOptions) -> OpQueryFlags {
OpQueryFlags {
tailable_cursor: options.cursor_type != CursorType::NonTailable,
slave_ok: false,
oplog_relay: options.op_log_replay,
no_cursor_timeout: options.no_cursor_timeout,
await_data: options.cursor_type == CursorType::TailableAwait,
exhaust: false,
partial: options.allow_partial_results,
}
}
pub fn to_i32(&self) -> i32 {
let mut i = 0 as i32;
if self.tailable_cursor {
i |= 1 << 1;
}
if self.slave_ok {
i |= 1 << 2;
}
if self.oplog_relay {
i |= 1 << 3;
}
if self.no_cursor_timeout {
i |= 1 << 4;
}
if self.await_data {
i |= 1 << 5;
}
if self.exhaust {
i |= 1 << 6;
}
if self.partial {
i |= 1 << 7;
}
i
}
}