Skip to main content

broccoli_server_sdk/types/
persistence.rs

1use super::verdict::Verdict;
2
3/// Submission status for judge pipeline updates.
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum SubmissionStatus {
6    Running,
7    Judged,
8    CompilationError,
9}
10
11impl SubmissionStatus {
12    pub fn as_str(&self) -> &'static str {
13        match self {
14            Self::Running => "Running",
15            Self::Judged => "Judged",
16            Self::CompilationError => "CompilationError",
17        }
18    }
19
20    pub fn is_terminal(&self) -> bool {
21        matches!(self, Self::Judged | Self::CompilationError)
22    }
23}
24
25/// Data for updating a submission.
26#[derive(Debug, Clone, Default, PartialEq)]
27pub struct SubmissionUpdate {
28    pub submission_id: i32,
29    pub status: Option<SubmissionStatus>,
30    pub verdict: Option<Option<Verdict>>,
31    pub score: Option<f64>,
32    pub time_used: Option<Option<i32>>,
33    pub memory_used: Option<Option<i32>>,
34    pub compile_output: Option<Option<String>>,
35    pub error_code: Option<Option<String>>,
36    pub error_message: Option<Option<String>>,
37}
38
39/// Data for inserting a single test case result row.
40#[derive(Debug, Clone, PartialEq)]
41pub struct TestCaseResultRow {
42    pub submission_id: i32,
43    pub test_case_id: i32,
44    pub verdict: Verdict,
45    pub score: f64,
46    pub time_used: Option<i32>,
47    pub memory_used: Option<i32>,
48    pub message: Option<String>,
49    pub stdout: Option<String>,
50    pub stderr: Option<String>,
51}