// 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; #[derive(Debug, Default, Deserialize)] pub struct Abook { #[serde(rename = "abook_id")] id: u32, #[serde(rename = "abook_account")] account: u32, #[serde(rename = "abook_channel")] channel: u32, #[serde(rename = "abook_xchan")] xchan: String, #[serde(rename = "abook_my_perms")] my_perms: u16, #[serde(rename = "abook_their_perms")] their_perms: u16, // Closeness is a number between 0 and 99, but is somehow // returned as a string. #[serde(rename = "abook_closeness")] closeness: String, #[serde(rename = "abook_created")] created: String, #[serde(rename = "abook_updated")] updated: String, #[serde(rename = "abook_connected")] connected: String, #[serde(rename = "abook_dob")] dob: String, #[serde(rename = "abook_flags")] flags: u16, // No longer used #[serde(rename = "abook_profile")] profile: String, #[serde(rename = "abook_blocked")] blocked: u8, #[serde(rename = "abook_ignored")] ignored: u8, #[serde(rename = "abook_hidden")] hidden: u8, #[serde(rename = "abook_archived")] archived: u8, #[serde(rename = "abook_pending")] pending: u8, #[serde(rename = "abook_unconnected")] unconnected: u8, // Currently unused #[serde(rename = "abook_self")] myself: u8, // original name `self` #[serde(rename = "abook_feed")] feed: u8, #[serde(rename = "abook_incl")] incl: String, #[serde(rename = "abook_excl")] excl: String, #[serde(rename = "abook_instance")] instance: String, } impl Abook { pub fn z() -> AbookRequest { AbookRequest::default() } } #[derive(Debug, Default)] pub struct AbookRequest { abook_id: Option, } impl AbookRequest { /// 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) -> AbookRequest { self.abook_id = Some(abook); self } pub async fn fetch(&self, client: &Client) -> Result, Error> { let mut req = client.get("abook"); 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?)?) } }