У меня есть черта, которая ожидает либо reqwest :: Response , либо Vec в качестве аргумента, только для того, чтобы выбросить их в select :: document :: Document ,Для этого мне нужно как-то получить реализацию io::Read
для Vec<u8>
, чтобы использовать Document::from_read
.
Вот что я придумал:
use select::document::Document;
use std::{io::Read, io::Result};
#[derive(Debug)]
pub struct ReadableVec<T>(Vec<T>);
impl Read for ReadableVec<u8> {
fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
println!("Read!");
let mut r: &[u8] = &self.0[..];
r.read(buf) //< issue is here!!
}
}
fn main() {
let buf = ReadableVec(vec![60, 116]);
let doc = Document::from_read(buf);
println!("{:?}", doc)
}
Мой вопрос: почему r.read(buf)
вызывает Read
реализацию ReadableVec
вместо &[u8]
, что заставляет мою функцию рекурсивно вызывать себя? Тип r
кажется очень четко указанным в строке выше.
PS: если есть лучшее решение для обработки Vec<u8>
и reqwest::Response
, это будет оценено в комментариях! ;)