bufferfish_core/
decodable.rs1use crate::{Bufferfish, BufferfishError};
4
5pub trait Decodable: Sized {
7 fn decode(bf: &mut Bufferfish) -> Result<Self, BufferfishError>;
9}
10
11impl Decodable for u8 {
12 fn decode(bf: &mut Bufferfish) -> Result<u8, BufferfishError> {
13 bf.read_u8().map_err(BufferfishError::from)
14 }
15}
16
17impl Decodable for u16 {
18 fn decode(bf: &mut Bufferfish) -> Result<u16, BufferfishError> {
19 bf.read_u16().map_err(BufferfishError::from)
20 }
21}
22
23impl Decodable for u32 {
24 fn decode(bf: &mut Bufferfish) -> Result<u32, BufferfishError> {
25 bf.read_u32().map_err(BufferfishError::from)
26 }
27}
28
29impl Decodable for i8 {
30 fn decode(bf: &mut Bufferfish) -> Result<i8, BufferfishError> {
31 bf.read_i8().map_err(BufferfishError::from)
32 }
33}
34
35impl Decodable for i16 {
36 fn decode(bf: &mut Bufferfish) -> Result<i16, BufferfishError> {
37 bf.read_i16().map_err(BufferfishError::from)
38 }
39}
40
41impl Decodable for i32 {
42 fn decode(bf: &mut Bufferfish) -> Result<i32, BufferfishError> {
43 bf.read_i32().map_err(BufferfishError::from)
44 }
45}
46
47impl Decodable for bool {
48 fn decode(bf: &mut Bufferfish) -> Result<bool, BufferfishError> {
49 bf.read_bool().map_err(BufferfishError::from)
50 }
51}
52
53impl Decodable for String {
54 fn decode(bf: &mut Bufferfish) -> Result<String, BufferfishError> {
55 bf.read_string().map_err(BufferfishError::from)
56 }
57}
58
59impl<T: Decodable> Decodable for Vec<T> {
60 fn decode(bf: &mut Bufferfish) -> Result<Vec<T>, BufferfishError> {
61 let len = bf.read_u16()? as usize;
62 let mut vec = Vec::with_capacity(len);
63 for _ in 0..len {
64 vec.push(T::decode(bf)?);
65 }
66 Ok(vec)
67 }
68}