taitan_orm_parser/template_parser/structs/values/
maybe_value.rs

1use std::fmt::Display;
2use nom::branch::alt;
3use nom::combinator::map;
4use nom::IResult;
5use crate::template_parser::TemplatePart;
6use crate::{Placeholder, ToSqlSegment, VariableChain};
7use crate::template_parser::to_sql::SqlSegment;
8
9#[derive(Debug, Clone, PartialEq)]
10pub enum MaybeValue {
11    VariableChain(VariableChain),
12    TemplatePart(TemplatePart),
13    Placeholder(Placeholder),
14}
15
16impl MaybeValue {
17    pub fn parse(input: &str) -> IResult<&str, MaybeValue> {
18        alt((
19            map(VariableChain::parse, MaybeValue::VariableChain),
20            map(TemplatePart::parse, MaybeValue::TemplatePart),
21            map(Placeholder::parse, MaybeValue::Placeholder),
22        ))(input)
23    }
24}
25
26impl ToSqlSegment for MaybeValue {
27    fn gen_sql_segment(&self) -> SqlSegment {
28        match self {
29            Self::VariableChain(v) => SqlSegment::Simple(v.to_string()),
30            Self::TemplatePart(v)=>SqlSegment::Simple(v.to_string()),
31            Self::Placeholder(v) => v.gen_sql_segment(),
32        }
33    }
34}