1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
mod cast;

use {
	crate::Value,
	serde::{Deserialize, Serialize},
	sqlparser::ast::DataType,
	std::fmt::Debug,
};

#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, Eq)]
pub enum ValueType {
	Bool,
	U64,
	I64,
	F64,
	Str,
	Timestamp,
	Any,
}
impl Default for ValueType {
	fn default() -> Self {
		Self::Any
	}
}
impl From<Value> for ValueType {
	fn from(value: Value) -> Self {
		match value {
			Value::Bool(_) => ValueType::Bool,
			Value::U64(_) => ValueType::U64,
			Value::I64(_) => ValueType::I64,
			Value::F64(_) => ValueType::F64,
			Value::Str(_) => ValueType::Str,
			Value::Timestamp(_) => ValueType::Timestamp,
			_ => ValueType::Any,
		}
	}
}
impl From<DataType> for ValueType {
	fn from(data_type: DataType) -> Self {
		match data_type {
			DataType::Boolean => ValueType::Bool,
			DataType::UnsignedInt(_) => ValueType::U64,
			DataType::Int(_) => ValueType::I64,
			DataType::Float(_) => ValueType::F64,
			DataType::Text => ValueType::Str,
			DataType::Timestamp => ValueType::Timestamp,
			_ => ValueType::Any,
		}
	}
}