use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct PageResponse<T> {
#[serde(skip_serializing_if = "Option::is_none")]
pub has_more: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<T>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PasswordResetRequest {
pub user_id: String,
pub password: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PasswordResetResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub success: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reset_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DepartmentDataReportRequest {
pub start_date: String,
pub end_date: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_id_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UserDataReportRequest {
pub start_date: String,
pub end_date: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_id_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataReport {
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub active_users: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub new_users: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub messages_sent: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub docs_usage: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meeting_duration: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_metrics: Option<HashMap<String, Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeCreateRequest {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail_description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_detail_time: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_name: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_description: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_detail_description: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeUpdateRequest {
pub badge_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail_description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_detail_time: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_name: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_description: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_detail_description: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeImageUploadRequest {
pub image: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeListRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeGetRequest {
pub badge_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Badge {
#[serde(skip_serializing_if = "Option::is_none")]
pub badge_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail_description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_detail_time: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub update_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_name: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_description: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub i18n_detail_description: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeImageUploadResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub image_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeGrantCreateRequest {
pub badge_id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub user_list: Vec<BadgeGrantUser>,
#[serde(skip_serializing_if = "Option::is_none")]
pub effective_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expiry_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_zone: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeGrantUpdateRequest {
pub grant_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_list: Option<Vec<BadgeGrantUser>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub effective_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expiry_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_zone: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeGrantDeleteRequest {
pub grant_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeGrantListRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub badge_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeGrantGetRequest {
pub grant_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeGrantUser {
pub user_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub grant_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BadgeGrant {
#[serde(skip_serializing_if = "Option::is_none")]
pub grant_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub badge_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_list: Option<Vec<BadgeGrantUser>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub effective_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expiry_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_zone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub update_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator_id: Option<String>,
}