files_sdk/users/
sso_strategies.rs1use crate::{Result, client::FilesClient, types::PaginationInfo};
2use serde::{Deserialize, Serialize};
3use serde_json::json;
4
5#[derive(Debug, Serialize, Deserialize, Clone)]
6pub struct SsoStrategyEntity {
7 #[serde(flatten)]
8 pub data: serde_json::Map<String, serde_json::Value>,
9}
10
11pub struct SsoStrategyHandler {
12 client: FilesClient,
13}
14
15impl SsoStrategyHandler {
16 pub fn new(client: FilesClient) -> Self {
17 Self { client }
18 }
19
20 pub async fn list(
21 &self,
22 cursor: Option<String>,
23 per_page: Option<i64>,
24 ) -> Result<(Vec<SsoStrategyEntity>, PaginationInfo)> {
25 let mut endpoint = "/sso_strategies".to_string();
26 let mut query_params = Vec::new();
27
28 if let Some(cursor) = cursor {
29 query_params.push(format!("cursor={}", cursor));
30 }
31
32 if let Some(per_page) = per_page {
33 query_params.push(format!("per_page={}", per_page));
34 }
35
36 if !query_params.is_empty() {
37 endpoint.push('?');
38 endpoint.push_str(&query_params.join("&"));
39 }
40
41 let url = format!("{}{}", self.client.inner.base_url, endpoint);
42 let response = reqwest::Client::new()
43 .get(&url)
44 .header("X-FilesAPI-Key", &self.client.inner.api_key)
45 .send()
46 .await?;
47
48 let headers = response.headers().clone();
49 let pagination = PaginationInfo::from_headers(&headers);
50
51 let status = response.status();
52 if !status.is_success() {
53 return Err(crate::FilesError::ApiError {
54 endpoint: None,
55 code: status.as_u16(),
56 message: response.text().await.unwrap_or_default(),
57 });
58 }
59
60 let entities: Vec<SsoStrategyEntity> = response.json().await?;
61 Ok((entities, pagination))
62 }
63
64 pub async fn get(&self, id: i64) -> Result<SsoStrategyEntity> {
65 let endpoint = format!("/sso_strategies/{}", id);
66 let response = self.client.get_raw(&endpoint).await?;
67 Ok(serde_json::from_value(response)?)
68 }
69
70 pub async fn sync(&self, id: i64) -> Result<()> {
71 let endpoint = format!("/sso_strategies/{}/sync", id);
72 self.client.post_raw(&endpoint, json!({})).await?;
73 Ok(())
74 }
75}