taitan-orm-parser 0.1.12

Next Generation ORM based on sqlx
Documentation
use std::fmt::Display;
use nom::branch::alt;
use nom::combinator::map;
use nom::IResult;
use crate::template_parser::TemplatePart;
use crate::{Placeholder, ToSqlSegment, VariableChain};
use crate::template_parser::to_sql::SqlSegment;

#[derive(Debug, Clone, PartialEq)]
pub enum MaybeValue {
    VariableChain(VariableChain),
    TemplatePart(TemplatePart),
    Placeholder(Placeholder),
}

impl MaybeValue {
    pub fn parse(input: &str) -> IResult<&str, MaybeValue> {
        alt((
            map(VariableChain::parse, MaybeValue::VariableChain),
            map(TemplatePart::parse, MaybeValue::TemplatePart),
            map(Placeholder::parse, MaybeValue::Placeholder),
        ))(input)
    }
}

impl ToSqlSegment for MaybeValue {
    fn gen_sql_segment(&self) -> SqlSegment {
        match self {
            Self::VariableChain(v) => SqlSegment::Simple(v.to_string()),
            Self::TemplatePart(v)=>SqlSegment::Simple(v.to_string()),
            Self::Placeholder(v) => v.gen_sql_segment(),
        }
    }
}