use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum UserIdType {
#[serde(rename = "open_id")]
OpenId,
#[serde(rename = "user_id")]
UserId,
#[serde(rename = "union_id")]
UnionId,
}
impl UserIdType {
pub fn as_str(&self) -> &str {
match self {
UserIdType::OpenId => "open_id",
UserIdType::UserId => "user_id",
UserIdType::UnionId => "union_id",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Folder {
#[serde(skip_serializing_if = "Option::is_none")]
pub folder_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub folder_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_folder_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub folder_type: Option<FolderType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub folder_path: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum FolderType {
#[serde(rename = "system")]
System,
#[serde(rename = "custom")]
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
#[serde(skip_serializing_if = "Option::is_none")]
pub message_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<MailAddress>,
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<Vec<MailAddress>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cc: Option<Vec<MailAddress>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bcc: Option<Vec<MailAddress>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub body: Option<MailBody>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sent_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_read: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<MessageStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub attachments: Option<Vec<Attachment>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailAddress {
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub html: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum MessageStatus {
#[serde(rename = "draft")]
Draft,
#[serde(rename = "sent")]
Sent,
#[serde(rename = "received")]
Received,
#[serde(rename = "deleted")]
Deleted,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Attachment {
#[serde(skip_serializing_if = "Option::is_none")]
pub attachment_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub download_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Rule {
#[serde(skip_serializing_if = "Option::is_none")]
pub rule_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rule_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conditions: Option<Vec<RuleCondition>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub actions: Option<Vec<RuleAction>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RuleCondition {
#[serde(skip_serializing_if = "Option::is_none")]
pub field: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub operator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RuleAction {
#[serde(skip_serializing_if = "Option::is_none")]
pub action_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parameters: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Contact {
#[serde(skip_serializing_if = "Option::is_none")]
pub contact_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remark: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailGroup {
#[serde(skip_serializing_if = "Option::is_none")]
pub mailgroup_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_external_send: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub permission: Option<MailGroupPermission>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailGroupPermission {
#[serde(skip_serializing_if = "Option::is_none")]
pub join_permission: Option<JoinPermission>,
#[serde(skip_serializing_if = "Option::is_none")]
pub send_permission: Option<SendPermission>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum JoinPermission {
#[serde(rename = "all")]
All,
#[serde(rename = "admin_only")]
AdminOnly,
#[serde(rename = "invite_only")]
InviteOnly,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SendPermission {
#[serde(rename = "all")]
All,
#[serde(rename = "members_only")]
MembersOnly,
#[serde(rename = "admin_only")]
AdminOnly,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailGroupMember {
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub member_type: Option<MemberType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum MemberType {
#[serde(rename = "member")]
Member,
#[serde(rename = "admin")]
Admin,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailGroupAlias {
#[serde(skip_serializing_if = "Option::is_none")]
pub alias: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublicMailbox {
#[serde(skip_serializing_if = "Option::is_none")]
pub public_mailbox_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<PublicMailboxStatus>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PublicMailboxStatus {
#[serde(rename = "active")]
Active,
#[serde(rename = "deleted")]
Deleted,
#[serde(rename = "in_recycle_bin")]
InRecycleBin,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublicMailboxMember {
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub permission_type: Option<PublicMailboxPermissionType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PublicMailboxPermissionType {
#[serde(rename = "admin")]
Admin,
#[serde(rename = "member")]
Member,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserMailboxAlias {
#[serde(skip_serializing_if = "Option::is_none")]
pub alias_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub alias_email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_primary: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AddressStatus {
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<EmailStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mailbox_type: Option<MailboxType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EmailStatus {
#[serde(rename = "exists")]
Exists,
#[serde(rename = "not_exists")]
NotExists,
#[serde(rename = "deleted")]
Deleted,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum MailboxType {
#[serde(rename = "user")]
User,
#[serde(rename = "group")]
Group,
#[serde(rename = "public")]
Public,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubscriptionStatus {
#[serde(skip_serializing_if = "Option::is_none")]
pub is_subscribed: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subscribe_time: Option<i64>,
}