1use serde::{Deserialize, Serialize};
2use sqlparser::ast as sql;
3use std::fmt;
4
5#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
10pub enum Value {
11 Null,
12 String(String),
13 Number(f64),
14 Bool(bool),
15}
16
17impl 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}