// 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, Serializer}; use serde::Serialize; #[derive(Debug, Serialize)] #[serde(rename_all = "lowercase")] enum XChanSelector<'a> { Address(&'a str), Hash(&'a str), GUID(&'a str), } pub struct XChan<'a> { data: Option>, } pub fn xchan<'a>() -> XChan<'a> { XChan { data: None } } impl<'a> XChan<'a> { pub fn by_address(&mut self, addr: &'a str) -> &mut XChan<'a> { self.data = Some(XChanSelector::Address(addr)); self } pub fn by_hash(&mut self, hash: &'a str) -> &mut XChan<'a> { self.data = Some(XChanSelector::Hash(hash)); self } pub fn by_guid(&mut self, guid: &'a str) -> &mut XChan<'a> { self.data = Some(XChanSelector::GUID(guid)); self } pub fn fetch(&self, client: &Client) -> Result { client.fetch_stream("xchan", &self.data.as_ref().unwrap()) } }