open_lark/service/contact/v3/
scope.rs1use crate::core::{
2 api_req::ApiRequest, api_resp::ApiResponseTrait, config::Config, constants::AccessTokenType,
3 http::Transport, trait_system::Service,
4};
5use serde::{Deserialize, Serialize};
6
7pub struct ScopeService {
13 config: Config,
14}
15
16impl ScopeService {
17 pub fn new(config: Config) -> Self {
18 Self { config }
19 }
20
21 pub async fn list(&self, _req: &GetScopeRequest) -> crate::core::SDKResult<GetScopeResponse> {
23 let api_req = ApiRequest {
24 http_method: reqwest::Method::GET,
25 api_path: crate::core::endpoints::contact::CONTACT_V3_SCOPES.to_string(),
26 supported_access_token_types: vec![AccessTokenType::Tenant],
27 body: Vec::new(),
28 query_params: std::collections::HashMap::new(),
29 ..Default::default()
30 };
31
32 let resp = Transport::<GetScopeResponse>::request(api_req, &self.config, None).await?;
33 Ok(resp.data.unwrap_or_default())
34 }
35}
36
37impl Service for ScopeService {
38 fn config(&self) -> &Config {
39 &self.config
40 }
41
42 fn service_name() -> &'static str {
43 "scope"
44 }
45
46 fn service_version() -> &'static str {
47 "v3"
48 }
49}
50
51#[derive(Debug, Clone, Default, Serialize, Deserialize)]
53pub struct GetScopeRequest {
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub user_id_type: Option<String>,
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub department_id_type: Option<String>,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub page_size: Option<i32>,
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub page_token: Option<String>,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize, Default)]
70pub struct GetScopeResponse {
71 pub scopes: Vec<Scope>,
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub has_more: Option<bool>,
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub page_token: Option<String>,
79}
80
81impl ApiResponseTrait for GetScopeResponse {
82 fn data_format() -> crate::core::api_resp::ResponseFormat {
83 crate::core::api_resp::ResponseFormat::Data
84 }
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct Scope {
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub departments: Option<Vec<ScopeDepartment>>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub users: Option<Vec<ScopeUser>>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub groups: Option<Vec<ScopeGroup>>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
103pub struct ScopeDepartment {
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub department_id: Option<String>,
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub name: Option<String>,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
114pub struct ScopeUser {
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub user_id: Option<String>,
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub name: Option<String>,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct ScopeGroup {
126 #[serde(skip_serializing_if = "Option::is_none")]
128 pub group_id: Option<String>,
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub name: Option<String>,
132}