use serde::{Deserialize, Serialize};
use strum::{AsRefStr, Display, EnumString, IntoStaticStr, VariantNames};
use crate::api::v2::iteration::Iteration;
use crate::api::v2::tests;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Response {
pub solution: Solution,
#[serde(default)]
pub iterations: Vec<Iteration>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Solution {
pub uuid: String,
pub private_url: String,
pub public_url: String,
pub status: Status,
pub mentoring_status: MentoringStatus,
pub published_iteration_head_tests_status: tests::Status,
pub has_notifications: bool,
pub num_views: i32,
pub num_stars: i32,
pub num_comments: i32,
pub num_iterations: i32,
#[serde(default)]
pub num_loc: Option<i32>,
pub is_out_of_date: bool,
#[serde(default)]
pub published_at: Option<String>,
#[serde(default)]
pub completed_at: Option<String>,
pub updated_at: String,
#[serde(default)]
pub last_iterated_at: Option<String>,
pub exercise: Exercise,
pub track: Track,
}
#[derive(
Debug,
Default,
Copy,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
AsRefStr,
Display,
EnumString,
IntoStaticStr,
VariantNames,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum Status {
#[default]
Started,
Iterated,
Completed,
Published,
#[serde(skip_serializing, other)]
Unknown,
}
#[derive(
Debug,
Default,
Copy,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
AsRefStr,
Display,
EnumString,
IntoStaticStr,
VariantNames,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum MentoringStatus {
#[default]
None,
Requested,
InProgress,
Finished,
#[serde(skip_serializing, other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Exercise {
#[serde(rename = "slug")]
pub name: String,
pub title: String,
pub icon_url: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Track {
#[serde(rename = "slug")]
pub name: String,
pub title: String,
pub icon_url: String,
}