Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jul 7, 2024. It is now read-only.

Commit b541443

Browse files
committed
simplify Req construction
1 parent c7c85ff commit b541443

File tree

2 files changed

+34
-51
lines changed

2 files changed

+34
-51
lines changed

β€ŽCargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ serde_json = "1.0.44"
3333
toml = "0.5.5"
3434
regex = "1"
3535
function_name = "0.3"
36+
derive-new = "0.5"
3637

3738
[dependencies.diesel]
3839
version = "1.4.3"

β€Žsrc/plugins/leetcode.rs

Lines changed: 33 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ pub struct LeetCode {
1919
default_headers: HeaderMap,
2020
}
2121

22+
macro_rules! make_req {
23+
($self:ident, $url:expr) => {
24+
Req::new($self.default_headers, function_name!(), $url)
25+
}
26+
}
27+
2228
impl LeetCode {
2329
/// Parse reqwest headers
2430
fn headers(mut headers: HeaderMap, ts: Vec<(&str, &str)>) -> Result<HeaderMap, Error> {
@@ -77,13 +83,7 @@ impl LeetCode {
7783
.get("problems").ok_or(Error::NoneError)?
7884
.replace("$category", category);
7985

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())
8787
.send(&self.client)
8888
.await
8989
}
@@ -106,13 +106,10 @@ impl LeetCode {
106106
}".to_owned()
107107
);
108108

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
116113
.send(&self.client)
117114
.await
118115
}
@@ -133,13 +130,9 @@ impl LeetCode {
133130
}".to_owned()
134131
);
135132

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
143136
.send(&self.client)
144137
.await
145138
}
@@ -162,13 +155,9 @@ impl LeetCode {
162155
}".to_owned()
163156
);
164157

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
172161
.send(&self.client)
173162
.await
174163
}
@@ -202,13 +191,11 @@ impl LeetCode {
202191

203192
json.insert("operationName", "getQuestionDetail".to_string());
204193

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
212199
.send(&self.client)
213200
.await
214201
}
@@ -217,13 +204,10 @@ impl LeetCode {
217204
#[named]
218205
pub async fn run_code(self, j: Json, url: String, refer: String) -> Result<Response, Error> {
219206
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
227211
.send(&self.client)
228212
.await
229213
}
@@ -233,13 +217,7 @@ impl LeetCode {
233217
pub async fn verify_result(self, id: String) -> Result<Response, Error> {
234218
trace!("Verifying result...");
235219
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)
243221
.send(&self.client)
244222
.await
245223
}
@@ -251,6 +229,7 @@ mod req {
251229
use crate::err::Error;
252230
use reqwest::{header::HeaderMap, Client, Response};
253231
use std::collections::HashMap;
232+
use derive_new::new;
254233

255234
/// Standardize json format
256235
pub type Json = HashMap<&'static str, String>;
@@ -262,12 +241,15 @@ mod req {
262241
}
263242

264243
/// LeetCode request prototype
244+
#[derive(new)]
265245
pub struct Req {
266246
pub default_headers: HeaderMap,
267-
pub refer: Option<String>,
268-
pub mode: Mode,
269247
pub name: &'static str,
270248
pub url: String,
249+
#[new(value = "Mode::Get")]
250+
pub mode: Mode,
251+
#[new(default)]
252+
pub refer: Option<String>,
271253
}
272254

273255
impl Req {

0 commit comments

Comments
(0)

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /