Skip to main content

farcaster_rs/follows/
follow_user.rs

1use crate::constants::merkle::API_ROOT;
2use crate::types::follows::follow_user::FollowUserRoot;
3use crate::Farcaster;
4use serde_json::{json, Value};
5use std::error::Error;
6
7impl Farcaster {
8    /// Get a users followers via their FID
9    ///
10    /// # Params
11    /// fid: i64
12    ///
13    /// # Example
14    /// ```no_run
15    /// let follow = farcaster.follow_user_by_fid(0).await?;
16    /// ```
17    pub async fn follow_user_by_fid(&self, fid: i64) -> Result<FollowUserRoot, Box<dyn Error>> {
18        let payload: Value = json!({ "targetFid": fid });
19
20        let follow_reqwest = reqwest::Client::new()
21            .put(format!("{}/v2/follows", API_ROOT))
22            .header("Content-Type", "application/json")
23            .header(
24                "Authorization",
25                &self.account.session_token.as_ref().unwrap().secret,
26            )
27            .json(&payload)
28            .send()
29            .await?
30            .text()
31            .await?;
32
33        let follow: FollowUserRoot = serde_json::from_str(&follow_reqwest)?;
34
35        Ok(follow)
36    }
37
38    /// Get a users followers via their username
39    ///
40    /// # Params
41    /// username: &str
42    ///
43    /// # Example
44    /// ```no_run
45    /// let follow = farcaster.follow_user_by_username("abc").await?;
46    /// ```
47    pub async fn follow_user_by_username(
48        &self,
49        username: &str,
50    ) -> Result<FollowUserRoot, Box<dyn Error>> {
51        let fid = &self.get_user_by_username(username).await?;
52
53        let follow = &self.follow_user_by_fid(fid.fid).await?;
54
55        Ok(follow.clone())
56    }
57
58    /// Get a users followers via their address
59    ///
60    /// # Params
61    /// address: &str
62    ///
63    /// # Example
64    /// ```no_run
65    /// let follow = farcaster.follow_user_by_address("0x000....").await?;
66    /// ```
67    pub async fn follow_user_by_address(
68        &self,
69        address: &str,
70    ) -> Result<FollowUserRoot, Box<dyn Error>> {
71        let fid = &self.get_user_by_address(address).await?;
72
73        let follow = &self.follow_user_by_fid(fid.fid).await?;
74
75        Ok(follow.clone())
76    }
77}