taitan_orm_parser/template_parser/structs/values/
number_value.rs

1use nom::branch::alt;
2use nom::combinator::map;
3use nom::IResult;
4use crate::{Number, ToSqlSegment};
5use crate::template_parser::structs::values::maybe_value::MaybeValue;
6use crate::template_parser::to_sql::SqlSegment;
7
8#[derive(Debug, Clone, PartialEq)]
9pub enum NumberValue {
10    Value(Number),
11    Maybe(MaybeValue),
12}
13
14impl NumberValue {
15    pub fn parse(input: &str) -> IResult<&str, NumberValue> {
16        alt((
17            map(Number::parse, NumberValue::Value),
18            map(MaybeValue::parse, NumberValue::Maybe),
19        ))(input)
20    }
21}
22
23impl From<Number> for NumberValue {
24    fn from(num: Number) -> Self {
25        Self::Value(num)
26    }
27}
28
29impl From<MaybeValue> for NumberValue {
30    fn from(maybe: MaybeValue) -> Self {
31        Self::Maybe(maybe)
32    }
33}
34
35impl ToSqlSegment for NumberValue {
36    fn gen_sql_segment(&self) -> SqlSegment {
37        match self {
38            NumberValue::Value(v) => SqlSegment::Simple(v.to_string()),
39            NumberValue::Maybe(maybe_value) => maybe_value.gen_sql_segment(),
40        }
41    }
42}