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 rusqlite::types::ValueRef;
use serde::{Serialize,Deserialize};

#[derive(Clone,Debug,Serialize,Deserialize)]
#[serde(rename_all="snake_case")]
pub enum BlobCriterium {
	Equals(Box<[u8]>),
}


impl<F: Field> ToRusqliteSingleField<F> for BlobCriterium {
	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(blob) => vec![ValueRef::Blob(blob).into()],
		}
	}
}

impl DirectMatch<[u8]> for BlobCriterium {

	type Output =  bool;
	
	fn criterium_match(&self, blob: &[u8]) -> bool {
		match self {
			Self::Equals(u) => **u == *blob,
		}
	}
}