bencode_encoder/
decoder.rs

1use std::fs::File;
2use std::io::{BufReader, Read};
3use std::path::Path;
4
5use crate::errors::BencodeResult;
6use crate::protocol::decode;
7use crate::types::Type;
8
9pub struct Decoder;
10
11impl Decoder {
12    pub fn decode<I>(it: &mut I) -> BencodeResult<Type>
13    where
14        I: Iterator<Item = u8>
15    {
16        match decode(it) {
17            Err(err) => Err(err.into()),
18            Ok(t) => Ok(t),
19        }
20    }
21
22    pub fn decode_from<P>(path: P) -> BencodeResult<Type>
23    where
24        P: AsRef<Path>
25    {
26        let file = File::open(path)?;
27        let mut reader = BufReader::new(file).bytes().map(|c| c.unwrap());
28        let decoded = decode(&mut reader)?;
29
30        Ok(decoded)
31    }
32}