Skip to main content

gitee_rs/users/
mod.rs

1use crate::{error::GiteeError, GiteeClient};
2use reqwest::Method;
3use serde_json::Value;
4
5mod models;
6pub use models::*;
7
8impl GiteeClient {
9    /// Get authenticated user information (current user)
10    pub async fn get_authenticated_user(&self) -> Result<User, GiteeError> {
11        let url = format!("{}/user", self.base_url());
12        let response = self
13            .client()
14            .request(Method::GET, &url)
15            .header("Authorization", self.auth_header())
16            .send()
17            .await?;
18
19        if !response.status().is_success() {
20            return Err(GiteeError::ApiError(format!(
21                "Failed to get authenticated user info: {}",
22                response.status()
23            )));
24        }
25
26        let user: User = response.json().await?;
27        Ok(user)
28    }
29
30    /// Get user information by username
31    pub async fn get_user_info(&self, username: &str) -> Result<User, GiteeError> {
32        let url = format!("{}/users/{}", self.base_url(), username);
33        let response = self
34            .client()
35            .request(Method::GET, &url)
36            .header("Authorization", self.auth_header())
37            .send()
38            .await?;
39
40        if !response.status().is_success() {
41            return Err(GiteeError::ApiError(format!(
42                "Failed to get user info: {}",
43                response.status()
44            )));
45        }
46
47        let user: User = response.json().await?;
48        Ok(user)
49    }
50
51    /// Search users
52    pub async fn search_users(&self, query: &str) -> Result<Vec<SearchUserResult>, GiteeError> {
53        let url = format!("{}/search/users", self.base_url());
54        let params = [("q", query), ("per_page", "30")];
55
56        let response = self
57            .client()
58            .request(Method::GET, &url)
59            .header("Authorization", self.auth_header())
60            .query(&params)
61            .send()
62            .await?;
63
64        if !response.status().is_success() {
65            return Err(GiteeError::ApiError(format!(
66                "Failed to search users: {}",
67                response.status()
68            )));
69        }
70
71        let body = response.text().await?;
72        let v: Value = serde_json::from_str(&body)?;
73
74        if let Some(items) = v.get("items") {
75            let users: Vec<SearchUserResult> = serde_json::from_value(items.clone())?;
76            Ok(users)
77        } else if v.is_array() {
78            let users: Vec<SearchUserResult> = serde_json::from_value(v.clone())?;
79            Ok(users)
80        } else {
81            Ok(vec![])
82        }
83    }
84}