clickhouse_data_type/
enum.rs

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