use crate::template::MaybeValue;
use crate::template_parser::structs::atomics::postgres_atomic::PostgresAtomic;
use crate::template_parser::structs::bool_value::Bool;
use crate::template_parser::structs::text::Text;
use crate::template_parser::to_sql::SqlSegment;
use crate::{Number, Operator, Sign, ToSqlSegment};
use crate::template_parser::structs::atomics::mysql_atomic::MySqlAtomic;
use crate::template_parser::structs::atomics::sqlite_atomic::SqliteAtomic;
#[derive(Debug, Clone, PartialEq)]
pub enum GenericAtomic {
Null,
Number(Number),
Text(Text),
Bool(Bool),
Operator(Operator), Maybe(MaybeValue), Sign(Sign), Keyword(&'static str),
}
impl From<PostgresAtomic> for GenericAtomic {
fn from(pg_atomic: PostgresAtomic) -> Self {
match pg_atomic {
PostgresAtomic::Null => GenericAtomic::Null,
PostgresAtomic::Number(n) => Self::Number(n),
PostgresAtomic::Text(t) => Self::Text(t),
PostgresAtomic::Bool(b) => Self::Bool(b),
PostgresAtomic::Operator(o) => Self::Operator(o),
PostgresAtomic::Maybe(m) => Self::Maybe(m),
PostgresAtomic::Sign(s) => Self::Sign(s),
PostgresAtomic::Keyword(k) => Self::Keyword(k.0),
}
}
}
impl From<MySqlAtomic> for GenericAtomic {
fn from(pg_atomic: MySqlAtomic) -> Self {
match pg_atomic.into() {
MySqlAtomic::Null => GenericAtomic::Null,
MySqlAtomic::Number(n) => Self::Number(n),
MySqlAtomic::Text(t) => Self::Text(t),
MySqlAtomic::Bool(b) => Self::Bool(b),
MySqlAtomic::Operator(o) => Self::Operator(o),
MySqlAtomic::Maybe(m) => Self::Maybe(m),
MySqlAtomic::Sign(s) => Self::Sign(s),
MySqlAtomic::Keyword(k) => Self::Keyword(k.0),
}
}
}
impl From<SqliteAtomic> for GenericAtomic {
fn from(pg_atomic: SqliteAtomic) -> Self {
match pg_atomic.into() {
SqliteAtomic::Null => GenericAtomic::Null,
SqliteAtomic::Number(n) => Self::Number(n),
SqliteAtomic::Text(t) => Self::Text(t),
SqliteAtomic::Bool(b) => Self::Bool(b),
SqliteAtomic::Operator(o) => Self::Operator(o),
SqliteAtomic::Maybe(m) => Self::Maybe(m),
SqliteAtomic::Sign(s) => Self::Sign(s),
SqliteAtomic::Keyword(k) => Self::Keyword(k.0),
}
}
}
impl ToSqlSegment for GenericAtomic {
fn gen_sql_segment(&self) -> SqlSegment {
match self {
GenericAtomic::Null=>SqlSegment::Simple("NULL".to_string()),
GenericAtomic::Sign(s) => SqlSegment::Simple(s.to_string()),
GenericAtomic::Maybe(m) => SqlSegment::Simple(m.gen_sql_segment().to_sql(false).to_string()),
GenericAtomic::Operator(b) => SqlSegment::Simple(b.to_string()),
GenericAtomic::Bool(b) => SqlSegment::Simple(b.to_string()),
GenericAtomic::Text(t) => SqlSegment::Simple(t.to_string()),
GenericAtomic::Number(n) => SqlSegment::Simple(n.to_string()),
GenericAtomic::Keyword(k) => SqlSegment::Simple(k.to_string()),
}
}
}