diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-05-15 14:44:06 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-05-15 14:53:34 +0200 |
commit | 935d3a332ef7fd9d41c2700ab397a21b8249bffd (patch) | |
tree | 2f85c53f184999ebc035ca9905ac060c1b1eea35 | |
parent | 7ffa3581ccf15dd339873078faf6776a9598f4ea (diff) |
Simplify parse() impl of json5 code
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/file/format/json5.rs | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/src/file/format/json5.rs b/src/file/format/json5.rs index fa7ff1b..cc550c0 100644 --- a/src/file/format/json5.rs +++ b/src/file/format/json5.rs @@ -20,25 +20,20 @@ pub fn parse( uri: Option<&String>, text: &str, ) -> Result<HashMap<String, Value>, Box<dyn Error + Send + Sync>> { - let root = json5_rs::from_str::<Val>(&text)?; - if let Some(err) = match root { - Val::String(ref value) => Some(Unexpected::Str(value.clone())), - Val::Integer(value) => Some(Unexpected::Integer(value)), - Val::Float(value) => Some(Unexpected::Float(value)), - Val::Boolean(value) => Some(Unexpected::Bool(value)), - Val::Object(_) => None, - Val::Array(_) => Some(Unexpected::Seq), - Val::Null => Some(Unexpected::Unit), - } { - return Err(ConfigError::invalid_root(uri, err)); - } - - let value = from_json5_value(uri, root); - match value.kind { - ValueKind::Table(map) => Ok(map), - - _ => Ok(HashMap::new()), + match json5_rs::from_str::<Val>(&text)? { + Val::String(ref value) => Err(Unexpected::Str(value.clone())), + Val::Integer(value) => Err(Unexpected::Integer(value)), + Val::Float(value) => Err(Unexpected::Float(value)), + Val::Boolean(value) => Err(Unexpected::Bool(value)), + Val::Array(_) => Err(Unexpected::Seq), + Val::Null => Err(Unexpected::Unit), + Val::Object(o) => match from_json5_value(uri, Val::Object(o)).kind { + ValueKind::Table(map) => Ok(map), + _ => Ok(HashMap::new()), + }, } + .map_err(|err| ConfigError::invalid_root(uri, err)) + .map_err(|err| Box::new(err) as Box<dyn Error + Send + Sync>) } fn from_json5_value(uri: Option<&String>, value: Val) -> Value { |