From 861164996b038c402476e4b56c9bd993a42280a5 Mon Sep 17 00:00:00 2001 From: Arran Ireland Date: Sat, 22 Mar 2025 20:42:33 +0000 Subject: [PATCH] relations: add support for all endpoints --- src/api/mod.rs | 1 + src/api/relations.rs | 31 +++++++++++++++++++++++++++++++ src/model/mod.rs | 1 + src/model/relations/block.rs | 18 ++++++++++++++++++ src/model/relations/follow.rs | 18 ++++++++++++++++++ src/model/relations/following.rs | 18 ++++++++++++++++++ src/model/relations/mod.rs | 5 +++++ src/model/relations/unblock.rs | 18 ++++++++++++++++++ src/model/relations/unfollow.rs | 18 ++++++++++++++++++ 9 files changed, 128 insertions(+) create mode 100644 src/api/relations.rs create mode 100644 src/model/relations/block.rs create mode 100644 src/model/relations/follow.rs create mode 100644 src/model/relations/following.rs create mode 100644 src/model/relations/mod.rs create mode 100644 src/model/relations/unblock.rs create mode 100644 src/model/relations/unfollow.rs diff --git a/src/api/mod.rs b/src/api/mod.rs index 0d9394a..4ac6a70 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -9,6 +9,7 @@ pub mod games; pub mod messaging; pub mod openings; pub mod puzzles; +pub mod relations; pub mod simuls; pub mod studies; pub mod tablebase; diff --git a/src/api/relations.rs b/src/api/relations.rs new file mode 100644 index 0000000..ffcbefb --- /dev/null +++ b/src/api/relations.rs @@ -0,0 +1,31 @@ +use async_std::stream::StreamExt; + +use crate::client::LichessApi; +use crate::error::Result; +use crate::model::relations::*; +use crate::model::users::UserExtended; + +impl LichessApi { + pub async fn get_following( + &self, + request: impl Into, + ) -> Result>> { + self.get_streamed_models(request.into()).await + } + + pub async fn follow_user(&self, request: impl Into) -> Result { + self.get_ok(request.into()).await + } + + pub async fn unfollow_user(&self, request: impl Into) -> Result { + self.get_ok(request.into()).await + } + + pub async fn block_user(&self, request: impl Into) -> Result { + self.get_ok(request.into()).await + } + + pub async fn unblock_user(&self, request: impl Into) -> Result { + self.get_ok(request.into()).await + } +} diff --git a/src/model/mod.rs b/src/model/mod.rs index 279df79..1a45de3 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -9,6 +9,7 @@ pub mod games; pub mod messaging; pub mod openings; pub mod puzzles; +pub mod relations; pub mod simuls; pub mod studies; pub mod tablebase; diff --git a/src/model/relations/block.rs b/src/model/relations/block.rs new file mode 100644 index 0000000..f9f5d0b --- /dev/null +++ b/src/model/relations/block.rs @@ -0,0 +1,18 @@ +use serde::Serialize; + +#[derive(Default, Clone, Debug, Serialize)] +pub struct PostQuery; + +pub type PostRequest = crate::model::Request; + +impl PostRequest { + pub fn new(username: &str) -> Self { + Self::post(format!("/api/rel/block/{username}"), None, None, None) + } +} + +impl> From for PostRequest { + fn from(username: S) -> Self { + Self::new(username.as_ref()) + } +} diff --git a/src/model/relations/follow.rs b/src/model/relations/follow.rs new file mode 100644 index 0000000..e4cc3b6 --- /dev/null +++ b/src/model/relations/follow.rs @@ -0,0 +1,18 @@ +use serde::Serialize; + +#[derive(Default, Clone, Debug, Serialize)] +pub struct PostQuery; + +pub type PostRequest = crate::model::Request; + +impl PostRequest { + pub fn new(username: &str) -> Self { + Self::post(format!("/api/rel/follow/{username}"), None, None, None) + } +} + +impl> From for PostRequest { + fn from(username: S) -> Self { + Self::new(username.as_ref()) + } +} diff --git a/src/model/relations/following.rs b/src/model/relations/following.rs new file mode 100644 index 0000000..40fc4a8 --- /dev/null +++ b/src/model/relations/following.rs @@ -0,0 +1,18 @@ +use serde::Serialize; + +#[derive(Default, Clone, Debug, Serialize)] +pub struct GetQuery; + +pub type GetRequest = crate::model::Request; + +impl GetRequest { + pub fn new() -> Self { + Self::get("/api/rel/following", None, None) + } +} + +impl Default for GetRequest { + fn default() -> Self { + Self::new() + } +} diff --git a/src/model/relations/mod.rs b/src/model/relations/mod.rs new file mode 100644 index 0000000..d98bcf5 --- /dev/null +++ b/src/model/relations/mod.rs @@ -0,0 +1,5 @@ +pub mod block; +pub mod follow; +pub mod following; +pub mod unblock; +pub mod unfollow; diff --git a/src/model/relations/unblock.rs b/src/model/relations/unblock.rs new file mode 100644 index 0000000..d71febe --- /dev/null +++ b/src/model/relations/unblock.rs @@ -0,0 +1,18 @@ +use serde::Serialize; + +#[derive(Default, Clone, Debug, Serialize)] +pub struct PostQuery; + +pub type PostRequest = crate::model::Request; + +impl PostRequest { + pub fn new(username: &str) -> Self { + Self::post(format!("/api/rel/unblock/{username}"), None, None, None) + } +} + +impl> From for PostRequest { + fn from(username: S) -> Self { + Self::new(username.as_ref()) + } +} diff --git a/src/model/relations/unfollow.rs b/src/model/relations/unfollow.rs new file mode 100644 index 0000000..85fdaff --- /dev/null +++ b/src/model/relations/unfollow.rs @@ -0,0 +1,18 @@ +use serde::Serialize; + +#[derive(Default, Clone, Debug, Serialize)] +pub struct PostQuery; + +pub type PostRequest = crate::model::Request; + +impl PostRequest { + pub fn new(username: &str) -> Self { + Self::post(format!("/api/rel/unfollow/{username}"), None, None, None) + } +} + +impl> From for PostRequest { + fn from(username: S) -> Self { + Self::new(username.as_ref()) + } +}