// 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::{self, Client}, error::Error, }; use serde::{Serialize, Serializer}; pub struct GroupFetcher<'a> { client: &'a Client, } impl<'a> GroupFetcher<'a> { pub fn new(client: &'a Client) -> GroupFetcher<'a> { GroupFetcher { client } } pub fn fetch(&self) -> Result { self.client.fetch_stream(client::ZOTAPI_GROUP_PATH, &()) } } enum GroupSelector<'a> { Id(u64), Name(&'a str), } impl<'a> Serialize for GroupSelector<'a> { fn serialize(&self, serializer: S) -> Result where S: Serializer, { match *self { GroupSelector::Id(id) => [("group_id", id)].serialize(serializer), GroupSelector::Name(n) => [("group_name", n)].serialize(serializer), } } } pub struct GroupMembersFetcher<'a> { client: &'a Client, id: Option>, } impl<'a> GroupMembersFetcher<'a> { pub fn new(client: &'a Client) -> GroupMembersFetcher<'a> { GroupMembersFetcher { client, id: None } } pub fn by_group_id(&mut self, id: u64) -> &GroupMembersFetcher<'a> { self.id = Some(GroupSelector::Id(id)); self } pub fn by_group_name(&mut self, name: &'a str) -> &GroupMembersFetcher<'a> { self.id = Some(GroupSelector::Name(name)); self } pub fn fetch(&self) -> Result { self.client.fetch_stream( client::ZOTAPI_GROUP_MEMBERS_PATH, &self.id.as_ref().unwrap()) } }