Confusing error message for recursive type
I recently had a very frustrating issue. I wrote some code that didn't compile, but the error was really hard to track down. I've written a small example to illustrate the issue.
use std::io;
#[derive(Debug)]
struct Node {
data: Vec<u8>,
left: Option<Box<Node>>,
right: Option<Box<Node>>
}
impl Node {
fn deserialize<R: io::Read>(mut r: R) -> Option<Self> {
let size = io::Read::bytes(&mut r).next().unwrap().unwrap();
if size == 0 {
return None;
}
let data = io::Read::bytes(&mut r).take(size as usize).map(|v| v.unwrap()).collect();
let size = io::Read::bytes(&mut r).next().unwrap().unwrap();
let left = Node::deserialize(io::Read::take(&mut r, size as u64)).map(Box::new);
let size = io::Read::bytes(&mut r).next().unwrap().unwrap();
let right = Node::deserialize(io::Read::take(&mut r, size as u64)).map(Box::new);
Some(Self { data, left, right })
}
}
fn main() {
let tree = Node::deserialize(&vec![2, 1, 2, 6, 1, 3, 1, 0, 1, 0, 6, 1, 4, 1, 0, 1, 0][..]);
println!("{:?}", tree);
}
The above code doesn't compile and errors with the following error:
Compiling playground v0.0.1 (/playground)
error[E0275]: overflow evaluating the requirement `&[u8]: std::io::Read`
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate
= note: required because of the requirements on the impl of `std::io::Read` for `&mut &[u8]`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut &[u8]>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut &[u8]>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut &[u8]>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::io::Read` for `&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::iter::Iterator` for `std::io::Bytes<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Map<std::iter::Take<std::io::Bytes<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut std::io::Take<&mut &[u8]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, [closure@src/main.rs:16:68: 16:82]>`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0275`.
error: Could not compile `playground`.
To learn more, run the command again with --verbose.
The code doesn't compile because the combined use of Take + generics + recursion resulted in a type that was recursively defined. Adding a Box to the Take instances and casting to a trait object fixes the problem.
let size = io::Read::bytes(&mut r).next().unwrap().unwrap();
let left = Node::deserialize(Box::new(io::Read::take(&mut r, size as u64)) as Box<dyn io::Read>).map(Box::new);
let size = io::Read::bytes(&mut r).next().unwrap().unwrap();
let right = Node::deserialize(Box::new(io::Read::take(&mut r, size as u64)) as Box<dyn io::Read>).map(Box::new);
In the real code with the issue, there were more pieces involved and it was far far less obvious than the example I gave. Also the cyclical call graph involved was more complicated and some of the code was generated from a proc-macro. Debugging the issue was tricky and especially since the compiler gave almost no information about how to locate the code with the problem, just the type names it was resolving in the process. When you have a large crate that can be super frustrating. I know this is not really a bug, but I really wanted to provide this feedback. It would be great if the error message for this contained the call graph or some sort of span infomation.
Here's a very simple example of this.
#[allow(unconditional_recursion)] fn recurse(f: impl Fn()) { recurse(&f) } fn main() { recurse(|| {}); }error: reached the recursion limit while instantiating `recurse::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&[closure@src/main.rs:7:13: 7:18]>` --> src/main.rs:2:1 | 2 | / fn recurse(f: impl Fn()) { 3 | | recurse(&f) 4 | | } | |_^I chose
Fn()for simplicity, but you can replace it with any trait that hasimpl<T: MyTrait> MyTrait for &T.A better diagnostic could explain that
impl Traitneeds to resolve to a concrete type, and that an infinite number of layers of references clearly cannot be monomorphized.However, IMO the main issue is that if you remove
main(), there is no error! I think this should definitely be at least linted if not a hard error, since it is impossible to userecurse()(AFAIK???), so this is 99% guaranteed to be a mistake.Jacob Greenfield at 2020-02-15 07:14:48
Current output:
error[E0275]: overflow evaluating the requirement `&[u8]: std::io::Read` | = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`playground`) = note: required for `&mut &[u8]` to implement `std::io::Read` = note: 124 redundant requirements hidden = note: required for `&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut ...>>>>>>>>>` to implement `std::io::Read` = note: the full type name has been written to '/playground/target/debug/deps/playground-f2d9b096a48657b4.long-type-9480179040366613307.txt' = note: required for `Bytes<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<...>>>>>>>>>>` to implement `Iterator` = note: the full type name has been written to '/playground/target/debug/deps/playground-f2d9b096a48657b4.long-type-16953763181362058950.txt' = note: 1 redundant requirement hidden = note: required for `Map<Take<Bytes<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut ...>>>>>>>>>, ...>` to implement `Iterator` = note: the full type name has been written to '/playground/target/debug/deps/playground-f2d9b096a48657b4.long-type-1438242122856116579.txt' = note: required for `Map<Take<Bytes<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut Take<&mut ...>>>>>>>>>, ...>` to implement `IntoIterator` = note: the full type name has been written to '/playground/target/debug/deps/playground-f2d9b096a48657b4.long-type-1438242122856116579.txt'error: reached the recursion limit while instantiating `recurse::<&&&&&...>` --> src/main.rs:3:5 | 3 | recurse(&f) | ^^^^^^^^^^^ | note: `recurse` defined here --> src/main.rs:2:1 | 2 | fn recurse(f: impl Fn()) { | ^^^^^^^^^^^^^^^^^^^^^^^^ = note: the full type name has been written to '/playground/target/debug/deps/playground-f2d9b096a48657b4.long-type.txt'Esteban Kuber at 2023-08-03 16:31:51