diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2018-01-12 16:55:28 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2018-01-12 17:30:01 +0100 |
commit | 686857beff6051ec35d6c9761d8b094c28c407d8 (patch) | |
tree | d43c9c60840ef53abac19582e7f2c4acbb9b57bb | |
parent | 1cb118b38a8596d903f972528a9e8406ad495183 (diff) |
Change API: The typed read API still returns Result<Option<_>>
-rw-r--r-- | src/read.rs | 32 |
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); } |