Skip to content

Commit 781ac71

Browse files
committed
change: replaced async-std, surf with tokio, reqwest
1 parent 46a46a9 commit 781ac71

20 files changed

+112
-934
lines changed

atcoder-problems-backend/Cargo.lock

Lines changed: 58 additions & 885 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

atcoder-problems-backend/atcoder-client/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ edition = "2021"
66
publish = false
77

88
[dependencies]
9-
surf = "2.3"
9+
reqwest = { version = "0.11", features = ["json", "gzip"] }
1010
scraper = "0.12"
1111
chrono = "0.4"
1212
regex = "1"
1313
serde = { version = "1.0", features = ["derive"] }
1414
serde_json = "1.0"
15-
futures = "0.3"
15+
tokio = { version = "1.15", features = ["macros", "rt"] }
1616
anyhow = "1.0"
1717
log = "0.4"

atcoder-problems-backend/atcoder-client/src/atcoder/client.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use crate::util;
22
use anyhow::Result;
33

44
use super::*;
5-
use surf::StatusCode;
65

76
const ATCODER_PREFIX: &str = "https://atcoder.jp";
87

@@ -63,7 +62,7 @@ impl AtCoderClient {
6362
max_page,
6463
submissions,
6564
})
66-
} else if status == StatusCode::NotFound {
65+
} else if status == reqwest::StatusCode::NOT_FOUND {
6766
log::warn!("404: {}", url);
6867
Ok(AtCoderSubmissionListResponse {
6968
max_page: 0,
@@ -89,44 +88,50 @@ impl AtCoderClient {
8988
#[cfg(test)]
9089
mod tests {
9190
use super::*;
92-
use futures::executor::block_on;
9391

9492
#[test]
9593
fn test_fetch_contest_list() {
9694
let client = AtCoderClient::default();
97-
let contests =
98-
block_on(client.fetch_atcoder_contests(ContestTypeSpecifier::Normal { page: 1 }))
99-
.unwrap();
95+
let rt = tokio::runtime::Runtime::new().unwrap();
96+
let contests = rt
97+
.block_on(client.fetch_atcoder_contests(ContestTypeSpecifier::Normal { page: 1 }))
98+
.unwrap();
10099
assert_eq!(contests.len(), 50);
101100
}
102101

103102
#[test]
104103
fn test_fetch_hidden_contest() {
105104
let client = AtCoderClient::default();
106-
let contests =
107-
block_on(client.fetch_atcoder_contests(ContestTypeSpecifier::Hidden)).unwrap();
105+
let rt = tokio::runtime::Runtime::new().unwrap();
106+
let contests = rt
107+
.block_on(client.fetch_atcoder_contests(ContestTypeSpecifier::Hidden))
108+
.unwrap();
108109
assert!(!contests.is_empty());
109110
}
110111

111112
#[test]
112113
fn test_fetch_problem_list() {
113114
let client = AtCoderClient::default();
114-
let problems = block_on(client.fetch_problem_list("abc107")).unwrap();
115+
let rt = tokio::runtime::Runtime::new().unwrap();
116+
let problems = rt.block_on(client.fetch_problem_list("abc107")).unwrap();
115117
assert_eq!(problems.len(), 4);
116118
}
117119

118120
#[test]
119121
fn test_fetch_submission_list() {
120122
let client = AtCoderClient::default();
121-
let response = block_on(client.fetch_atcoder_submission_list("xmascon17", None)).unwrap();
123+
let rt = tokio::runtime::Runtime::new().unwrap();
124+
let response = rt
125+
.block_on(client.fetch_atcoder_submission_list("xmascon17", None))
126+
.unwrap();
122127
assert_eq!(response.submissions.len(), 20);
123128

124-
let response =
125-
block_on(client.fetch_atcoder_submission_list("xmascon17", Some(response.max_page)))
126-
.unwrap();
129+
let response = rt
130+
.block_on(client.fetch_atcoder_submission_list("xmascon17", Some(response.max_page)))
131+
.unwrap();
127132
assert!(!response.submissions.is_empty());
128133

129-
let response = block_on(
134+
let response = rt.block_on(
130135
client.fetch_atcoder_submission_list("xmascon17", Some(response.max_page + 1)),
131136
);
132137
assert!(response.is_err());

atcoder-problems-backend/atcoder-client/src/util.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ use anyhow::{anyhow, Result};
22

33
use serde::de::DeserializeOwned;
44

5-
pub(crate) async fn get_html(url: &str) -> Result<(String, surf::StatusCode)> {
6-
let mut response = surf::get(url)
5+
pub(crate) async fn get_html(url: &str) -> Result<(String, reqwest::StatusCode)> {
6+
let response = reqwest::Client::builder().gzip(true).build()?
7+
.get(url)
78
.header("accept", "text/html")
8-
.header("accept-encoding", "gzip")
99
.send()
1010
.await
1111
.map_err(|e| anyhow!("Connection error: {:?}", e))?;
@@ -14,19 +14,22 @@ pub(crate) async fn get_html(url: &str) -> Result<(String, surf::StatusCode)> {
1414
log::error!("{:?}", response);
1515
}
1616
let body = response
17-
.body_string()
17+
.text()
1818
.await
1919
.map_err(|e| anyhow!("Failed to parse HTTP body: {:?}", e))?;
2020
Ok((body, status))
2121
}
2222

2323
pub(crate) async fn get_json<T: DeserializeOwned>(url: &str) -> Result<T> {
24-
surf::get(url)
24+
reqwest::Client::builder().gzip(true).build()?
25+
.get(url)
2526
.header("accept", "application/json")
26-
.header("accept-encoding", "gzip")
27-
.recv_json()
27+
.send()
28+
.await
29+
.map_err(|_| anyhow!("Failed to get json from {}", url))?
30+
.json::<T>()
2831
.await
29-
.map_err(|_| anyhow!("Failed to get json from {}", url))
32+
.map_err(|_| anyhow!("Failed to parse json from {}", url))
3033
}
3134

3235
pub trait Problem {

atcoder-problems-backend/sql-client/Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ publish = false
88
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
99

1010
[dependencies]
11-
sqlx = { version = "0.5.9", features = ["postgres", "runtime-async-std-rustls"] }
11+
sqlx = { version = "0.5.9", features = ["postgres", "runtime-tokio-rustls"] }
1212
async-trait = "0.1.52"
1313
serde = { version = "1.0", features = ["derive"] }
1414
uuid = { version = "0.8", features = ["serde", "v4"] }
1515
anyhow = "1.0.51"
16-
async-std = { version = "1.10.0", features = ["attributes"] }
16+
tokio = { version = "1.15", features = ["macros"] }
1717
regex = "1"
18-
futures = "0.3"
1918
chrono = "0.4"

atcoder-problems-backend/sql-client/src/problems_submissions.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::PgPool;
22
use anyhow::Result;
33
use async_trait::async_trait;
4-
use futures::try_join;
54

65
#[async_trait]
76
pub trait ProblemsSubmissionUpdater {
@@ -15,7 +14,7 @@ impl ProblemsSubmissionUpdater for PgPool {
1514
let fastest_sql = generate_query("fastest", "execution_time");
1615
let shortest_sql = generate_query("shortest", "length");
1716

18-
try_join!(
17+
tokio::try_join!(
1918
sqlx::query(&first_sql).execute(self),
2019
sqlx::query(&fastest_sql).execute(self),
2120
sqlx::query(&shortest_sql).execute(self),

atcoder-problems-backend/sql-client/src/rated_point_sum.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use crate::models::{ContestProblem, Submission, UserSum};
22
use crate::{PgPool, FIRST_AGC_EPOCH_SECOND, MAX_INSERT_ROWS, UNRATED_STATE};
33
use anyhow::Result;
44
use async_trait::async_trait;
5-
use futures::try_join;
65
use sqlx::postgres::PgRow;
76
use sqlx::Row;
87
use std::collections::{BTreeMap, BTreeSet};
@@ -45,7 +44,7 @@ impl RatedPointSumClient for PgPool {
4544
.fetch_all(self);
4645

4746
let (rated_contest_ids, rated_problem_ids) =
48-
try_join!(rated_contest_ids_fut, rated_problem_ids_fut)?;
47+
tokio::try_join!(rated_contest_ids_fut, rated_problem_ids_fut)?;
4948

5049
let rated_contest_ids = rated_contest_ids.into_iter().collect::<BTreeSet<_>>();
5150
let rated_problem_ids = rated_problem_ids

atcoder-problems-backend/sql-client/tests/test_accepted_count.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use sql_client::models::{Submission, UserProblemCount};
33

44
mod utils;
55

6-
#[async_std::test]
6+
#[tokio::test]
77
async fn test_accepted_count() {
88
let pool = utils::initialize_and_connect_to_test_sql().await;
99
let submissions = [

atcoder-problems-backend/sql-client/tests/test_contest_problem.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ fn create_problem(id: i32) -> ContestProblem {
1010
}
1111
}
1212

13-
#[async_std::test]
13+
#[tokio::test]
1414
async fn test_contest_problem() {
1515
let pool = utils::initialize_and_connect_to_test_sql().await;
1616
assert!(pool.load_contest_problem().await.unwrap().is_empty());

atcoder-problems-backend/sql-client/tests/test_language_count.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use sql_client::models::{Submission, UserLanguageCount, UserLanguageCountRank, U
33

44
mod utils;
55

6-
#[async_std::test]
6+
#[tokio::test]
77
async fn test_language_count() {
88
let pool = utils::initialize_and_connect_to_test_sql().await;
99
let mut submissions = vec![

0 commit comments

Comments
 (0)