clickhouse_data_type/
enum.rs1use core::num::ParseIntError;
2use std::collections::HashMap;
3
4use pest::iterators::Pairs;
5
6use crate::{type_name_parser::Rule, ParseError};
7
8pub type Enum8 = HashMap<String, i8>;
9pub type Enum16 = HashMap<String, i16>;
10
11pub(crate) fn get_enum8(enum_pairs: Pairs<'_, Rule>) -> Result<Enum8, ParseError> {
12 let mut map = HashMap::new();
13 for pair in enum_pairs {
14 let mut pair_inner = pair.into_inner();
15 let key = pair_inner
16 .next()
17 .ok_or(ParseError::Unknown)?
18 .as_str()
19 .to_string();
20 let value = pair_inner
21 .next()
22 .ok_or(ParseError::Unknown)?
23 .as_str()
24 .parse()
25 .map_err(|err: ParseIntError| ParseError::ValueInvalid(err.to_string()))?;
26
27 map.insert(key, value);
28 }
29 Ok(map)
30}
31
32pub(crate) fn get_enum16(enum_pairs: Pairs<'_, Rule>) -> Result<Enum16, ParseError> {
33 let mut map = HashMap::new();
34 for pair in enum_pairs {
35 let mut pair_inner = pair.into_inner();
36 let key = pair_inner
37 .next()
38 .ok_or(ParseError::Unknown)?
39 .as_str()
40 .to_string();
41 let value: i16 = pair_inner
42 .next()
43 .ok_or(ParseError::Unknown)?
44 .as_str()
45 .parse()
46 .map_err(|err: ParseIntError| ParseError::ValueInvalid(err.to_string()))?;
47
48 map.insert(key, value);
49 }
50 Ok(map)
51}