restq/ast/
value.rs

1use serde::{Deserialize, Serialize};
2use sqlparser::ast as sql;
3use std::fmt;
4
5/// coarse value from the parsing
6/// this is close to the json values
7///
8/// TODO: include Integer variant
9#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
10pub enum Value {
11    Null,
12    String(String),
13    Number(f64),
14    Bool(bool),
15}
16
17/// if string is empty use the default value in the underlying database
18impl Into<sql::Value> for &Value {
19    fn into(self) -> sql::Value {
20        match self {
21            Value::Null => sql::Value::Null,
22            Value::String(v) => {
23                if v.is_empty() {
24                    sql::Value::Null
25                } else {
26                    sql::Value::SingleQuotedString(v.to_string())
27                }
28            }
29            Value::Number(v) => sql::Value::Number(format!("{}", v), false),
30            Value::Bool(v) => sql::Value::Boolean(*v),
31        }
32    }
33}
34
35impl fmt::Display for Value {
36    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
37        match self {
38            Value::Null => write!(f, "null"),
39            Value::String(v) => write!(f, "'{}'", v),
40            Value::Number(v) => write!(f, "{}", v),
41            Value::Bool(v) => write!(f, "{}", v),
42        }
43    }
44}