1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct DeviceRecord {
8 pub device_record_id: String,
10 pub device_name: String,
12 pub device_type: String,
14 pub device_brand: Option<String>,
16 pub device_model: Option<String>,
18 pub os_type: Option<String>,
20 pub os_version: Option<String>,
22 pub serial_number: Option<String>,
24 pub mac_address: Option<String>,
26 pub status: DeviceRecordStatus,
28 pub user_id: String,
30 pub user_name: String,
32 pub department_name: Option<String>,
34 pub personal_device: bool,
36 pub compliance_status: ComplianceStatus,
38 pub last_check_time: Option<crate::models::Timestamp>,
40 pub create_time: crate::models::Timestamp,
42 pub update_time: crate::models::Timestamp,
44 pub extension: crate::models::ExtensionMap,
46}
47
48#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
50#[serde(rename_all = "snake_case")]
51pub enum DeviceRecordStatus {
52 Pending,
54 Approved,
56 Rejected,
58 Expired,
60 Revoked,
62 NonCompliant,
64}
65
66#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
68#[serde(rename_all = "snake_case")]
69pub enum ComplianceStatus {
70 Compliant,
72 NonCompliant,
74 Pending,
76 Unknown,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct DeviceRecordRequest {
83 pub device_name: String,
85 pub device_type: String,
87 pub device_brand: Option<String>,
89 pub device_model: Option<String>,
91 pub os_type: Option<String>,
93 pub os_version: Option<String>,
95 pub serial_number: Option<String>,
97 pub mac_address: Option<String>,
99 pub personal_device: Option<bool>,
101 pub extension: Option<crate::models::ExtensionMap>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
107pub struct DeviceRecordUpdateRequest {
108 pub device_name: Option<String>,
110 pub device_brand: Option<String>,
112 pub device_model: Option<String>,
114 pub os_type: Option<String>,
116 pub os_version: Option<String>,
118 pub serial_number: Option<String>,
120 pub mac_address: Option<String>,
122 pub compliance_status: Option<ComplianceStatus>,
124 pub extension: Option<crate::models::ExtensionMap>,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
130pub struct DeviceApplyRecord {
131 pub device_apply_record_id: String,
133 pub device_record_id: Option<String>,
135 pub device_info: Option<DeviceRecordRequest>,
137 pub applicant_id: String,
139 pub applicant_name: String,
141 pub apply_reason: String,
143 pub apply_status: ApplyStatus,
145 pub approver_id: Option<String>,
147 pub approver_name: Option<String>,
149 pub approve_comment: Option<String>,
151 pub approve_time: Option<crate::models::Timestamp>,
153 pub apply_time: crate::models::Timestamp,
155 pub update_time: crate::models::Timestamp,
157 pub extension: crate::models::ExtensionMap,
159}
160
161#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
163#[serde(rename_all = "snake_case")]
164pub enum ApplyStatus {
165 Pending,
167 Approved,
169 Rejected,
171 Revoked,
173}
174
175#[derive(Debug, Clone, Serialize, Deserialize)]
177pub struct DeviceApplyRecordApproveRequest {
178 pub approved: bool,
180 pub comment: Option<String>,
182 pub remark: Option<String>,
184}
185
186#[derive(Debug, Clone, Serialize, Deserialize)]
188pub struct OpenApiLog {
189 pub log_id: String,
191 pub user_id: Option<String>,
193 pub user_name: Option<String>,
195 pub app_id: String,
197 pub api_path: String,
199 pub method: String,
201 pub status_code: i32,
203 pub cost_time: Option<i32>,
205 pub client_ip: Option<String>,
207 pub user_agent: Option<String>,
209 pub request_time: crate::models::Timestamp,
211 pub response_time: crate::models::Timestamp,
213 pub error_msg: Option<String>,
215 pub request_params: Option<serde_json::Value>,
217 pub response_summary: Option<String>,
219 pub extension: crate::models::ExtensionMap,
221}
222
223#[derive(Debug, Clone, Serialize, Deserialize)]
225pub struct OpenApiLogQueryRequest {
226 pub start_time: Option<crate::models::Timestamp>,
228 pub end_time: Option<crate::models::Timestamp>,
230 pub user_id_filter: Option<String>,
232 pub api_path_filter: Option<String>,
234 pub status_code_filter: Option<i32>,
236 pub app_id_filter: Option<String>,
238 pub page_size: Option<i32>,
240 pub page_token: Option<String>,
242 pub sort_field: Option<String>,
244 pub sort_direction: Option<String>,
246}
247
248#[derive(Debug, Clone, Serialize, Deserialize)]
250pub struct DeviceComplianceRule {
251 pub rule_id: String,
253 pub rule_name: String,
255 pub rule_description: Option<String>,
257 pub rule_type: ComplianceRuleType,
259 pub rule_content: serde_json::Value,
261 pub status: crate::models::Status,
263 pub priority: i32,
265 pub create_time: crate::models::Timestamp,
267 pub update_time: crate::models::Timestamp,
269 pub extension: crate::models::ExtensionMap,
271}
272
273#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
275#[serde(rename_all = "snake_case")]
276pub enum ComplianceRuleType {
277 DeviceTypeCheck,
279 OsCheck,
281 SecuritySoftwareCheck,
283 EncryptionCheck,
285 NetworkAccessCheck,
287 Custom,
289}
290
291#[derive(Debug, Clone, Serialize, Deserialize)]
293pub struct ComplianceCheckResult {
294 pub result_id: String,
296 pub device_record_id: String,
298 pub rule_id: String,
300 pub result: ComplianceResult,
302 pub check_time: crate::models::Timestamp,
304 pub message: Option<String>,
306 pub details: Option<serde_json::Value>,
308 pub extension: crate::models::ExtensionMap,
310}
311
312#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
314#[serde(rename_all = "snake_case")]
315pub enum ComplianceResult {
316 Pass,
318 Fail,
320 Warning,
322 Skip,
324}
325
326#[cfg(test)]
327mod tests {
328
329 use serde_json;
330
331 #[test]
332 fn test_serialization_roundtrip() {
333 let json = r#"{"test": "value"}"#;
335 assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
336 }
337
338 #[test]
339 fn test_deserialization_from_json() {
340 let json = r#"{"field": "data"}"#;
342 let value: serde_json::Value = serde_json::from_str(json).expect("JSON 反序列化失败");
343 assert_eq!(value["field"], "data");
344 }
345}