aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2018-09-23 19:08:06 +0200
committerHarald Eilertsen <haraldei@anduin.net>2018-09-23 19:38:50 +0200
commitf50dfd5045170e1435270e6de3a03a74807ee392 (patch)
tree3a4a4185cecf54186f7c549243e16f5d5cfe7705
parent5b740a7a2a50f049619797c9e4fcd7815fea259e (diff)
downloadrust-zotapi-f50dfd5045170e1435270e6de3a03a74807ee392.tar.gz
rust-zotapi-f50dfd5045170e1435270e6de3a03a74807ee392.tar.bz2
rust-zotapi-f50dfd5045170e1435270e6de3a03a74807ee392.zip
Begin implementaton of undocumented abook api to fetch connections.
-rw-r--r--src/abook.rs34
-rw-r--r--src/client.rs6
-rw-r--r--src/lib.rs1
-rw-r--r--tests/zotapi.rs14
4 files changed, 55 insertions, 0 deletions
diff --git a/src/abook.rs b/src/abook.rs
new file mode 100644
index 0000000..663446f
--- /dev/null
+++ b/src/abook.rs
@@ -0,0 +1,34 @@
+// zotapi - Rust wrapper for the Zot API as implemented by Hubzilla
+// Copyright (C) 2018 Harald Eilertsen <haraldei@anduin.net>
+//
+// 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 <https://www.gnu.org/licenses/>.
+
+use client::{self, Client};
+use error::Error;
+
+pub struct AbookFetcher<'a> {
+ client: &'a Client,
+}
+
+impl<'a> AbookFetcher<'a> {
+ pub fn new(client: &'a Client) -> AbookFetcher<'a> {
+ AbookFetcher {
+ client,
+ }
+ }
+
+ pub fn fetch(&self) -> Result<String, Error> {
+ self.client.fetch_stream(client::ZOTAPI_ABOOK_PATH, &())
+ }
+}
diff --git a/src/client.rs b/src/client.rs
index 098c0ac..f181e65 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -24,8 +24,10 @@ use reqwest::{
use serde::Serialize;
use serde_urlencoded;
use std::io::Read;
+use abook::AbookFetcher;
use xchan::XChanFetcher;
+pub const ZOTAPI_ABOOK_PATH : &str = "/api/z/1.0/abook";
pub const ZOTAPI_CHANNEL_STREAM_PATH : &str = "/api/z/1.0/channel/stream";
pub const ZOTAPI_NETWORK_STREAM_PATH : &str = "/api/z/1.0/network/stream";
pub const ZOTAPI_ITEM_UPDATE_PATH : &str = "/api/z/1.0/item/update";
@@ -48,6 +50,10 @@ impl Client {
}
}
+ pub fn abook(&self) -> AbookFetcher {
+ AbookFetcher::new(self)
+ }
+
pub fn channel_stream(&self) -> Result<String, Error> {
self.fetch_stream(ZOTAPI_CHANNEL_STREAM_PATH, &())
}
diff --git a/src/lib.rs b/src/lib.rs
index a51fc97..176f780 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -18,6 +18,7 @@ extern crate reqwest;
extern crate serde;
extern crate serde_urlencoded;
+mod abook;
mod client;
mod error;
mod item;
diff --git a/tests/zotapi.rs b/tests/zotapi.rs
index 81210db..269e8d7 100644
--- a/tests/zotapi.rs
+++ b/tests/zotapi.rs
@@ -142,3 +142,17 @@ fn fetch_xchan_by_guid() {
let _res = z.xchan().by_guid("baffebaff-baff-baff").fetch().unwrap();
m.assert();
}
+
+#[test]
+fn fetch_connections() {
+ let m = mock("GET", "/api/z/1.0/abook")
+ .match_header("Authorization", Matcher::Regex(r"Basic \w+".into()))
+ .with_status(200)
+ .with_header("content-type", "application/json")
+ .with_body("{}")
+ .create();
+
+ let z = zotapi::client(&format!("http://{}", mockito::SERVER_ADDRESS), "testuser", "test1234");
+ let _res = z.abook().fetch().unwrap();
+ m.assert();
+}