Hyper имеет функцию fn read(&mut self, buf: &mut [u8]) -> io::Result<usize>
для чтения содержимого ответа HTTP в предоставленный &mut [u8]
.
Flate2 может распаковать:
let mut d = GzDecoder::new("...".as_bytes()).unwrap();
let mut s = String::new();
d.read_to_string(&mut s).unwrap();
println!("{}", s);
Я пытаюсь соединить две вещи:
fn gunzip(r: &Response) -> String {
let mut zs: &mut [u8] = &mut[];
r.read(zs);
let mut d = GzDecoder::new(zs).unwrap();
let mut s = String::new();
d.read_to_string(&mut s).unwrap();
s
}
И я получаю ошибку:
error[E0277]: the trait bound `[u8]: std::io::Read` is not satisfied
--> tests/integration.rs:232:21
|
232 | let mut d = GzDecoder::new(zs).unwrap();
| ^^^^^^^^^^^^^^ trait `[u8]: std::io::Read` not satisfied
|
= help: the following implementations were found:
= help: <&'a [u8] as std::io::Read>
= note: required because of the requirements on the impl of `std::io::Read` for `&mut [u8]`
= note: required by `<flate2::read::DecoderReader<R>>::new`
Где я ошибаюсь?
Изменить: окончательное рабочее решение:
fn gunzip(r: &mut Response) -> String {
let mut buffer = Vec::new();
let _ = r.read_to_end(&mut buffer).unwrap();
let mut d = GzDecoder::new(buffer.as_slice()).unwrap();
let mut s = String::new();
d.read_to_string(&mut s).unwrap();
s
}
&zs
]. Результатов вtrait '&&mut [u8]: std::io::Read' not satisfied
. - person Synesso   schedule 28.10.2016[]
- это массив длины 0, не позволяющий расти. Это означает, что чтение в конце концов ничего не даст. Испытайте удачу сVec
, если хотите прочитать все, например, через _ 3_ - person Neikos   schedule 28.10.2016r
и передавать этоGzDecoder
, поскольку он принимает типы, реализующиеRead
, что делает клиентResponse
. - person squiguy   schedule 28.10.2016