sqlgen 0.1.6

A library to generate SQL Statements.
Documentation
use crate::prelude::*;

#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
#[derive(Debug)]
pub enum SearchCondition {
    Predicate {
        lhs: Expression,
        comparison_operator: ComparisonOperator,
        rhs: Expression,
    },
    Unknown,
}

impl Sql for SearchCondition {
    fn sql(&self, s: String, ctx: &Context) -> Result<String> {
        match self {
            SearchCondition::Predicate {
                lhs,
                comparison_operator,
                rhs,
            } => {
                let s = lhs.sql(s, ctx)?;
                let s = comparison_operator.sql(s, ctx)?;
                let s = rhs.sql(s, ctx);

                s
            }
            SearchCondition::Unknown => Err(SqlGenError::ParseFailed(
                "Was not able to parse the SearchCondition".into(),
            )),
        }
    }
}

impl<T> From<T> for SearchCondition
where
    T: AsRef<str>,
{
    fn from(value: T) -> Self {
        let split: Vec<&str> = value.as_ref().split(' ').collect();
        match split[..] {
            [lhs, operator, rhs] => SearchCondition::Predicate {
                lhs: lhs.into(),
                comparison_operator: operator.into(),
                rhs: rhs.into(),
            },
            _ => SearchCondition::Unknown,
        }
    }
}