diff options
Diffstat (limited to 'src/value_ext.rs')
-rw-r--r-- | src/value_ext.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/value_ext.rs b/src/value_ext.rs new file mode 100644 index 0000000..71b4175 --- /dev/null +++ b/src/value_ext.rs @@ -0,0 +1,23 @@ +use crate::error::{Error, Result}; +use serde_json::Value; + +/// Some extensions for serde_json::Value to be used as TDLib object +pub trait ValueExt { + /// get @type from json + fn get_type<'a>(&'a self) -> Result<&'a str>; + + /// get @extra from json + fn get_extra<'a>(&'a self) -> Result<&'a str>; +} + +impl ValueExt for Value { + fn get_type<'a>(&'a self) -> Result<&'a str> { + self["@type"].as_str().ok_or(Error::HasNoTypeInJson) + } + + fn get_extra<'a>(&'a self) -> Result<&'a str> { + self["@extra"] + .as_str() + .ok_or_else(|| Error::InvalidJson("no @extra in json".into())) + } +} |