unobtanium 3.0.0

Opinioated Web search engine library with crawler and viewer companion.
Documentation
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,
		}
	}
}