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 Task {
#[serde(skip_serializing_if = "Option::is_none")]
pub guid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub due: Option<TaskDue>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<TaskStart>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completed_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub members: Option<Vec<TaskMember>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repeat_rule: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_complete: Option<TaskCustomComplete>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub workflow_state: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskDue {
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_all_day: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskStart {
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_all_day: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskMember {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskCustomComplete {
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub complete_setting: Option<TaskCompleteSetting>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskCompleteSetting {
#[serde(skip_serializing_if = "Option::is_none")]
pub subtask_count: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Tasklist {
#[serde(skip_serializing_if = "Option::is_none")]
pub guid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator: Option<TaskMember>,
#[serde(skip_serializing_if = "Option::is_none")]
pub owner: Option<TaskMember>,
#[serde(skip_serializing_if = "Option::is_none")]
pub members: Option<Vec<TaskMember>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Comment {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator: Option<TaskMember>,
#[serde(skip_serializing_if = "Option::is_none")]
pub replies: Option<Vec<Comment>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Attachment {
#[serde(skip_serializing_if = "Option::is_none")]
pub guid: 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 type_: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uploader: Option<TaskMember>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uploaded_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Section {
#[serde(skip_serializing_if = "Option::is_none")]
pub guid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_default: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CustomField {
#[serde(skip_serializing_if = "Option::is_none")]
pub guid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub setting: Option<CustomFieldSetting>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CustomFieldSetting {
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<Vec<CustomFieldOption>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CustomFieldOption {
#[serde(skip_serializing_if = "Option::is_none")]
pub guid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub color_index: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Reminder {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub relative_fire_minute: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Dependency {
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub task_guid: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActivitySubscription {
#[serde(skip_serializing_if = "Option::is_none")]
pub guid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subscribers: Option<Vec<TaskMember>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_completed: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}