From 935d3a332ef7fd9d41c2700ab397a21b8249bffd Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 15 May 2021 14:44:06 +0200 Subject: Simplify parse() impl of json5 code Signed-off-by: Matthias Beyer --- src/file/format/json5.rs | 31 +++++++++++++------------------ 1 file 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, Box> { - let root = json5_rs::from_str::(&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::(&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) } fn from_json5_value(uri: Option<&String>, value: Val) -> Value { -- cgit v1.2.3