use crate::EnvLang;
use crate::EnvLangError;
use crate::EnvLangErrorKind;
pub fn to_struct(lang_env: &str) -> Result<EnvLang, EnvLangError> {
let mut result = EnvLang{
language: None,
localisation: None,
charset: None,
variant: None,
};
if lang_env.len() > 0 {
let split: Vec<&str> = lang_env.split(' ').collect();
if split.len() > 1 {
return Err(EnvLangError::from(EnvLangErrorKind::SpaceNotAllow))
}
let split: Vec<&str> = lang_env.split('.').collect();
if split.len() > 2 {
return Err(EnvLangError::from(EnvLangErrorKind::TooManyPoint))
}
let left_point = split[0];
let mut right_point = "";
if split.len() == 2 {
right_point = split[1]
}
let split: Vec<&str> = left_point.split('_').collect();
if split.len() > 2 {
return Err(EnvLangError::from(EnvLangErrorKind::TooManyUnderscore))
}
let left_underscore = split[0];
let mut right_underscore = "";
if split.len() == 2 {
right_underscore = split[1]
}
if left_underscore.len() > 0 { result.language = Some(left_underscore); }
if right_underscore.len() > 0 { result.localisation = Some(right_underscore); }
if right_point.len() > 0 {
let split: Vec<&str> = right_point.split('@').collect();
if split.len() > 2 {
return Err(EnvLangError::from(EnvLangErrorKind::TooManyArobase))
}
let left_arobase = split[0];
let mut right_arobase = "";
if split.len() == 2 {
right_arobase = split[1]
}
if left_arobase.len() > 0 { result.charset = Some(left_arobase); }
if right_arobase.len() > 0 { result.variant = Some(right_arobase); }
}
}
Ok(result)
}