use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceRecord {
pub device_record_id: String,
pub device_name: String,
pub device_type: String,
pub device_brand: Option<String>,
pub device_model: Option<String>,
pub os_type: Option<String>,
pub os_version: Option<String>,
pub serial_number: Option<String>,
pub mac_address: Option<String>,
pub status: DeviceRecordStatus,
pub user_id: String,
pub user_name: String,
pub department_name: Option<String>,
pub personal_device: bool,
pub compliance_status: ComplianceStatus,
pub last_check_time: Option<crate::models::Timestamp>,
pub create_time: crate::models::Timestamp,
pub update_time: crate::models::Timestamp,
pub extension: crate::models::ExtensionMap,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum DeviceRecordStatus {
Pending,
Approved,
Rejected,
Expired,
Revoked,
NonCompliant,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum ComplianceStatus {
Compliant,
NonCompliant,
Pending,
Unknown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceRecordRequest {
pub device_name: String,
pub device_type: String,
pub device_brand: Option<String>,
pub device_model: Option<String>,
pub os_type: Option<String>,
pub os_version: Option<String>,
pub serial_number: Option<String>,
pub mac_address: Option<String>,
pub personal_device: Option<bool>,
pub extension: Option<crate::models::ExtensionMap>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceRecordUpdateRequest {
pub device_name: Option<String>,
pub device_brand: Option<String>,
pub device_model: Option<String>,
pub os_type: Option<String>,
pub os_version: Option<String>,
pub serial_number: Option<String>,
pub mac_address: Option<String>,
pub compliance_status: Option<ComplianceStatus>,
pub extension: Option<crate::models::ExtensionMap>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceApplyRecord {
pub device_apply_record_id: String,
pub device_record_id: Option<String>,
pub device_info: Option<DeviceRecordRequest>,
pub applicant_id: String,
pub applicant_name: String,
pub apply_reason: String,
pub apply_status: ApplyStatus,
pub approver_id: Option<String>,
pub approver_name: Option<String>,
pub approve_comment: Option<String>,
pub approve_time: Option<crate::models::Timestamp>,
pub apply_time: crate::models::Timestamp,
pub update_time: crate::models::Timestamp,
pub extension: crate::models::ExtensionMap,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum ApplyStatus {
Pending,
Approved,
Rejected,
Revoked,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceApplyRecordApproveRequest {
pub approved: bool,
pub comment: Option<String>,
pub remark: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OpenApiLog {
pub log_id: String,
pub user_id: Option<String>,
pub user_name: Option<String>,
pub app_id: String,
pub api_path: String,
pub method: String,
pub status_code: i32,
pub cost_time: Option<i32>,
pub client_ip: Option<String>,
pub user_agent: Option<String>,
pub request_time: crate::models::Timestamp,
pub response_time: crate::models::Timestamp,
pub error_msg: Option<String>,
pub request_params: Option<serde_json::Value>,
pub response_summary: Option<String>,
pub extension: crate::models::ExtensionMap,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OpenApiLogQueryRequest {
pub start_time: Option<crate::models::Timestamp>,
pub end_time: Option<crate::models::Timestamp>,
pub user_id_filter: Option<String>,
pub api_path_filter: Option<String>,
pub status_code_filter: Option<i32>,
pub app_id_filter: Option<String>,
pub page_size: Option<i32>,
pub page_token: Option<String>,
pub sort_field: Option<String>,
pub sort_direction: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceComplianceRule {
pub rule_id: String,
pub rule_name: String,
pub rule_description: Option<String>,
pub rule_type: ComplianceRuleType,
pub rule_content: serde_json::Value,
pub status: crate::models::Status,
pub priority: i32,
pub create_time: crate::models::Timestamp,
pub update_time: crate::models::Timestamp,
pub extension: crate::models::ExtensionMap,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum ComplianceRuleType {
DeviceTypeCheck,
OsCheck,
SecuritySoftwareCheck,
EncryptionCheck,
NetworkAccessCheck,
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComplianceCheckResult {
pub result_id: String,
pub device_record_id: String,
pub rule_id: String,
pub result: ComplianceResult,
pub check_time: crate::models::Timestamp,
pub message: Option<String>,
pub details: Option<serde_json::Value>,
pub extension: crate::models::ExtensionMap,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum ComplianceResult {
Pass,
Fail,
Warning,
Skip,
}
#[cfg(test)]
mod tests {
use serde_json;
#[test]
fn test_serialization_roundtrip() {
let json = r#"{"test": "value"}"#;
assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
}
#[test]
fn test_deserialization_from_json() {
let json = r#"{"field": "data"}"#;
let value: serde_json::Value = serde_json::from_str(json).expect("JSON 反序列化失败");
assert_eq!(value["field"], "data");
}
}