summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-01-12 16:55:28 +0100
committerMatthias Beyer <mail@beyermatthias.de>2018-01-12 17:30:01 +0100
commit686857beff6051ec35d6c9761d8b094c28c407d8 (patch)
treed43c9c60840ef53abac19582e7f2c4acbb9b57bb
parent1cb118b38a8596d903f972528a9e8406ad495183 (diff)
Change API: The typed read API still returns Result<Option<_>>
-rw-r--r--src/read.rs32
1 files changed, 12 insertions, 20 deletions
diff --git a/src/read.rs b/src/read.rs
index 71a3bae..df0187f 100644
--- a/src/read.rs
+++ b/src/read.rs
@@ -44,19 +44,19 @@ impl<'doc> TomlValueReadExt<'doc> for Value {
}
pub trait TomlValueReadTypeExt<'doc> : TomlValueReadExt<'doc> {
- fn read_string(&'doc self, query: &str) -> Result<String>;
- fn read_int(&'doc self, query: &str) -> Result<i64>;
- fn read_float(&'doc self, query: &str) -> Result<f64>;
- fn read_bool(&'doc self, query: &str) -> Result<bool>;
+ fn read_string(&'doc self, query: &str) -> Result<Option<String>>;
+ fn read_int(&'doc self, query: &str) -> Result<Option<i64>>;
+ fn read_float(&'doc self, query: &str) -> Result<Option<f64>>;
+ fn read_bool(&'doc self, query: &str) -> Result<Option<bool>>;
}
macro_rules! make_type_getter {
($fnname:ident, $rettype:ty, $typename:expr, $matcher:pat => $implementation:expr) => {
- fn $fnname(&'doc self, query: &str) -> Result<$rettype> {
+ fn $fnname(&'doc self, query: &str) -> Result<Option<$rettype>> {
self.read_with_seperator(query, '.').and_then(|o| match o {
- $matcher => $implementation,
+ $matcher => Ok(Some($implementation)),
Some(o) => Err(ErrorKind::TypeError($typename, ::util::name_of_val(&o)).into()),
- None => Err(ErrorKind::NotAvailable(String::from(query)).into()),
+ None => Ok(None),
})
}
};
@@ -65,17 +65,10 @@ macro_rules! make_type_getter {
impl<'doc, T> TomlValueReadTypeExt<'doc> for T
where T: TomlValueReadExt<'doc>
{
- make_type_getter!(read_string, String, "String",
- Some(&Value::String(ref obj)) => Ok(obj.clone()));
-
- make_type_getter!(read_int, i64, "Integer",
- Some(&Value::Integer(obj)) => Ok(obj));
-
- make_type_getter!(read_float, f64, "Float",
- Some(&Value::Float(obj)) => Ok(obj));
-
- make_type_getter!(read_bool, bool, "Boolean",
- Some(&Value::Boolean(obj)) => Ok(obj));
+ make_type_getter!(read_string, String, "String", Some(&Value::String(ref obj)) => obj.clone());
+ make_type_getter!(read_int, i64, "Integer", Some(&Value::Integer(obj)) => obj);
+ make_type_getter!(read_float, f64, "Float", Some(&Value::Float(obj)) => obj);
+ make_type_getter!(read_bool, bool, "Boolean", Some(&Value::Boolean(obj)) => obj);
}
#[cfg(test)]
@@ -256,9 +249,8 @@ mod high_level_fn_test {
a = 1
"#).unwrap();
- let val = toml.read_int(&String::from("table.a"));
+ let val = toml.read_int("table.a").unwrap();
- assert!(val.is_ok());
assert_eq!(val.unwrap(), 1);
}