// 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; /// 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, Default, 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, } impl ABConfig { pub fn z() -> ABConfigRequest { ABConfigRequest::default() } } #[derive(Default)] pub struct ABConfigRequest { abook_id: Option, } impl ABConfigRequest { /// Limit to ABConfigs for a given contact /// /// `abook` is the abook id of the given contact pub fn with_abook_id(mut self, abook: u32) -> ABConfigRequest { self.abook_id = Some(abook); self } pub async fn fetch(&self, client: &Client) -> Result, Error> { let mut req = client.get("abconfig"); if let Some(id) = self.abook_id { req = req.query(&[("abook_id", id.to_string())]); } Ok(serde_json::from_str(&req.send().await?.text().await?)?) } }