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
use std::{collections::HashMap, num::ParseIntError}; use pest::iterators::Pairs; use crate::{type_name_parser::Rule, ParseError}; pub type Enum8 = HashMap<String, i8>; pub type Enum16 = HashMap<String, i16>; pub(crate) fn get_enum8(enum_pairs: Pairs<'_, Rule>) -> Result<Enum8, ParseError> { let mut map = HashMap::new(); for pair in enum_pairs { let mut pair_inner = pair.into_inner(); let key = pair_inner .next() .ok_or(ParseError::Unknown)? .as_str() .to_string(); let value = pair_inner .next() .ok_or(ParseError::Unknown)? .as_str() .parse() .map_err(|err: ParseIntError| ParseError::ValueInvalid(err.to_string()))?; map.insert(key, value); } Ok(map) } pub(crate) fn get_enum16(enum_pairs: Pairs<'_, Rule>) -> Result<Enum16, ParseError> { let mut map = HashMap::new(); for pair in enum_pairs { let mut pair_inner = pair.into_inner(); let key = pair_inner .next() .ok_or(ParseError::Unknown)? .as_str() .to_string(); let value: i16 = pair_inner .next() .ok_or(ParseError::Unknown)? .as_str() .parse() .map_err(|err: ParseIntError| ParseError::ValueInvalid(err.to_string()))?; map.insert(key, value); } Ok(map) }