Skip to main content

aj_models/
testing.rs

1use crate::verdicts::{TestingVerdict, Verdict};
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, Serialize, Deserialize)]
6#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
7#[cfg_attr(
8    feature = "sqlx",
9    sqlx(type_name = "language", rename_all = "snake_case")
10)]
11#[serde(rename_all = "snake_case")]
12pub enum Language {
13    C,
14    Cpp,
15    Go,
16    Rust,
17    Python,
18    FreePascal,
19    Unknown,
20}
21
22impl Language {
23    #[must_use]
24    pub const fn file_ext(&self) -> &'static str {
25        match &self {
26            Self::C => "c",
27            Self::Cpp => "cpp",
28            Self::Go => "go",
29            Self::Rust => "rs",
30            Self::Python => "py",
31            Self::FreePascal => "pas",
32            Self::Unknown => "!!",
33        }
34    }
35}
36
37#[derive(Clone, Debug, Serialize, Deserialize)]
38pub struct SubmissonRequest {
39    pub language: Language,
40}
41
42#[derive(Clone, Debug, Serialize, Deserialize)]
43#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
44pub struct TestingResult {
45    pub verdict: TestingVerdict,
46    pub score: f64,
47}
48
49#[derive(Clone, Debug, Serialize, Deserialize)]
50#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
51pub struct SubgroupResult {
52    pub verdict: Verdict,
53    pub test: i32,
54    pub score: f64,
55}
56
57#[derive(Clone, Debug, Serialize, Deserialize)]
58#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
59pub struct TestResult {
60    pub verdict: Verdict,
61    pub score: Option<f64>,
62}
63
64#[derive(Clone, Debug, Serialize, Deserialize)]
65#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
66pub struct Submission {
67    pub id: i64,
68    pub problem_id: i64,
69    pub user_id: i64,
70    pub user_login: String,
71    pub language: Language,
72    pub verdict: TestingVerdict,
73    pub score: f64,
74    pub subgroups_results: Vec<SubgroupResult>,
75    pub tests_results: Vec<TestResult>,
76    pub created_at: DateTime<Utc>,
77}