use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
pub struct SecurityConfig {
pub app_id: String,
pub app_secret: String,
pub base_url: String,
}
impl SecurityConfig {
pub fn new(app_id: impl Into<String>, app_secret: impl Into<String>) -> Self {
Self {
app_id: app_id.into(),
app_secret: app_secret.into(),
base_url: "https://open.feishu.cn".to_string(),
}
}
pub fn with_base_url(mut self, base_url: &str) -> Self {
self.base_url = base_url.to_string();
self
}
}
impl Default for SecurityConfig {
fn default() -> Self {
Self {
app_id: "".to_string(),
app_secret: "".to_string(),
base_url: "https://open.feishu.cn".to_string(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PageRequest {
pub page_size: Option<i32>,
pub page_token: Option<String>,
}
impl Default for PageRequest {
fn default() -> Self {
Self {
page_size: Some(20),
page_token: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PageResponse<T> {
pub has_more: bool,
pub page_token: Option<String>,
pub data: Vec<T>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApiResponse<T> {
pub code: i32,
pub msg: String,
pub data: Option<T>,
}
pub type Timestamp = i64;
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum Status {
Active,
Disabled,
Pending,
Deleted,
Expired,
}
pub mod acs;
pub mod common;
pub use acs::{
AccessRecord, AccessResult, DeviceBindRuleRequest, DeviceInfo, DeviceStatus, DeviceType,
FaceImageInfo, HostInfo, PermissionRuleInfo, PermissionRuleRequest, UserInfo, UserListResponse,
UserRequest, VerificationMethod, VisitorInfo, VisitorRequest, VisitorStatus,
};
pub mod security_and_compliance;
pub use security_and_compliance::{
ApplyStatus, ComplianceCheckResult, ComplianceResult, ComplianceRuleType, ComplianceStatus,
DeviceApplyRecord, DeviceApplyRecordApproveRequest, DeviceComplianceRule, DeviceRecord,
DeviceRecordRequest, DeviceRecordStatus, DeviceRecordUpdateRequest, OpenApiLog,
OpenApiLogQueryRequest,
};
pub use common::{
BatchOperationError, BatchOperationRequest, BatchOperationResponse, DeviceBase, ExtensionMap,
FileUploadResponse, GeoLocation, KeyValue, OperationResponse, PermissionBase, QueryCondition,
SortCondition, SortDirection, TimeRange, UserBase,
};
#[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).unwrap();
assert_eq!(value["field"], "data");
}
}