Support Cloudflare workers runtime (#1081)
This commit is contained in:
@@ -129,9 +129,9 @@ winreg = "0.7"
|
|||||||
# wasm
|
# wasm
|
||||||
|
|
||||||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||||
js-sys = "0.3.28"
|
js-sys = "0.3.45"
|
||||||
wasm-bindgen = { version = "0.2.51", features = ["serde-serialize"] }
|
wasm-bindgen = { version = "0.2.68", features = ["serde-serialize"] }
|
||||||
wasm-bindgen-futures = "0.4.1"
|
wasm-bindgen-futures = "0.4.18"
|
||||||
|
|
||||||
[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
|
[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
|
||||||
version = "0.3.25"
|
version = "0.3.25"
|
||||||
@@ -145,6 +145,7 @@ features = [
|
|||||||
"FormData",
|
"FormData",
|
||||||
"Blob",
|
"Blob",
|
||||||
"BlobPropertyBag",
|
"BlobPropertyBag",
|
||||||
|
"ServiceWorkerGlobalScope",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
|
|||||||
@@ -13,6 +13,22 @@ extern "C" {
|
|||||||
fn fetch_with_request(input: &web_sys::Request) -> Promise;
|
fn fetch_with_request(input: &web_sys::Request) -> Promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn js_fetch(req: &web_sys::Request) -> Promise {
|
||||||
|
use wasm_bindgen::{JsCast, JsValue};
|
||||||
|
let global = js_sys::global();
|
||||||
|
|
||||||
|
if let Some(true) =
|
||||||
|
js_sys::Reflect::has(&global, &JsValue::from_str("ServiceWorkerGlobalScope")).ok()
|
||||||
|
{
|
||||||
|
global
|
||||||
|
.unchecked_into::<web_sys::ServiceWorkerGlobalScope>()
|
||||||
|
.fetch_with_request(req)
|
||||||
|
} else {
|
||||||
|
// browser
|
||||||
|
fetch_with_request(req)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// dox
|
/// dox
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Client(());
|
pub struct Client(());
|
||||||
@@ -168,7 +184,7 @@ async fn fetch(req: Request) -> crate::Result<Response> {
|
|||||||
.map_err(crate::error::builder)?;
|
.map_err(crate::error::builder)?;
|
||||||
|
|
||||||
// Await the fetch() promise
|
// Await the fetch() promise
|
||||||
let p = fetch_with_request(&js_req);
|
let p = js_fetch(&js_req);
|
||||||
let js_resp = super::promise::<web_sys::Response>(p)
|
let js_resp = super::promise::<web_sys::Response>(p)
|
||||||
.await
|
.await
|
||||||
.map_err(crate::error::request)?;
|
.map_err(crate::error::request)?;
|
||||||
|
|||||||
Reference in New Issue
Block a user