bufreader/
main.rs

1use std::{
2    env,
3    fs::File,
4    io::{BufReader, Bytes, Read},
5};
6
7struct Adapter {
8    bytes: Bytes<BufReader<File>>,
9}
10
11impl Iterator for Adapter {
12    type Item = u8;
13    fn next(&mut self) -> Option<<Self as Iterator>::Item> {
14        match self.bytes.next() {
15            Some(Ok(v)) => Some(v),
16            _ => None,
17        }
18    }
19}
20
21fn main() {
22    let f = File::open(
23        env::current_dir()
24            .unwrap()
25            .join("examples")
26            .join("bufreader")
27            .join("bufreader-test.torrent"),
28    )
29    .unwrap();
30    let reader = BufReader::new(f);
31
32    let mut adapter = Adapter {
33        bytes: reader.bytes(),
34    };
35    let bnode = bencodex::parse(&mut adapter).unwrap();
36    let dict = bnode.as_dict().unwrap();
37    assert_eq!(
38        dict.get("bar").unwrap().as_bytes().unwrap(),
39        "spam".as_bytes()
40    );
41    assert_eq!(dict.get("foo").unwrap().as_integer().unwrap(), &42);
42}