Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
31 changes: 31 additions & 0 deletions src/api/relations.rs
Original file line number Diff line number Diff line change
@@ -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<reqwest::Client> {
pub async fn get_following(
&self,
request: impl Into<following::GetRequest>,
) -> Result<impl StreamExt<Item = Result<UserExtended>>> {
self.get_streamed_models(request.into()).await
}

pub async fn follow_user(&self, request: impl Into<follow::PostRequest>) -> Result<bool> {
self.get_ok(request.into()).await
}

pub async fn unfollow_user(&self, request: impl Into<unfollow::PostRequest>) -> Result<bool> {
self.get_ok(request.into()).await
}

pub async fn block_user(&self, request: impl Into<block::PostRequest>) -> Result<bool> {
self.get_ok(request.into()).await
}

pub async fn unblock_user(&self, request: impl Into<unblock::PostRequest>) -> Result<bool> {
self.get_ok(request.into()).await
}
}
1 change: 1 addition & 0 deletions src/model/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
18 changes: 18 additions & 0 deletions src/model/relations/block.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use serde::Serialize;

#[derive(Default, Clone, Debug, Serialize)]
pub struct PostQuery;

pub type PostRequest = crate::model::Request<PostQuery>;

impl PostRequest {
pub fn new(username: &str) -> Self {
Self::post(format!("/api/rel/block/{username}"), None, None, None)
}
}

impl<S: AsRef<str>> From<S> for PostRequest {
fn from(username: S) -> Self {
Self::new(username.as_ref())
}
}
18 changes: 18 additions & 0 deletions src/model/relations/follow.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use serde::Serialize;

#[derive(Default, Clone, Debug, Serialize)]
pub struct PostQuery;

pub type PostRequest = crate::model::Request<PostQuery>;

impl PostRequest {
pub fn new(username: &str) -> Self {
Self::post(format!("/api/rel/follow/{username}"), None, None, None)
}
}

impl<S: AsRef<str>> From<S> for PostRequest {
fn from(username: S) -> Self {
Self::new(username.as_ref())
}
}
18 changes: 18 additions & 0 deletions src/model/relations/following.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use serde::Serialize;

#[derive(Default, Clone, Debug, Serialize)]
pub struct GetQuery;

pub type GetRequest = crate::model::Request<GetQuery>;

impl GetRequest {
pub fn new() -> Self {
Self::get("/api/rel/following", None, None)
}
}

impl Default for GetRequest {
fn default() -> Self {
Self::new()
}
}
5 changes: 5 additions & 0 deletions src/model/relations/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pub mod block;
pub mod follow;
pub mod following;
pub mod unblock;
pub mod unfollow;
18 changes: 18 additions & 0 deletions src/model/relations/unblock.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use serde::Serialize;

#[derive(Default, Clone, Debug, Serialize)]
pub struct PostQuery;

pub type PostRequest = crate::model::Request<PostQuery>;

impl PostRequest {
pub fn new(username: &str) -> Self {
Self::post(format!("/api/rel/unblock/{username}"), None, None, None)
}
}

impl<S: AsRef<str>> From<S> for PostRequest {
fn from(username: S) -> Self {
Self::new(username.as_ref())
}
}
18 changes: 18 additions & 0 deletions src/model/relations/unfollow.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use serde::Serialize;

#[derive(Default, Clone, Debug, Serialize)]
pub struct PostQuery;

pub type PostRequest = crate::model::Request<PostQuery>;

impl PostRequest {
pub fn new(username: &str) -> Self {
Self::post(format!("/api/rel/unfollow/{username}"), None, None, None)
}
}

impl<S: AsRef<str>> From<S> for PostRequest {
fn from(username: S) -> Self {
Self::new(username.as_ref())
}
}