// zotapi - Rust wrapper for the Zot API as implemented by Hubzilla // Copyright (C) 2018 Harald Eilertsen // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . 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, 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, 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 } }