Rust 实现readtrait:trait绑定的'std::error::error+';静态:std::marker::Sized`不满足
我想为结构实现Rust 实现readtrait:trait绑定的'std::error::error+';静态:std::marker::Sized`不满足,rust,Rust,我想为结构实现Read特性,以便在BufReader中使用它来传递到库。库使用BufReader作为输入,因为它应该与Stdin一起工作,并与实现读取的内存中对象一起工作 use std::error::Error; use std::io::Read; pub struct Test { counter: u8, } impl Test { pub fn new() -> Test { Test { counter: 0 } } } impl
Read
特性,以便在BufReader
中使用它来传递到库。库使用BufReader
作为输入,因为它应该与Stdin
一起工作,并与实现读取的内存中对象一起工作
use std::error::Error;
use std::io::Read;
pub struct Test {
counter: u8,
}
impl Test {
pub fn new() -> Test {
Test { counter: 0 }
}
}
impl Iterator for Test {
type Item = String;
fn next(&mut self) -> Option<Self::Item> {
if self.counter < 2 {
self.counter += 1;
return Some("String".to_string());
}
None
}
}
impl Read for Test {
fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error> {
let content = self.next();
match content {
None => Err(std::io::Error::new(
std::io::ErrorKind::Other,
"End of Iterator",
)),
Some(string) => {
let mut i = 0;
loop {
if i >= buf.len() || i >= string.len() {
break;
}
buf[i] = string[i];
i += 1;
}
Ok(i)
}
}
}
}
fn main() {
let test = Test::new();
let reader = std::io::BufReader::new(test);
// let filter = lib_that_uses_bufreader::useful_function(reader);
}
我自己构建了这个库,因此可以对它进行更改,但它与Stdin的配合非常好,现在我想将它与struct一起使用。该库使用BufReader::lines
,因此可以与迭代器交换,但据我所知,这将破坏与Stdin
的兼容性,因为我只能围绕Stdin
构建BufReader
,而不是迭代器
如何解决此错误?哪个错误对象在编译时具有已知的常量大小?返回
Result<usize, std::io::Error>
一个“特质对象”,但我不明白在这种情况下为什么要这样做。返回
Result<usize, std::io::Error>
一个“特质对象”,但我不明白你为什么会在这种情况下
Result<usize, Box<dyn Error>>