Skip to content

Commit ddc38c8

Browse files
committed
feat(judge): add interactive, resource and time limit to builder
1 parent 5e0fe44 commit ddc38c8

1 file changed

Lines changed: 50 additions & 2 deletions

File tree

src/judge.rs

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@ const BUFFER_SIZE: usize = 512;
2424
#[derive(Default)]
2525
pub struct Judge {
2626
pub project_path: PathBuf,
27+
2728
pub language: Language,
2829
pub checker_language: Option<Language>,
30+
31+
pub is_interactive: bool,
32+
pub resource: Resource,
33+
pub time_limit: Duration,
2934
}
3035

3136
#[impl_state]
@@ -39,9 +44,44 @@ impl Judge {
3944
project_path,
4045
language: Default::default(),
4146
checker_language: Default::default(),
47+
is_interactive: false,
48+
resource: Default::default(),
49+
time_limit: Duration::from_secs(1),
4250
})
4351
}
44-
52+
#[require(Builder)]
53+
pub fn interactive(self) -> Judge {
54+
Judge {
55+
project_path: self.project_path,
56+
language: self.language,
57+
checker_language: self.checker_language,
58+
is_interactive: true,
59+
resource: self.resource,
60+
time_limit: self.time_limit,
61+
}
62+
}
63+
#[require(Builder)]
64+
pub fn with_resource(self, resource: Resource) -> Judge {
65+
Judge {
66+
project_path: self.project_path,
67+
language: self.language,
68+
checker_language: self.checker_language,
69+
is_interactive: self.is_interactive,
70+
resource,
71+
time_limit: self.time_limit,
72+
}
73+
}
74+
#[require(Builder)]
75+
pub fn with_time_limit(self, time_limit: Duration) -> Judge {
76+
Judge {
77+
project_path: self.project_path,
78+
language: self.language,
79+
checker_language: self.checker_language,
80+
is_interactive: self.is_interactive,
81+
resource: self.resource,
82+
time_limit,
83+
}
84+
}
4585
#[require(Builder)]
4686
pub fn with_checker(self, code: &[u8], language: Language) -> io::Result<Judge> {
4787
let mut path = self.project_path.join(CHECKER);
@@ -60,9 +100,11 @@ impl Judge {
60100
project_path: self.project_path,
61101
language: self.language,
62102
checker_language: Some(language),
103+
is_interactive: self.is_interactive,
104+
resource: self.resource,
105+
time_limit: self.time_limit,
63106
})
64107
}
65-
66108
#[require(Builder)]
67109
#[switch_to(Created)]
68110
pub fn with_main(self, code: &[u8], language: Language) -> io::Result<Judge> {
@@ -76,6 +118,9 @@ impl Judge {
76118
project_path: self.project_path,
77119
language: self.language,
78120
checker_language: self.checker_language,
121+
is_interactive: self.is_interactive,
122+
resource: self.resource,
123+
time_limit: self.time_limit,
79124
})
80125
}
81126

@@ -94,6 +139,9 @@ impl Judge {
94139
project_path: self.project_path,
95140
language: self.language,
96141
checker_language: self.checker_language,
142+
is_interactive: self.is_interactive,
143+
resource: self.resource,
144+
time_limit: self.time_limit,
97145
}))
98146
}
99147
}

0 commit comments

Comments
 (0)