summaryrefslogtreecommitdiffstats
path: root/src/value_ext.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/value_ext.rs')
-rw-r--r--src/value_ext.rs23
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()))
+ }
+}