@@ -24,8 +24,13 @@ const BUFFER_SIZE: usize = 512;
2424#[ derive( Default ) ]
2525pub 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