use criterium::DirectMatch;
use criterium::rusqlite::ToRusqliteSingleField;
use criterium::sql::Field;
use rusqlite::types::Value;
use serde::{Serialize,Deserialize};
use uuid::Uuid;
#[derive(Clone,Debug,Serialize,Deserialize)]
#[serde(rename_all="snake_case")]
pub enum UuidCriterium {
Equals(Uuid),
}
impl From<Uuid> for UuidCriterium {
fn from(uuid: Uuid) -> UuidCriterium {
UuidCriterium::Equals(uuid)
}
}
impl<F: Field> ToRusqliteSingleField<F> for UuidCriterium {
fn get_sql_where(&self, field_name: &str) -> String {
match self {
Self::Equals(_) => format!("{field_name} = ?"),
}
}
fn get_inverted_sql_where(&self, field_name: &str) -> Option<String> {
match self {
Self::Equals(_) => Some(format!("{field_name} != ?")),
}
}
fn get_where_values(&self, _is_inverted: bool) -> Vec<Value> {
match self {
Self::Equals(uuid) => vec![(*uuid).into()],
}
}
}
impl DirectMatch<Uuid> for UuidCriterium {
type Output = bool;
fn criterium_match(&self, uuid: &Uuid) -> bool {
match self {
Self::Equals(u) => u == uuid,
}
}
}