Hyperは、&mut [u8]
にHTTP応答の内容を読み取る関数fn read(&mut self, buf: &mut [u8]) -> io::Result<usize>
を持っています。ハイパーとFlate2でgzip応答を読み取る
Flate2にgunzipすることができます
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'となります。 – Synesso
もう1つ追加することはできますか? (それは馬鹿だと思うが、[遊び場](https://play.rust-lang.org/?code=use%20std%3A%3Aio%3A%3ARead%3B%0A%0Afn%20foo(r %3A%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%20%3D 20%5B8u 8%2C%206%2C%207%5D%3B%0A%20%20%20%20%20%20%20%20%3D%20%26A%3B%0A%20% 20%20%20%0Aの%20%20%20%20foo(%26%26bind%の5B ..%の5D)%3B%の0A%7D&バージョン=安定&バックトレース= 0)) – Neikos
'新しいGzDecoder ::(&& ZS).unwrap () '=>' trait '&&& mut [u8]:std :: io ::読み込みが不満です。 – Synesso