taitan_orm_parser/template_parser/structs/values/
number_value.rs1use 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}