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
use crate::error::AtError; use std::path::PathBuf; use std::str::FromStr; pub trait Parse: Sized { fn parse(string: &str) -> Result<Self, AtError>; } impl Parse for bool { fn parse(string: &str) -> Result<Self, AtError> { Self::from_str(string).map_err(AtError::from) } } macro_rules! impl_parse_for_int_type { ($($int_type:ty),+ $(,)?) => { $( impl Parse for $int_type { fn parse(string: &str) -> Result<Self, AtError> { Self::from_str(string).map_err(AtError::from) } } )+ } } impl_parse_for_int_type![i8, i16, i32, i64, i128, u8, u16, u32, u64, u128]; impl Parse for String { fn parse(string: &str) -> Result<Self, AtError> { Ok(string.to_string()) } } impl Parse for PathBuf { fn parse(string: &str) -> Result<Self, AtError> { Ok(PathBuf::from(string)) } }