summaryrefslogtreecommitdiffstats
path: root/src/file/json.rs
diff options
context:
space:
mode:
authorRyan Leckey <leckey.ryan@gmail.com>2017-02-08 02:04:56 -0800
committerRyan Leckey <leckey.ryan@gmail.com>2017-02-08 02:04:56 -0800
commit65714bea49036cb2f9188072a8a5d143ac9b9eb9 (patch)
treef89553c6d06d9de6a314ae02cd37f70c3d3e15b2 /src/file/json.rs
parent33bc35e1c960b146601083fa1f2d0d602e6152ca (diff)
Implement 'namespace' on File
Diffstat (limited to 'src/file/json.rs')
-rw-r--r--src/file/json.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/file/json.rs b/src/file/json.rs
index 86612c9..64c6236 100644
--- a/src/file/json.rs
+++ b/src/file/json.rs
@@ -11,9 +11,21 @@ pub struct Content {
}
impl Content {
- pub fn parse(text: &str) -> Result<Box<Source>, Box<Error>> {
+ pub fn parse(text: &str, namespace: Option<&String>) -> Result<Box<Source>, Box<Error>> {
// Parse
- let root = serde_json::from_str(text)?;
+ let mut root: serde_json::Value = serde_json::from_str(text)?;
+
+ // Limit to namespace
+ if let Some(namespace) = namespace {
+ if let serde_json::Value::Object(mut root_map) = root {
+ if let Some(value) = root_map.remove(namespace) {
+ root = value;
+ } else {
+ // TODO: Warn?
+ root = serde_json::Value::Object(serde_json::Map::new());
+ }
+ }
+ }
Ok(Box::new(Content { root: root }))
}