use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Bot {
#[serde(skip_serializing_if = "Option::is_none")]
pub app_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ip_white_list: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_status: Option<AppStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub open_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AppStatus {
#[serde(rename = "unknown")]
Unknown,
#[serde(rename = "normal")]
Normal,
#[serde(rename = "disabled")]
Disabled,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotMenuEvent {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub event_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tenant_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub operator: Option<EventOperator>,
#[serde(skip_serializing_if = "Option::is_none")]
pub event: Option<MenuEventDetail>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventOperator {
#[serde(skip_serializing_if = "Option::is_none")]
pub operator_id: Option<OperatorId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub operator_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OperatorId {
#[serde(skip_serializing_if = "Option::is_none")]
pub open_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub union_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MenuEventDetail {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub menu_id: Option<String>,
}