use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PageResponse<T> {
pub items: Vec<T>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_more: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkplaceAccessData {
#[serde(skip_serializing_if = "Option::is_none")]
pub data_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_count: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub platform: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CustomWorkplaceAccessData {
#[serde(skip_serializing_if = "Option::is_none")]
pub data_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_workplace_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_count: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub action_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CustomWorkplaceWidgetAccessData {
#[serde(skip_serializing_if = "Option::is_none")]
pub data_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_workplace_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub widget_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub widget_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_count: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub click_count: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AppInfo {
pub app_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_icon_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FavouriteApp {
pub app_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_info: Option<AppInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub favourited_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub usage_frequency: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_used_at: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RecommendedApp {
pub app_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_info: Option<AppInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recommend_reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recommend_score: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recommended_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rule_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AppRecommendRule {
pub rule_id: String,
pub rule_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub rule_description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rule_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<i64>,
}