gluesql_core/ast_builder/
data_type.rs1use crate::{
2 ast::DataType,
3 parse_sql::parse_data_type,
4 result::{Error, Result},
5 translate::translate_data_type,
6};
7
8#[derive(Clone, Debug)]
9pub enum DataTypeNode {
10 DataType(DataType),
11 Text(String),
12}
13
14impl From<DataType> for DataTypeNode {
15 fn from(data_type: DataType) -> Self {
16 Self::DataType(data_type)
17 }
18}
19
20impl From<&str> for DataTypeNode {
21 fn from(data_type: &str) -> Self {
22 Self::Text(data_type.to_owned())
23 }
24}
25
26impl TryFrom<DataTypeNode> for DataType {
27 type Error = Error;
28
29 fn try_from(data_type: DataTypeNode) -> Result<Self> {
30 match data_type {
31 DataTypeNode::DataType(data_type) => Ok(data_type),
32 DataTypeNode::Text(data_type) => {
33 parse_data_type(data_type).and_then(|datatype| translate_data_type(&datatype))
34 }
35 }
36 }
37}