use vantage_core::{Result, error};
use super::{Handle, Step};
use crate::query::{Condition, VistaQuery};
impl Handle {
pub fn query(&self) -> Result<VistaQuery> {
if let Some(verb) = &self.native_verb {
return Err(no_query_form(verb));
}
let mut query = VistaQuery::new();
for step in self.steps.iter() {
match step {
Step::Where { col, op, value } => {
query = query.with_condition(Condition::new(col.as_str(), *op, value.clone()));
}
Step::Search(text) => query = query.with_search(text.as_str()),
Step::Sort { col, dir } => query = query.with_order(col.as_str(), *dir),
Step::Limit(_) => return Err(no_query_form("limit")),
Step::Ref(_) => return Err(no_query_form("ref")),
}
}
Ok(query)
}
}
fn no_query_form(verb: &str) -> vantage_core::VantageError {
error!(
"Step has no query form; Handle::query() takes where, search and sort",
verb = verb
)
.mark_incorrect_usage()
}