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    /// fpc compiler
27    FreePascal,
28    /// Unknown language
29    Unknown,
30}
31
32/// Returns a file extension for a language
33#[must_use]
34pub const fn get_language_file_extension(language: &Language) -> &'static str {
35    match language {
36        Language::Clang => "c",
37        Language::Clangpp => "cpp",
38        Language::Go => "go",
39        Language::Rust => "rs",
40        Language::Python => "py",
41        Language::FreePascal => "pas",
42        Language::Unknown => "!!",
43    }
44}
45
46/// Submission request data
47#[derive(Clone, Debug, Serialize, Deserialize)]
48pub struct SubmissonRequest {
49    /// Target problem's id
50    pub problem_id: i64,
51    /// Submission's language
52    pub language: Language,
53}
54
55/// Total testing result
56#[derive(Clone, Debug, Serialize, Deserialize)]
57#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
58pub struct TotalResult {
59    /// Total submission's testing verdict
60    pub total_verdict: TotalVerdict,
61    /// Total submission's score
62    pub total_score: i32,
63}
64
65/// Subgroup result, including verdict, test of that verdict and score
66#[derive(Clone, Debug, Default, Serialize, Deserialize)]
67#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
68pub struct SubgroupResult {
69    /// Subgroup's verdict
70    pub subgroup_verdict: SubgroupVerdict,
71    /// Last tested test
72    pub test: i32,
73    /// Score for the subgroup
74    pub score: i32,
75}
76
77/// Test result, including verdict and score
78#[derive(Clone, Debug, Default, Serialize, Deserialize)]
79#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
80pub struct TestResult {
81    /// Tests's verdict
82    pub test_verdict: SubgroupVerdict,
83    /// Score for the test
84    pub score: Option<i32>,
85}
86
87/// Submission data
88#[derive(Clone, Debug, Serialize, Deserialize)]
89#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
90pub struct Submission {
91    /// Submission's id
92    pub id: i64,
93    /// Problem's id
94    pub problem_id: i64,
95    /// User's id
96    pub user_id: i64,
97    /// Submission's language
98    pub language: Language,
99    /// Total submission's testing verdict
100    pub total_verdict: TotalVerdict,
101    /// Total submission's score
102    pub total_score: i32,
103    /// Created at timestamp
104    pub created_at: DateTime<Utc>,
105    /// Subgroups' results
106    pub subgroups_results: Vec<SubgroupResult>,
107    /// Tests' results
108    pub tests_results: Vec<TestResult>,
109}