taitan-orm-parser 0.1.11

Next Generation ORM based on sqlx
Documentation
use nom::branch::alt;
use nom::combinator::map;
use nom::IResult;
use crate::{Number, ToSqlSegment};
use crate::template_parser::structs::values::maybe_value::MaybeValue;
use crate::template_parser::to_sql::SqlSegment;

#[derive(Debug, Clone, PartialEq)]
pub enum NumberValue {
    Value(Number),
    Maybe(MaybeValue),
}

impl NumberValue {
    pub fn parse(input: &str) -> IResult<&str, NumberValue> {
        alt((
            map(Number::parse, NumberValue::Value),
            map(MaybeValue::parse, NumberValue::Maybe),
        ))(input)
    }
}

impl From<Number> for NumberValue {
    fn from(num: Number) -> Self {
        Self::Value(num)
    }
}

impl From<MaybeValue> for NumberValue {
    fn from(maybe: MaybeValue) -> Self {
        Self::Maybe(maybe)
    }
}

impl ToSqlSegment for NumberValue {
    fn gen_sql_segment(&self) -> SqlSegment {
        match self {
            NumberValue::Value(v) => SqlSegment::Simple(v.to_string()),
            NumberValue::Maybe(maybe_value) => maybe_value.gen_sql_segment(),
        }
    }
}