gluesql_core/ast_builder/
data_type.rs

1use 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}