diff options
author | Ryan Leckey <leckey.ryan@gmail.com> | 2017-01-28 22:07:13 -0800 |
---|---|---|
committer | Ryan Leckey <leckey.ryan@gmail.com> | 2017-01-28 22:07:13 -0800 |
commit | c1bcf6ec5537bfd0fb3f1ee8d93a32aa15031cff (patch) | |
tree | 05fd0b9a2daae99543a9d5ae3a6e15eebc622055 /src/file | |
parent | 7d870758cbd9ad4181471ad40184d1bac1204e1e (diff) |
Propagate Cow into Source
Diffstat (limited to 'src/file')
-rw-r--r-- | src/file/json.rs | 12 | ||||
-rw-r--r-- | src/file/nil.rs | 4 | ||||
-rw-r--r-- | src/file/toml.rs | 12 |
3 files changed, 15 insertions, 13 deletions
diff --git a/src/file/json.rs b/src/file/json.rs index 165bdbe..587d54a 100644 --- a/src/file/json.rs +++ b/src/file/json.rs @@ -19,28 +19,28 @@ impl Content { } } -fn from_json_value(value: &serde_json::Value) -> Option<Value> { +fn from_json_value<'a>(value: &serde_json::Value) -> Option<Cow<'a, Value>> { match *value { - serde_json::Value::String(ref value) => Some(Value::String(Cow::Borrowed(value))), + serde_json::Value::String(ref value) => Some(Cow::Owned(Value::String(Cow::Borrowed(value)))), serde_json::Value::Number(ref value) => { if let Some(value) = value.as_i64() { - Some(Value::Integer(value)) + Some(Cow::Owned(Value::Integer(value))) } else if let Some(value) = value.as_f64() { - Some(Value::Float(value)) + Some(Cow::Owned(Value::Float(value))) } else { None } } - serde_json::Value::Bool(value) => Some(Value::Boolean(value)), + serde_json::Value::Bool(value) => Some(Cow::Owned(Value::Boolean(value))), _ => None, } } impl Source for Content { - fn get(&self, key: &str) -> Option<Value> { + fn get<'a>(&self, key: &str) -> Option<Cow<'a, Value>> { // TODO: Key segment iteration is not something that should be here directly let key_delim = '.'; let key_segments = key.split(key_delim); diff --git a/src/file/nil.rs b/src/file/nil.rs index c9e799a..f494af4 100644 --- a/src/file/nil.rs +++ b/src/file/nil.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use source::Source; use value::Value; @@ -5,7 +7,7 @@ use value::Value; pub struct Nil {} impl Source for Nil { - fn get(&self, _: &str) -> Option<Value> { + fn get<'a>(&self, _: &str) -> Option<Cow<'a, Value>> { None } } diff --git a/src/file/toml.rs b/src/file/toml.rs index 2fd5bd3..b2a8fe8 100644 --- a/src/file/toml.rs +++ b/src/file/toml.rs @@ -20,19 +20,19 @@ impl Content { } } -fn from_toml_value(value: &toml::Value) -> Option<Value> { +fn from_toml_value<'a>(value: &toml::Value) -> Option<Cow<'a, Value>> { match *value { - toml::Value::String(ref value) => Some(Value::String(Cow::Borrowed(value))), - toml::Value::Float(value) => Some(Value::Float(value)), - toml::Value::Integer(value) => Some(Value::Integer(value)), - toml::Value::Boolean(value) => Some(Value::Boolean(value)), + toml::Value::String(ref value) => Some(Cow::Owned(Value::String(Cow::Borrowed(value)))), + toml::Value::Float(value) => Some(Cow::Owned(Value::Float(value))), + toml::Value::Integer(value) => Some(Cow::Owned(Value::Integer(value))), + toml::Value::Boolean(value) => Some(Cow::Owned(Value::Boolean(value))), _ => None, } } impl Source for Content { - fn get(&self, key: &str) -> Option<Value> { + fn get<'a>(&self, key: &str) -> Option<Cow<'a, Value>> { // TODO: Key segment iteration is not something that should be here directly let key_delim = '.'; let key_segments = key.split(key_delim); |