use crate::parser::query_builder::Condition;
use crate::utils::format::camel_to_snake_case;
use serde_json::Value;
#[derive(Debug)]
pub struct RequestCondition {
pub eq_column: String,
pub eq_value: Value,
}
fn is_camel_case(s: &str) -> bool {
s.chars()
.skip(1) .any(|c| c.is_ascii_uppercase())
}
impl RequestCondition {
pub fn new(eq_column: String, eq_value: Value) -> Self {
Self {
eq_column,
eq_value,
}
}
}
pub fn to_query_conditions(
conditions: &[RequestCondition],
convert_camel_case: bool,
) -> Vec<Condition> {
conditions
.iter()
.map(|condition: &RequestCondition| {
let is_already_camel_case: bool = is_camel_case(&condition.eq_column);
let column_name: String = if convert_camel_case && !is_already_camel_case {
let converted: String = camel_to_snake_case(&condition.eq_column);
converted
} else {
condition.eq_column.clone()
};
let query_condition: Condition =
Condition::eq(&column_name, condition.eq_value.clone());
query_condition
})
.collect()
}