#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "rusqlite")]
pub mod rusqlite;
pub mod direct_match;
#[derive(Clone, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
pub enum BooleanCriterium {
Equals(bool),
IsNone,
}
impl From<bool> for BooleanCriterium {
fn from(b: bool) -> Self {
Self::Equals(b)
}
}
impl From<Option<bool>> for BooleanCriterium {
fn from(b: Option<bool>) -> Self {
if let Some(b) = b {
Self::Equals(b)
} else {
Self::IsNone
}
}
}
#[cfg(test)]
mod test {
use super::*;
use crate::DirectMatch;
#[test]
fn direct_match_bool() {
let c_true = BooleanCriterium::Equals(true);
let c_false = BooleanCriterium::Equals(false);
assert!(c_true.criterium_match(&true));
assert!(!c_false.criterium_match(&true));
assert!(!c_true.criterium_match(&false));
assert!(c_false.criterium_match(&false));
assert!(!c_true.criterium_match(&(None as Option<bool>)));
assert!(!c_false.criterium_match(&(None as Option<bool>)));
assert!(c_true.criterium_match(&Some(true)));
assert!(!c_false.criterium_match(&Some(true)));
assert!(!c_true.criterium_match(&Some(false)));
assert!(c_false.criterium_match(&Some(false)));
}
}