91 lines
2.1 KiB
Rust

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<T> = Result<T, RestError>;
#[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<String>) -> Self {
Self { error: err.into() }
}
}
impl<T> From<T> for RestError
where
T: Into<String>,
{
fn from(value: T) -> Self {
RestError::new(value)
}
}
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct State {
pub achievements: Vec<Achievement>,
pub milestones: Vec<Milestone>,
}
#[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<chrono::NaiveTime>,
}
#[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)]
pub struct CreateAchievement {
pub goal: String,
pub time_of_reveal: Option<chrono::NaiveTime>,
}
#[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<chrono::NaiveTime>,
}
#[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,
}