wasm: add url function to wasm response (#777)
Adds the url function to wasm::Response
This commit is contained in:
committed by
Sean McArthur
parent
50c33a932e
commit
fd88e0c648
@@ -2,6 +2,7 @@ use http::Method;
|
||||
use js_sys::Uint8Array;
|
||||
use std::future::Future;
|
||||
use wasm_bindgen::UnwrapThrowExt as _;
|
||||
use url::Url;
|
||||
|
||||
use super::{Request, RequestBuilder, Response};
|
||||
use crate::IntoUrl;
|
||||
@@ -147,6 +148,8 @@ async fn fetch(req: Request) -> crate::Result<Response> {
|
||||
let mut resp = http::Response::builder()
|
||||
.status(js_resp.status());
|
||||
|
||||
let url = Url::parse(&js_resp.url()).expect_throw("url parse");
|
||||
|
||||
let js_headers = js_resp.headers();
|
||||
let js_iter = js_sys::try_iter(&js_headers)
|
||||
.expect_throw("headers try_iter")
|
||||
@@ -162,7 +165,7 @@ async fn fetch(req: Request) -> crate::Result<Response> {
|
||||
}
|
||||
|
||||
resp.body(js_resp)
|
||||
.map(Response::new)
|
||||
.map(|resp| Response::new(resp, url))
|
||||
.map_err(crate::error::request)
|
||||
}
|
||||
|
||||
|
||||
@@ -3,19 +3,24 @@ use std::fmt;
|
||||
use bytes::Bytes;
|
||||
use js_sys::Uint8Array;
|
||||
use http::{HeaderMap, StatusCode};
|
||||
use url::Url;
|
||||
|
||||
/// A Response to a submitted `Request`.
|
||||
pub struct Response {
|
||||
http: http::Response<web_sys::Response>,
|
||||
// Boxed to save space (11 words to 1 word), and it's not accessed
|
||||
// frequently internally.
|
||||
url: Box<Url>,
|
||||
}
|
||||
|
||||
impl Response {
|
||||
pub(super) fn new(
|
||||
res: http::Response<web_sys::Response>,
|
||||
//url: Url,
|
||||
url: Url,
|
||||
) -> Response {
|
||||
Response {
|
||||
http: res,
|
||||
url: Box::new(url),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +42,12 @@ impl Response {
|
||||
self.http.headers_mut()
|
||||
}
|
||||
|
||||
/// Get the final `Url` of this `Response`.
|
||||
#[inline]
|
||||
pub fn url(&self) -> &Url {
|
||||
&self.url
|
||||
}
|
||||
|
||||
/* It might not be possible to detect this in JS?
|
||||
/// Get the HTTP `Version` of this `Response`.
|
||||
#[inline]
|
||||
|
||||
Reference in New Issue
Block a user