Skip to main content

aj_models/
testing.rs

1//! Submissions and testing structs
2
3use crate::verdicts::{SubgroupVerdict, TotalVerdict};
4use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6
7/// Submission's language variants
8#[derive(Clone, Debug, Serialize, Deserialize)]
9#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
10#[cfg_attr(
11    feature = "sqlx",
12    sqlx(type_name = "language", rename_all = "snake_case")
13)]
14#[serde(rename_all = "snake_case")]
15pub enum Language {
16    /// clang++ compiler
17    Clangpp,
18    /// clang compiler
19    Clang,
20    /// go compiler
21    Go,
22    /// rustc compiler
23    Rust,
24    /// pyinstaller compiler
25    Python,
26    /// Unknown language
27    Unknown,
28}
29
30/// Returns a file extension for a language
31#[must_use]
32pub const fn get_language_file_extension(language: &Language) -> &'static str {
33    match language {
34        Language::Clang => "c",
35        Language::Clangpp => "cpp",
36        Language::Go => "go",
37        Language::Rust => "rs",
38        Language::Python => "py",
39        Language::Unknown => "!!",
40    }
41}
42
43/// Submission request data
44#[derive(Clone, Debug, Serialize, Deserialize)]
45pub struct SubmissonRequest {
46    /// Target problem's id
47    pub problem_id: i64,
48    /// Submission's language
49    pub language: Language,
50}
51
52/// Total testing result
53#[derive(Clone, Debug, Serialize, Deserialize)]
54#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
55pub struct TotalResult {
56    /// Total submission's testing verdict
57    pub total_verdict: TotalVerdict,
58    /// Total submission's score
59    pub total_score: i32,
60}
61
62/// Subgroup result, including verdict, test of that verdict and score
63#[derive(Clone, Debug, Default, Serialize, Deserialize)]
64#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
65pub struct SubgroupResult {
66    /// Subgroup's verdict
67    pub subgroup_verdict: SubgroupVerdict,
68    /// Last tested test
69    pub test: i32,
70    /// Score for the subgroup
71    pub score: i32,
72}
73
74/// Test result, including verdict and score
75#[derive(Clone, Debug, Default, Serialize, Deserialize)]
76#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
77pub struct TestResult {
78    /// Tests's verdict
79    pub test_verdict: SubgroupVerdict,
80    /// Score for the test
81    pub score: Option<i32>,
82}
83
84/// Submission data
85#[derive(Clone, Debug, Serialize, Deserialize)]
86#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
87pub struct Submission {
88    /// Submission's id
89    pub id: i64,
90    /// Problem's id
91    pub problem_id: i64,
92    /// User's id
93    pub user_id: i64,
94    /// Submission's language
95    pub language: Language,
96    /// Total submission's testing verdict
97    pub total_verdict: TotalVerdict,
98    /// Total submission's score
99    pub total_score: i32,
100    /// Created at timestamp
101    pub created_at: DateTime<Utc>,
102    /// Subgroups' results
103    pub subgroups_results: Vec<SubgroupResult>,
104    /// Tests' results
105    pub tests_results: Vec<TestResult>,
106}