From a88f23923dd5d5ce4cc71439b057b8c707d13bc0 Mon Sep 17 00:00:00 2001 From: koko Date: Thu, 5 Sep 2024 09:50:04 +0200 Subject: [PATCH] Use an request method provided by Handler instead of GET --- packages/net/Cargo.toml | 3 ++- packages/net/src/lib.rs | 5 +++++ packages/net/src/provider/blocking.rs | 10 +++++++--- packages/net/src/provider/non_blocking.rs | 3 ++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/net/Cargo.toml b/packages/net/Cargo.toml index 3c3ec5af..840f48f0 100644 --- a/packages/net/Cargo.toml +++ b/packages/net/Cargo.toml @@ -8,8 +8,9 @@ tokio = { workspace = true, optional = true } reqwest = { version = "0.12.7", optional = true } winit = { version = "0.30.5", optional = true } futures-util = { version = "0.3.30", optional = true } -ureq = { version = "2.10.1", optional = true} +ureq = { version = "2.10.1", optional = true } +http = "1.1.0" url = "2.5.2" data-url = "0.3.1" tracing = "0.1.40" diff --git a/packages/net/src/lib.rs b/packages/net/src/lib.rs index 988c9e1b..42a69d1f 100644 --- a/packages/net/src/lib.rs +++ b/packages/net/src/lib.rs @@ -3,6 +3,8 @@ mod provider; use std::ops::Deref; use url::Url; +pub use http::Method; + pub use provider::*; const USER_AGENT: &str = "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0"; @@ -28,6 +30,9 @@ where pub trait RequestHandler: Send + Sync + 'static { fn bytes(self, bytes: &[u8]) -> T; + fn method(&self) -> Method { + Method::GET + } } impl T + Sync + Send + 'static, T> RequestHandler for F { fn bytes(self, bytes: &[u8]) -> T { diff --git a/packages/net/src/provider/blocking.rs b/packages/net/src/provider/blocking.rs index fa6ff031..ac4094dd 100644 --- a/packages/net/src/provider/blocking.rs +++ b/packages/net/src/provider/blocking.rs @@ -11,7 +11,11 @@ impl SyncProvider { pub fn new() -> Self { Self(RefCell::new(Vec::new())) } - fn fetch_inner(&self, url: Url) -> Result, SyncProviderError> { + fn fetch_inner>( + &self, + url: Url, + handler: &H, + ) -> Result, SyncProviderError> { Ok(match url.scheme() { "data" => { let data_url = data_url::DataUrl::process(url.as_str())?; @@ -23,7 +27,7 @@ impl SyncProvider { file_content } _ => { - let response = ureq::get(url.as_str()) + let response = ureq::request(handler.method().as_str(), url.as_str()) .set("User-Agent", USER_AGENT) .call()?; @@ -46,7 +50,7 @@ impl NetProvider for SyncProvider { where H: RequestHandler, { - let res = match self.fetch_inner(url) { + let res = match self.fetch_inner(url, &handler) { Ok(v) => v, Err(e) => { tracing::error!("{e}"); diff --git a/packages/net/src/provider/non_blocking.rs b/packages/net/src/provider/non_blocking.rs index a088f9ba..12b65bef 100644 --- a/packages/net/src/provider/non_blocking.rs +++ b/packages/net/src/provider/non_blocking.rs @@ -73,8 +73,9 @@ impl AsyncProvider { } _ => { let start = tokio::time::Instant::now(); + let response = client - .get(url.clone()) + .request(handler.method(), url.clone()) .header("User-Agent", USER_AGENT) .send() .await?;