openlark_security/models/
mod.rs1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone)]
9pub struct SecurityConfig {
10 pub app_id: String,
12 pub app_secret: String,
14 pub base_url: String,
16}
17
18impl SecurityConfig {
19 pub fn new(app_id: impl Into<String>, app_secret: impl Into<String>) -> Self {
21 Self {
22 app_id: app_id.into(),
23 app_secret: app_secret.into(),
24 base_url: "https://open.feishu.cn".to_string(),
25 }
26 }
27
28 pub fn with_base_url(mut self, base_url: &str) -> Self {
30 self.base_url = base_url.to_string();
31 self
32 }
33}
34
35impl Default for SecurityConfig {
36 fn default() -> Self {
37 Self {
38 app_id: "".to_string(),
39 app_secret: "".to_string(),
40 base_url: "https://open.feishu.cn".to_string(),
41 }
42 }
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct PageRequest {
48 pub page_size: Option<i32>,
50 pub page_token: Option<String>,
52}
53
54impl Default for PageRequest {
55 fn default() -> Self {
56 Self {
57 page_size: Some(20),
58 page_token: None,
59 }
60 }
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct PageResponse<T> {
66 pub has_more: bool,
68 pub page_token: Option<String>,
70 pub data: Vec<T>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct ApiResponse<T> {
77 pub code: i32,
79 pub msg: String,
81 pub data: Option<T>,
83}
84
85pub type Timestamp = i64;
87
88#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
90#[serde(rename_all = "lowercase")]
91pub enum Status {
92 Active,
94 Disabled,
96 Pending,
98 Deleted,
100 Expired,
102}
103
104pub mod acs;
106pub mod common;
107
108pub use acs::{
111 AccessRecord, AccessResult, DeviceBindRuleRequest, DeviceInfo, DeviceStatus, DeviceType,
112 FaceImageInfo, HostInfo, PermissionRuleInfo, PermissionRuleRequest, UserInfo, UserListResponse,
113 UserRequest, VerificationMethod, VisitorInfo, VisitorRequest, VisitorStatus,
114};
115
116pub mod security_and_compliance;
118pub use security_and_compliance::{
120 ApplyStatus, ComplianceCheckResult, ComplianceResult, ComplianceRuleType, ComplianceStatus,
121 DeviceApplyRecord, DeviceApplyRecordApproveRequest, DeviceComplianceRule, DeviceRecord,
122 DeviceRecordRequest, DeviceRecordStatus, DeviceRecordUpdateRequest, OpenApiLog,
123 OpenApiLogQueryRequest,
124};
125
126pub use common::{
129 BatchOperationError, BatchOperationRequest, BatchOperationResponse, DeviceBase, ExtensionMap,
130 FileUploadResponse, GeoLocation, KeyValue, OperationResponse, PermissionBase, QueryCondition,
131 SortCondition, SortDirection, TimeRange, UserBase,
132};
133
134#[cfg(test)]
135mod tests {
136
137 use serde_json;
138
139 #[test]
140 fn test_serialization_roundtrip() {
141 let json = r#"{"test": "value"}"#;
143 assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
144 }
145
146 #[test]
147 fn test_deserialization_from_json() {
148 let json = r#"{"field": "data"}"#;
150 let value: serde_json::Value = serde_json::from_str(json).unwrap();
151 assert_eq!(value["field"], "data");
152 }
153}