taitan_orm_parser/template_parser/structs/atomics/
generic_atomic.rs1use crate::template::MaybeValue;
2use crate::template_parser::structs::atomics::postgres_atomic::PostgresAtomic;
3use crate::template_parser::structs::bool_value::Bool;
4use crate::template_parser::structs::text::Text;
5use crate::template_parser::to_sql::SqlSegment;
6use crate::{Number, Operator, Sign, ToSqlSegment};
7use crate::template_parser::structs::atomics::mysql_atomic::MySqlAtomic;
8use crate::template_parser::structs::atomics::sqlite_atomic::SqliteAtomic;
9
10#[derive(Debug, Clone, PartialEq)]
11pub enum GenericAtomic {
12 Null,
13 Number(Number),
14 Text(Text),
15 Bool(Bool),
16 Operator(Operator), Maybe(MaybeValue), Sign(Sign), Keyword(&'static str),
20}
21
22impl From<PostgresAtomic> for GenericAtomic {
23 fn from(pg_atomic: PostgresAtomic) -> Self {
24 match pg_atomic {
25 PostgresAtomic::Null => GenericAtomic::Null,
26 PostgresAtomic::Number(n) => Self::Number(n),
27 PostgresAtomic::Text(t) => Self::Text(t),
28 PostgresAtomic::Bool(b) => Self::Bool(b),
29 PostgresAtomic::Operator(o) => Self::Operator(o),
30 PostgresAtomic::Maybe(m) => Self::Maybe(m),
31 PostgresAtomic::Sign(s) => Self::Sign(s),
32 PostgresAtomic::Keyword(k) => Self::Keyword(k.0),
33 }
34 }
35}
36
37impl From<MySqlAtomic> for GenericAtomic {
38 fn from(pg_atomic: MySqlAtomic) -> Self {
39 match pg_atomic.into() {
40 MySqlAtomic::Null => GenericAtomic::Null,
41 MySqlAtomic::Number(n) => Self::Number(n),
42 MySqlAtomic::Text(t) => Self::Text(t),
43 MySqlAtomic::Bool(b) => Self::Bool(b),
44 MySqlAtomic::Operator(o) => Self::Operator(o),
45 MySqlAtomic::Maybe(m) => Self::Maybe(m),
46 MySqlAtomic::Sign(s) => Self::Sign(s),
47 MySqlAtomic::Keyword(k) => Self::Keyword(k.0),
48 }
49 }
50}
51
52impl From<SqliteAtomic> for GenericAtomic {
53 fn from(pg_atomic: SqliteAtomic) -> Self {
54 match pg_atomic.into() {
55 SqliteAtomic::Null => GenericAtomic::Null,
56 SqliteAtomic::Number(n) => Self::Number(n),
57 SqliteAtomic::Text(t) => Self::Text(t),
58 SqliteAtomic::Bool(b) => Self::Bool(b),
59 SqliteAtomic::Operator(o) => Self::Operator(o),
60 SqliteAtomic::Maybe(m) => Self::Maybe(m),
61 SqliteAtomic::Sign(s) => Self::Sign(s),
62 SqliteAtomic::Keyword(k) => Self::Keyword(k.0),
63 }
64 }
65}
66impl ToSqlSegment for GenericAtomic {
67 fn gen_sql_segment(&self) -> SqlSegment {
68 match self {
69 GenericAtomic::Null=>SqlSegment::Simple("NULL".to_string()),
70 GenericAtomic::Sign(s) => SqlSegment::Simple(s.to_string()),
71 GenericAtomic::Maybe(m) => SqlSegment::Simple(m.gen_sql_segment().to_sql(false).to_string()),
72 GenericAtomic::Operator(b) => SqlSegment::Simple(b.to_string()),
73 GenericAtomic::Bool(b) => SqlSegment::Simple(b.to_string()),
74 GenericAtomic::Text(t) => SqlSegment::Simple(t.to_string()),
75 GenericAtomic::Number(n) => SqlSegment::Simple(n.to_string()),
76 GenericAtomic::Keyword(k) => SqlSegment::Simple(k.to_string()),
77 }
78 }
79}