real_time_sqlx/queries/
display.rs1use std::fmt;
4
5use crate::utils::format_list;
6
7use super::serialize::{
8 Condition, Constraint, ConstraintValue, FinalType, Operator, OrderBy, PaginateOptions,
9 QueryTree,
10};
11
12impl fmt::Display for FinalType {
13 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
14 match self {
15 FinalType::Number(number) => {
16 if number.is_f64() {
17 write!(f, "{}", number.as_f64().unwrap())
18 } else {
19 write!(f, "{}", number.as_i64().unwrap())
20 }
21 }
22 FinalType::String(string) => write!(f, "'{string}'"),
23 FinalType::Bool(bool) => write!(f, "{}", if *bool { 1 } else { 0 }),
24 FinalType::Null => write!(f, "NULL"),
25 }
26 }
27}
28
29impl fmt::Display for ConstraintValue {
30 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31 match self {
32 ConstraintValue::Final(value) => write!(f, "{}", value),
33 ConstraintValue::List(list) => {
34 write!(f, "{}", format_list(&list, ", "))
35 }
36 }
37 }
38}
39
40impl fmt::Display for Operator {
41 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42 match self {
43 Operator::Equal => write!(f, "="),
44 Operator::LessThan => write!(f, "<"),
45 Operator::GreaterThan => write!(f, ">"),
46 Operator::LessThanOrEqual => write!(f, "<="),
47 Operator::GreaterThanOrEqual => write!(f, ">="),
48 Operator::NotEqual => write!(f, "!="),
49 Operator::In => write!(f, "in"),
50 Operator::Like => write!(f, "like"),
51 Operator::ILike => write!(f, "ilike"),
52 }
53 }
54}
55
56impl fmt::Display for Constraint {
57 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
58 write!(f, "\"{}\" {} {}", self.column, self.operator, self.value)
59 }
60}
61
62impl fmt::Display for Condition {
63 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
64 match self {
65 Condition::Single { constraint } => write!(f, "{}", constraint),
66 Condition::Or { conditions } => {
67 write!(f, "({})", format_list(&conditions, " OR "))
68 }
69 Condition::And { conditions } => {
70 write!(f, "({})", format_list(&conditions, " AND "))
71 }
72 }
73 }
74}
75
76impl fmt::Display for OrderBy {
77 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
78 match self {
79 OrderBy::Asc(column) => write!(f, "ORDER BY {} ASC", column),
80 OrderBy::Desc(column) => write!(f, "ORDER BY {} DESC", column),
81 }
82 }
83}
84
85impl fmt::Display for PaginateOptions {
86 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
87 if let Some(order) = &self.order_by {
88 write!(f, "{} ", order)?;
89 }
90 write!(f, "LIMIT {} ", self.per_page)?;
91
92 if let Some(offset) = self.offset {
93 write!(f, "OFFSET {}", offset)?;
94 }
95
96 Ok(())
97 }
98}
99
100impl fmt::Display for QueryTree {
101 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
102 write!(f, "SELECT * FROM {}", self.table)?;
103
104 if let Some(condition) = &self.condition {
105 write!(f, " WHERE {} ", condition)?;
106 }
107
108 if let Some(paginate) = &self.paginate {
109 write!(f, "{}", paginate)?;
110 }
111 Ok(())
112 }
113}