aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/abook.rs107
-rw-r--r--src/lib.rs2
2 files changed, 103 insertions, 6 deletions
diff --git a/src/abook.rs b/src/abook.rs
index 8423872..59981ba 100644
--- a/src/abook.rs
+++ b/src/abook.rs
@@ -15,15 +15,112 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
use crate::{client::Client, error::Error};
+use serde::Deserialize;
-pub struct Abook;
+#[derive(Debug, Default, Deserialize)]
+pub struct Abook {
+ #[serde(rename = "abook_id")]
+ id: u32,
-pub fn abook() -> Abook {
- Abook {}
+ #[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 fetch(&self, client: &Client) -> Result<String, Error> {
- client.fetch_stream("abook", &())
+ pub fn z() -> AbookRequest {
+ AbookRequest::default()
+ }
+}
+
+#[derive(Debug, Default)]
+pub struct AbookRequest {
+ abook_id: Option<u32>,
+}
+
+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 fn fetch(&self, client: &Client) -> Result<Vec<Abook>, 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()?.text()?)?)
}
}
diff --git a/src/lib.rs b/src/lib.rs
index 1be4c92..c363c8e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -25,7 +25,7 @@ mod network_stream;
mod xchan;
pub use abconfig::ABConfig;
-pub use abook::abook;
+pub use abook::Abook;
pub use channel_stream::channel_stream;
pub use client::*;
pub use error::Error;