cses-cli 0.1.3

CSES CLI is a lightweight tool for using CSES from the command line.
mod scope;
use miniserde::{Deserialize, Serialize};
pub use scope::*;

#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct Language {
    pub name: Option<String>,
    pub option: Option<String>,
}

#[derive(Debug, Default, Deserialize)]
pub struct UserOutline {
    pub id: u64,
    pub username: String,
    pub displayname: Option<String>,
}

impl UserOutline {
    pub fn name(&self) -> &str {
        self.displayname.as_deref().unwrap_or(&self.username)
    }
}

#[derive(Debug, Default, Deserialize)]
pub struct SubmissionInfo {
    pub id: u64,
    pub task: TaskOutline,
    pub sender: UserOutline,
    pub time: String,
    pub language: Language,
    pub status: String,
    pub pending: bool,
    pub test_progress: Option<TestProgress>,
    pub result: Option<String>,
    pub score: Option<u64>,
    pub feedback: Option<Vec<SubtaskInfo>>,
    pub tests: Option<Vec<SubmissionTestInfo>>,
    pub compiler: Option<String>,
    pub test_report: Option<String>,
}

#[derive(Debug, Deserialize)]
pub struct SubtaskInfo {
    pub group: u64,
    pub verdict: String,
    pub score: u64,
}

#[derive(Debug, Deserialize)]
pub struct SubmissionTestInfo {
    pub number: u64,
    pub verdict: String,
    pub time: Option<u64>,
    pub groups: Option<Vec<u64>>,
}

#[derive(Debug, Deserialize)]
pub struct TestProgress {
    pub finished_tests: u64,
    pub total_tests: u64,
}

#[derive(Debug, Default, Deserialize)]
pub struct TaskOutline {
    pub id: String,
    pub name: String,
}

#[derive(Debug, Deserialize)]
pub struct CourseInfo {
    pub id: String,
    pub name: String,
    pub description: String,
}

#[derive(Debug, Deserialize)]
pub struct CourseList {
    pub courses: Vec<CourseInfo>,
}

#[derive(Debug, Deserialize)]
pub struct TemplateResponse {
    pub template_source: String,
    pub filename: String,
}
#[derive(Debug, Deserialize)]
pub struct SubmissionListingInfo {
    pub id: u64,
    pub time: String,
    pub language: Language,
    pub code_time: Option<u64>,
    pub size: Option<u64>,
    #[serde(rename = "outcome_status")]
    pub result: Option<TaskStatus>,
    #[serde(rename = "outcome_score")]
    pub score: Option<u64>,
}

#[derive(Debug, Deserialize)]
pub struct SubmissionList {
    pub submissions: Vec<SubmissionListingInfo>,
}

#[derive(Debug, Deserialize)]
pub struct TaskStatement {
    pub name: String,
    pub time_limit: Option<u64>,
    pub memory_limit: Option<u64>,
    pub text: String,
}

#[derive(Debug, Deserialize)]
pub struct TestCase {
    pub input: String,
    pub output: String,
}

#[derive(Debug, Deserialize)]
pub struct TestCaseList {
    pub test_cases: Vec<TestCase>,
}