use crate::utils::{
calc::{eval, meval},
currency::curr_convert_q,
translate::Translator,
units::Measurement,
};
use anyhow::{bail, Result};
pub async fn magic_convert(query: &String) -> Result<String> {
let measure_response = Measurement::convert(query);
let tr = Translator::new();
if let Ok(resp) = measure_response {
return Ok(resp.txt());
}
if let Ok(resp) = eval(query) {
return Ok(resp.to_string());
}
if let Ok(resp) = meval(query) {
return Ok(resp.txt());
}
if let Ok(resp) = curr_convert_q(query).await {
return Ok(resp.txt());
}
let translate_response = tr.convert(query).await?;
if translate_response != *query {
return Ok(translate_response);
}
bail!("Sorry, I can't understand that query.")
}