// zotapi - Rust wrapper for Sot 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::Serialize; pub struct Group; pub fn group() -> Group { Group {} } impl Group { pub async fn fetch(&self, client: &Client) -> Result { client.fetch_stream("group", &()).await } } #[derive(Debug, Serialize)] enum GroupSelector<'a> { #[serde(rename(serialize = "group_id"))] Id(u64), #[serde(rename(serialize = "group_name"))] Name(&'a str), } pub struct GroupMembers<'a> { id: Option>, } pub fn group_members<'a>() -> GroupMembers<'a> { GroupMembers { id: None } } impl<'a> GroupMembers<'a> { pub fn by_group_id(&mut self, id: u64) -> &GroupMembers<'a> { self.id = Some(GroupSelector::Id(id)); self } pub fn by_group_name(&mut self, name: &'a str) -> &GroupMembers<'a> { self.id = Some(GroupSelector::Name(name)); self } pub async fn fetch(&self, client: &Client) -> Result { client.fetch_stream("group_members", &self.id.as_ref().unwrap()).await } }