wasm: Add bytes method to wasm response (#694)

the bytes method was missing from the Response object of the wasm32
compilation target.
This commit is contained in:
Christian Bourjau
2019-10-30 21:32:31 +01:00
committed by Sean McArthur
parent 43f2ff083c
commit b24b0be461
2 changed files with 19 additions and 1 deletions

View File

@@ -46,10 +46,10 @@ __internal_proxy_sys_no_cache = []
[dependencies]
http = "0.1.15"
url = "2.1"
bytes = "0.4"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
base64 = "0.11"
bytes = "0.4"
encoding_rs = "0.8"
futures-core-preview = { version = "=0.3.0-alpha.19" }
futures-util-preview = { version = "=0.3.0-alpha.19" }

View File

@@ -1,5 +1,7 @@
use std::fmt;
use bytes::Bytes;
use js_sys::Uint8Array;
use http::{HeaderMap, StatusCode};
/// A Response to a submitted `Request`.
@@ -60,6 +62,22 @@ impl Response {
Err(crate::error::decode("response.text isn't string"))
}
}
/// Get the response as bytes
pub async fn bytes(self) -> crate::Result<Bytes> {
let p = self.http.body().array_buffer()
.map_err(crate::error::wasm)
.map_err(crate::error::decode)?;
let buf_js = super::promise::<wasm_bindgen::JsValue>(p)
.await
.map_err(crate::error::decode)?;
let buffer = Uint8Array::new(&buf_js);
let mut bytes = vec![0; buffer.length() as usize];
buffer.copy_to(&mut bytes);
Ok(bytes.into())
}
}
impl fmt::Debug for Response {