1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use std::{
    env,
    fs::File,
    io::{BufReader, Bytes, Read},
};

struct Adapter {
    bytes: Bytes<BufReader<File>>,
}

impl Iterator for Adapter {
    type Item = u8;
    fn next(&mut self) -> Option<<Self as Iterator>::Item> {
        match self.bytes.next() {
            Some(Ok(v)) => Some(v),
            _ => None,
        }
    }
}

fn main() {
    let f = File::open(
        env::current_dir()
            .unwrap()
            .join("examples")
            .join("bufreader")
            .join("bufreader-test.torrent"),
    )
    .unwrap();
    let reader = BufReader::new(f);

    let mut adapter = Adapter {
        bytes: reader.bytes(),
    };
    let bnode = bencodex::parse(&mut adapter).unwrap();
    let dict = bnode.as_dict().unwrap();
    assert_eq!(
        dict.get("bar").unwrap().as_bytes().unwrap(),
        "spam".as_bytes()
    );
    assert_eq!(dict.get("foo").unwrap().as_integer().unwrap(), &42);
}