summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-05-15 14:44:06 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-05-15 14:53:34 +0200
commit935d3a332ef7fd9d41c2700ab397a21b8249bffd (patch)
tree2f85c53f184999ebc035ca9905ac060c1b1eea35
parent7ffa3581ccf15dd339873078faf6776a9598f4ea (diff)
Simplify parse() impl of json5 code
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--src/file/format/json5.rs31
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 {