@@ -19,6 +19,12 @@ pub struct LeetCode {
19
19
default_headers : HeaderMap ,
20
20
}
21
21
22
+ macro_rules! make_req {
23
+ ( $self: ident, $url: expr) => {
24
+ Req :: new( $self. default_headers, function_name!( ) , $url)
25
+ }
26
+ }
27
+
22
28
impl LeetCode {
23
29
/// Parse reqwest headers
24
30
fn headers ( mut headers : HeaderMap , ts : Vec < ( & str , & str ) > ) -> Result < HeaderMap , Error > {
@@ -77,13 +83,7 @@ impl LeetCode {
77
83
. get ( "problems" ) . ok_or ( Error :: NoneError ) ?
78
84
. replace ( "$category" , category) ;
79
85
80
- Req {
81
- default_headers : self . default_headers ,
82
- refer : None ,
83
- mode : Mode :: Get ,
84
- name : function_name ! ( ) ,
85
- url : url. to_string ( ) ,
86
- }
86
+ make_req ! ( self , url. to_string( ) )
87
87
. send ( & self . client )
88
88
. await
89
89
}
@@ -106,13 +106,10 @@ impl LeetCode {
106
106
}" . to_owned ( )
107
107
) ;
108
108
109
- Req {
110
- default_headers : self . default_headers ,
111
- refer : Some ( ( self . conf . sys . urls . get ( "tag" ) . ok_or ( Error :: NoneError ) ?) . replace ( "$slug" , slug) ) ,
112
- mode : Mode :: Post ( json) ,
113
- name : function_name ! ( ) ,
114
- url : ( * url) . to_string ( ) ,
115
- }
109
+ let mut req = make_req ! ( self , url. to_string( ) ) ;
110
+ req. mode = Mode :: Post ( json) ;
111
+ req. refer = Some ( ( self . conf . sys . urls . get ( "tag" ) . ok_or ( Error :: NoneError ) ?) . replace ( "$slug" , slug) ) ;
112
+ req
116
113
. send ( & self . client )
117
114
. await
118
115
}
@@ -133,13 +130,9 @@ impl LeetCode {
133
130
}" . to_owned ( )
134
131
) ;
135
132
136
- Req {
137
- default_headers : self . default_headers ,
138
- refer : None ,
139
- mode : Mode :: Post ( json) ,
140
- name : function_name ! ( ) ,
141
- url : ( * url) . to_string ( ) ,
142
- }
133
+ let mut req = make_req ! ( self , url. to_string( ) ) ;
134
+ req. mode = Mode :: Post ( json) ;
135
+ req
143
136
. send ( & self . client )
144
137
. await
145
138
}
@@ -162,13 +155,9 @@ impl LeetCode {
162
155
}" . to_owned ( )
163
156
) ;
164
157
165
- Req {
166
- default_headers : self . default_headers ,
167
- refer : None ,
168
- mode : Mode :: Post ( json) ,
169
- name : function_name ! ( ) ,
170
- url : ( * url) . to_string ( ) ,
171
- }
158
+ let mut req = make_req ! ( self , url. to_string( ) ) ;
159
+ req. mode = Mode :: Post ( json) ;
160
+ req
172
161
. send ( & self . client )
173
162
. await
174
163
}
@@ -202,13 +191,11 @@ impl LeetCode {
202
191
203
192
json. insert ( "operationName" , "getQuestionDetail" . to_string ( ) ) ;
204
193
205
- Req {
206
- default_headers : self . default_headers ,
207
- refer : Some ( refer) ,
208
- mode : Mode :: Post ( json) ,
209
- name : function_name ! ( ) ,
210
- url : ( & self . conf . sys . urls [ "graphql" ] ) . to_string ( ) ,
211
- }
194
+ let mut req = make_req ! ( self ,
195
+ ( & self . conf. sys. urls[ "graphql" ] ) . to_string( ) ) ;
196
+ req. mode = Mode :: Post ( json) ;
197
+ req. refer = Some ( refer) ;
198
+ req
212
199
. send ( & self . client )
213
200
. await
214
201
}
@@ -217,13 +204,10 @@ impl LeetCode {
217
204
#[ named]
218
205
pub async fn run_code ( self , j : Json , url : String , refer : String ) -> Result < Response , Error > {
219
206
info ! ( "Sending code to judge..." ) ;
220
- Req {
221
- default_headers : self . default_headers ,
222
- refer : Some ( refer) ,
223
- mode : Mode :: Post ( j) ,
224
- name : function_name ! ( ) ,
225
- url,
226
- }
207
+ let mut req = make_req ! ( self , url) ;
208
+ req. mode = Mode :: Post ( j) ;
209
+ req. refer = Some ( refer) ;
210
+ req
227
211
. send ( & self . client )
228
212
. await
229
213
}
@@ -233,13 +217,7 @@ impl LeetCode {
233
217
pub async fn verify_result ( self , id : String ) -> Result < Response , Error > {
234
218
trace ! ( "Verifying result..." ) ;
235
219
let url = self . conf . sys . urls . get ( "verify" ) . ok_or ( Error :: NoneError ) ?. replace ( "$id" , & id) ;
236
- Req {
237
- default_headers : self . default_headers ,
238
- refer : None ,
239
- mode : Mode :: Get ,
240
- name : function_name ! ( ) ,
241
- url,
242
- }
220
+ make_req ! ( self , url)
243
221
. send ( & self . client )
244
222
. await
245
223
}
@@ -251,6 +229,7 @@ mod req {
251
229
use crate :: err:: Error ;
252
230
use reqwest:: { header:: HeaderMap , Client , Response } ;
253
231
use std:: collections:: HashMap ;
232
+ use derive_new:: new;
254
233
255
234
/// Standardize json format
256
235
pub type Json = HashMap < & ' static str , String > ;
@@ -262,12 +241,15 @@ mod req {
262
241
}
263
242
264
243
/// LeetCode request prototype
244
+ #[ derive( new) ]
265
245
pub struct Req {
266
246
pub default_headers : HeaderMap ,
267
- pub refer : Option < String > ,
268
- pub mode : Mode ,
269
247
pub name : & ' static str ,
270
248
pub url : String ,
249
+ #[ new( value = "Mode::Get" ) ]
250
+ pub mode : Mode ,
251
+ #[ new( default ) ]
252
+ pub refer : Option < String > ,
271
253
}
272
254
273
255
impl Req {
0 commit comments