use serde::{Deserialize, Serialize};
use strum::{AsRefStr, Display, IntoStaticStr};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Exercise {
#[serde(rename = "slug")]
pub name: String,
#[serde(rename = "type")]
pub exercise_type: Type,
pub title: String,
pub icon_url: String,
pub difficulty: Difficulty,
pub blurb: String,
pub is_external: bool,
pub is_unlocked: bool,
pub is_recommended: bool,
pub links: Links,
}
#[derive(
Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, Display, AsRefStr, IntoStaticStr,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum Type {
Tutorial,
Concept,
Practice,
#[serde(skip_serializing, other)]
Unknown,
}
#[derive(
Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, Display, AsRefStr, IntoStaticStr,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum Difficulty {
Easy,
Medium,
Hard,
#[serde(skip_serializing, other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Links {
#[serde(rename = "self")]
pub self_path: String,
}