From a038b6f7da9dfaed634f845197b79c742440e6fd Mon Sep 17 00:00:00 2001 From: Mahesh Bansod Date: Fri, 5 Nov 2021 17:03:06 +0530 Subject: [PATCH] Added methods + cli commands for `network.{get_followers,get_following,follow_peer,unfollow_peer}` --- cli/src/main.rs | 66 +++++++++++++++++++++++++++++++++++++++ client/src/network/mod.rs | 40 ++++++++++++++++++++++++ 2 files changed, 106 insertions(+) diff --git a/cli/src/main.rs b/cli/src/main.rs index 2a44eb9..c8c185a 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -145,6 +145,36 @@ async fn main() { Ok(response) => println!("{:#?}", response), Err(err) => println!("{}", MyFriendlyError::from(err)), }, + SocialVoidCommand::Followers { peer, page } => { + match sv.network.get_followers(peer, page).await { + Ok(peers) => { + println!( + "{}", + peers + .iter() + .map(|peer| format!("{:?}", peer)) + .collect::>() + .join("\n") + ) + } + Err(err) => println!("{}", MyFriendlyError::from(err)), + } + } + SocialVoidCommand::Following { peer, page } => { + match sv.network.get_following(peer, page).await { + Ok(peers) => { + println!( + "{}", + peers + .iter() + .map(|peer| format!("{:?}", peer)) + .collect::>() + .join("\n") + ) + } + Err(err) => println!("{}", MyFriendlyError::from(err)), + } + } SocialVoidCommand::SetProfile { field, value } => match field { ProfileField::Pic => { if let Some(filepath) = value { @@ -185,6 +215,28 @@ async fn main() { } } } + SocialVoidCommand::Follow { peer } => { + match sv.network.follow_peer(peer.clone()).await { + Ok(relationship) => { + println!( + "The relationship type with\n\t`{}`\nis now\n\t{:?}", + peer, relationship + ) + } + Err(err) => println!("{}", MyFriendlyError::from(err)), + } + } + SocialVoidCommand::Unfollow { peer } => { + match sv.network.unfollow_peer(peer.clone()).await { + Ok(relationship) => { + println!( + "The relationship type with\n\t`{}`\nis now\n\t{:?}", + peer, relationship + ) + } + Err(err) => println!("{}", MyFriendlyError::from(err)), + } + } SocialVoidCommand::Sync {} => {} } } @@ -213,6 +265,20 @@ enum SocialVoidCommand { value: Option, }, GetMe, + Followers { + peer: Option, + page: Option, + }, + Following { + peer: Option, + page: Option, + }, + Follow { + peer: String, + }, + Unfollow { + peer: String, + }, SetProfile { #[structopt(subcommand)] field: ProfileField, diff --git a/client/src/network/mod.rs b/client/src/network/mod.rs index a447b0e..7b81c59 100644 --- a/client/src/network/mod.rs +++ b/client/src/network/mod.rs @@ -88,6 +88,46 @@ impl SVNetworkMethods { ) .await } + + /// Get the number of followers of a specific peer or get the number of followers of the authenticated peer if the peer is `None` + /// `page` can be none to return the first page of the result. + pub async fn get_followers( + &self, + peer: Option, + page: Option, + ) -> Result, Error> { + let session_identification = self.session.session_identification()?; + self.client + .send_request( + "network.get_followers", + json!({ + "session_identification": serde_json::to_value(session_identification)?, + "peer":peer, + "page": page, + }), + ) + .await + } + + /// Get the number of peers following a specific peer or get the number of peers following the authenticated peer if the peer is `None` + /// `page` can be none to return the first page of the result. + pub async fn get_following( + &self, + peer: Option, + page: Option, + ) -> Result, Error> { + let session_identification = self.session.session_identification()?; + self.client + .send_request( + "network.get_following", + json!({ + "session_identification": serde_json::to_value(session_identification)?, + "peer":peer, + "page": page, + }), + ) + .await + } } #[cfg(test)]