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