1use crate::{Result, client::FilesClient};
2use serde::{Deserialize, Serialize};
3use serde_json::json;
4
5#[derive(Debug, Serialize, Deserialize, Clone)]
6pub struct UserEntity {
7 #[serde(flatten)]
8 pub data: serde_json::Map<String, serde_json::Value>,
9}
10
11pub struct CurrentUserHandler {
12 client: FilesClient,
13}
14
15impl CurrentUserHandler {
16 pub fn new(client: FilesClient) -> Self {
17 Self { client }
18 }
19
20 pub async fn get_current(&self) -> Result<UserEntity> {
21 let response = self.client.get_raw("/user").await?;
22 Ok(serde_json::from_value(response)?)
23 }
24
25 pub async fn update(&self, params: serde_json::Value) -> Result<UserEntity> {
26 let response = self.client.patch_raw("/user", params).await?;
27 Ok(serde_json::from_value(response)?)
28 }
29
30 pub async fn unlock(&self, id: i64) -> Result<()> {
31 let endpoint = format!("/users/{}/unlock", id);
32 self.client.post_raw(&endpoint, json!({})).await?;
33 Ok(())
34 }
35
36 pub async fn resend_verification(&self, id: i64) -> Result<()> {
37 let endpoint = format!("/users/{}/resend_verification_email", id);
38 self.client.post_raw(&endpoint, json!({})).await?;
39 Ok(())
40 }
41
42 pub async fn get_2fa_status(&self, id: i64) -> Result<UserEntity> {
43 let endpoint = format!("/users/{}/2fa", id);
44 let response = self.client.get_raw(&endpoint).await?;
45 Ok(serde_json::from_value(response)?)
46 }
47
48 pub async fn update_2fa(&self, id: i64, params: serde_json::Value) -> Result<UserEntity> {
49 let endpoint = format!("/users/{}/2fa", id);
50 let response = self.client.patch_raw(&endpoint, params).await?;
51 Ok(serde_json::from_value(response)?)
52 }
53}