diff options
Diffstat (limited to 'src/abconfig.rs')
-rw-r--r-- | src/abconfig.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/abconfig.rs b/src/abconfig.rs index 294467a..c8af6c5 100644 --- a/src/abconfig.rs +++ b/src/abconfig.rs @@ -16,19 +16,55 @@ use crate::{client::Client, error::Error}; use serde::Deserialize; +use std::collections::HashMap; +use std::iter::FromIterator; +/// A struct for storing a key value pair with a category in +/// relation to a contact. Typically used to store permissions +/// a given contact has on a given channel. #[derive(Debug, Deserialize)] pub struct ABConfig { + /// Database ID for this entry pub id: u32, + + /// Channel pub chan: u32, + + /// Unique identifier for the related contact pub xchan: String, + + /// Category pub cat: String, + + /// Key pub k: String, + + /// Value pub v: String, } +/// Fetch ABConfig for all contacts pub fn fetch(client: &Client) -> Result<Vec<ABConfig>, Error> { let payload = client.fetch_stream("abconfig", &())?; Ok(serde_json::from_str(&payload)?) } +#[derive(Default)] +pub struct ABConfigRequest { + abook_id: u32, +} + +impl ABConfigRequest { + pub fn fetch(&self, client: &Client) -> Result<Vec<ABConfig>, Error> { + let data: HashMap<&str, String> = HashMap::from_iter(vec![("abook_id", self.abook_id.to_string())]); + let body = client.fetch_stream("abconfig", &data)?; + Ok(serde_json::from_str(&body)?) + } +} + +/// Fetch ABConfig for a given contact +/// +/// `abook` is the abook id of the given contact +pub fn with_abook_id(abook: u32) -> ABConfigRequest { + ABConfigRequest { abook_id: abook } +} |