use reqwest_middleware::{Middleware, Next};
pub struct WasmProxyMiddleware {
proxy_url: String,
}
impl WasmProxyMiddleware {
pub fn new(proxy_url: String) -> Self {
Self { proxy_url }
}
}
#[cfg_attr(all(target_arch = "wasm32", feature = "wasm"), async_trait::async_trait(?Send))]
#[cfg_attr(
not(all(target_arch = "wasm32", feature = "wasm")),
async_trait::async_trait
)]
impl Middleware for WasmProxyMiddleware {
async fn handle(
&self,
mut req: reqwest::Request,
extensions: &mut http::Extensions,
next: Next<'_>,
) -> reqwest_middleware::Result<reqwest::Response> {
let original = req.url().to_string();
let proxied = format!("{}{}", self.proxy_url, urlencoding::encode(&original));
*req.url_mut() = proxied.parse().unwrap();
next.run(req, extensions).await
}
}