use std::cmp::Ordering;
use bson::Bson;
#[repr(u8)]
#[derive(Copy, Clone, Eq, PartialEq)]
#[allow(dead_code)]
pub enum DbOp {
_EOF = 0,
Label = 1,
Inc,
IncR2,
Goto,
IfTrue,
IfFalse,
Rewind,
FindByPrimaryKey,
FindByIndex,
Next,
NextIndexValue,
PushValue,
PushTrue,
PushFalse,
PushDocument,
PushNull,
PushR0,
StoreR0,
StoreR0_2,
GetField,
UnsetField,
SetField,
ArraySize,
ArrayPush,
ArrayPopFirst,
ArrayPopLast,
UpdateCurrent,
DeleteCurrent,
InsertIndex,
DeleteIndex,
Dup,
Pop,
Pop2,
Equal,
Greater,
GreaterEqual,
Less,
LessEqual,
Regex,
Not,
In,
EqualNull,
OpenRead,
OpenWrite,
ResultRow,
Close,
SaveStackPos,
RecoverStackPos,
Call,
CallExternal,
CallUpdateOperator,
ExternalIsCompleted,
Ret0,
Ret,
IfFalseRet,
LoadGlobal,
StoreGlobal,
Halt,
}
pub(crate) fn generic_cmp(op: DbOp, val1: &Bson, val2: &Bson) -> crate::Result<bool> {
let ord = crate::utils::bson::value_cmp(val1, val2)?;
let result = matches!(
(op, ord),
(DbOp::Equal, Ordering::Equal)
| (DbOp::Greater, Ordering::Greater)
| (DbOp::GreaterEqual, Ordering::Equal)
| (DbOp::GreaterEqual, Ordering::Greater)
| (DbOp::Less, Ordering::Less)
| (DbOp::LessEqual, Ordering::Equal)
| (DbOp::LessEqual, Ordering::Less)
);
Ok(result)
}