use serde::Deserialize; use serde::Serialize; #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] pub enum WebSocketMessageServerToApp { /// State (server to app). State(State), /// Keep-alive message. HeartBeat, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] pub enum WebSocketMessageAppToServer { /// Keep-alive message. HeartBeat, } pub type RestResponse = Result; #[derive(thiserror::Error, Default, Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[error("{error}")] pub struct RestError { pub error: String, } impl RestError { pub fn new(err: impl Into) -> Self { Self { error: err.into() } } } impl From for RestError where T: Into, { fn from(value: T) -> Self { RestError::new(value) } } #[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] pub struct State { pub achievements: Vec, pub milestones: Vec, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] pub struct Achievement { pub goal: String, pub completed: bool, pub uuid: uuid::Uuid, pub time_of_reveal: Option, } #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] pub struct CreateAchievement { pub goal: String, pub time_of_reveal: Option, } #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] pub struct ToggleAchievement { pub uuid: uuid::Uuid, } #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] pub struct UpdateAchievementTimeOfReveal { pub uuid: uuid::Uuid, pub time_of_reveal: Option, } #[derive(PartialEq, Eq, Debug, Serialize, Clone, Deserialize)] pub struct DeleteAchievement { pub uuid: uuid::Uuid, } #[derive(Debug, PartialEq, Eq, Serialize, Clone, Deserialize)] pub struct Milestone { pub goal: usize, pub uuid: uuid::Uuid, } #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] pub struct CreateMilestone { pub goal: usize, } #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] pub struct DeleteMilestone { pub uuid: uuid::Uuid, }