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