1use crate::buffer::InputSource;
4use crate::decode_from::DecodeFrom;
5use crate::Result;
6use core::ops::{Deref, DerefMut};
7
8pub struct Decoder<I: InputSource> {
10 input: I,
12}
13
14impl<I: InputSource> Decoder<I> {
15 pub fn new(underlying: I) -> Self {
17 Self { input: underlying }
18 }
19
20 pub fn decode<T: DecodeFrom>(&mut self) -> Result<T> {
22 T::decode_from(self)
23 }
24}
25
26impl<I: InputSource> Deref for Decoder<I> {
28 type Target = I;
29
30 fn deref(&self) -> &Self::Target {
31 &self.input
32 }
33}
34
35impl<I: InputSource> DerefMut for Decoder<I> {
37 fn deref_mut(&mut self) -> &mut Self::Target {
38 &mut self.input
39 }
40}