use crate::{Query, Result, SearchEngineError, SupportedQueries};
use std::{collections::HashSet, str::FromStr};
mod btree_range;
mod hashmap;
mod prefix;
pub use btree_range::*;
pub use hashmap::*;
pub use prefix::*;
pub trait SearchIndex<P> {
fn search(&self, query: &Query) -> Result<HashSet<P>>;
fn supported_queries(&self) -> SupportedQueries;
}
fn string_to_payload_type<T: FromStr>(value: &str) -> Result<T> {
value
.parse()
.map_err(|_| SearchEngineError::MismatchedQueryType)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_string_to_payload_type() {
assert_eq!(string_to_payload_type("1234"), Ok(1234i32));
assert_eq!(string_to_payload_type("123456"), Ok(123456usize));
assert_eq!(string_to_payload_type("true"), Ok(true));
assert_eq!(
string_to_payload_type::<usize>("Hello"),
Err(SearchEngineError::MismatchedQueryType)
);
}
}