use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", content = "data", rename_all = "snake_case")] pub enum ClientboundPacket { Handshake { version: String }, Error(String), DownloadResponse(Vec), } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", content = "data", rename_all = "snake_case")] pub enum ServerboundPacket { Handshake { version: String }, Download, UpdateTask(Task), RemoveTask(u64), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Task { pub id: u64, pub name: String, pub description: String, pub tags: Vec, pub priority: f64, pub completed: Option, pub scheduled: Option, pub occurence: Option, pub deadline: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum Condition { From(Box), Or(Vec), And(Vec), Invert(Box), Equal { prop: Property, value: i64, modulus: Option, }, Range { prop: Property, min: i64, max: i64, modulus: Option, }, } #[derive(Debug, Clone, Copy, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum Property { Year, Monthofyear, Weekofmonth, Dayofyear, Dayofmonth, Dayofweek, Hour, Minute, Second, Unix, }