@@ -5,7 +5,16 @@ use crate::{Bufferfish, BufferfishError};
55/// Types implementing this trait are able to be decoded from a `Bufferfish`.
66pub trait Decodable : Sized {
77 /// Decode the type from a given `Bufferfish`.
8- fn decode ( bf : & mut Bufferfish ) -> Result < Self , BufferfishError > ;
8+ fn decode ( bf : & mut Bufferfish ) -> Result < Self , BufferfishError > {
9+ Self :: decode_value ( bf)
10+ }
11+
12+ /// Decodes a raw value from a given `Bufferfish`.
13+ ///
14+ /// Note: This is generally not what you want to call on types
15+ /// implementing `Decodable`, as it will not decode the header value.
16+ /// Instead, use `decode` to decode an entire type.
17+ fn decode_value ( bf : & mut Bufferfish ) -> Result < Self , BufferfishError > ;
918
1019 /// Creates a checked, generic type from a `Bufferfish`.
1120 ///
@@ -47,7 +56,7 @@ pub trait Decodable: Sized {
4756}
4857
4958impl Decodable for u8 {
50- fn decode ( bf : & mut Bufferfish ) -> Result < u8 , BufferfishError > {
59+ fn decode_value ( bf : & mut Bufferfish ) -> Result < u8 , BufferfishError > {
5160 bf. read_u8 ( )
5261 }
5362
@@ -61,7 +70,7 @@ impl Decodable for u8 {
6170}
6271
6372impl Decodable for u16 {
64- fn decode ( bf : & mut Bufferfish ) -> Result < u16 , BufferfishError > {
73+ fn decode_value ( bf : & mut Bufferfish ) -> Result < u16 , BufferfishError > {
6574 bf. read_u16 ( )
6675 }
6776
@@ -75,7 +84,7 @@ impl Decodable for u16 {
7584}
7685
7786impl Decodable for u32 {
78- fn decode ( bf : & mut Bufferfish ) -> Result < u32 , BufferfishError > {
87+ fn decode_value ( bf : & mut Bufferfish ) -> Result < u32 , BufferfishError > {
7988 bf. read_u32 ( )
8089 }
8190
@@ -89,7 +98,7 @@ impl Decodable for u32 {
8998}
9099
91100impl Decodable for u64 {
92- fn decode ( bf : & mut Bufferfish ) -> Result < u64 , BufferfishError > {
101+ fn decode_value ( bf : & mut Bufferfish ) -> Result < u64 , BufferfishError > {
93102 bf. read_u64 ( )
94103 }
95104
@@ -103,7 +112,7 @@ impl Decodable for u64 {
103112}
104113
105114impl Decodable for u128 {
106- fn decode ( bf : & mut Bufferfish ) -> Result < u128 , BufferfishError > {
115+ fn decode_value ( bf : & mut Bufferfish ) -> Result < u128 , BufferfishError > {
107116 bf. read_u128 ( )
108117 }
109118
@@ -117,7 +126,7 @@ impl Decodable for u128 {
117126}
118127
119128impl Decodable for i8 {
120- fn decode ( bf : & mut Bufferfish ) -> Result < i8 , BufferfishError > {
129+ fn decode_value ( bf : & mut Bufferfish ) -> Result < i8 , BufferfishError > {
121130 bf. read_i8 ( )
122131 }
123132
@@ -131,7 +140,7 @@ impl Decodable for i8 {
131140}
132141
133142impl Decodable for i16 {
134- fn decode ( bf : & mut Bufferfish ) -> Result < i16 , BufferfishError > {
143+ fn decode_value ( bf : & mut Bufferfish ) -> Result < i16 , BufferfishError > {
135144 bf. read_i16 ( )
136145 }
137146
@@ -145,7 +154,7 @@ impl Decodable for i16 {
145154}
146155
147156impl Decodable for i32 {
148- fn decode ( bf : & mut Bufferfish ) -> Result < i32 , BufferfishError > {
157+ fn decode_value ( bf : & mut Bufferfish ) -> Result < i32 , BufferfishError > {
149158 bf. read_i32 ( )
150159 }
151160
@@ -159,7 +168,7 @@ impl Decodable for i32 {
159168}
160169
161170impl Decodable for i64 {
162- fn decode ( bf : & mut Bufferfish ) -> Result < i64 , BufferfishError > {
171+ fn decode_value ( bf : & mut Bufferfish ) -> Result < i64 , BufferfishError > {
163172 bf. read_i64 ( )
164173 }
165174
@@ -173,7 +182,7 @@ impl Decodable for i64 {
173182}
174183
175184impl Decodable for i128 {
176- fn decode ( bf : & mut Bufferfish ) -> Result < i128 , BufferfishError > {
185+ fn decode_value ( bf : & mut Bufferfish ) -> Result < i128 , BufferfishError > {
177186 bf. read_i128 ( )
178187 }
179188
@@ -187,7 +196,7 @@ impl Decodable for i128 {
187196}
188197
189198impl Decodable for bool {
190- fn decode ( bf : & mut Bufferfish ) -> Result < bool , BufferfishError > {
199+ fn decode_value ( bf : & mut Bufferfish ) -> Result < bool , BufferfishError > {
191200 bf. read_bool ( )
192201 }
193202
@@ -201,7 +210,7 @@ impl Decodable for bool {
201210}
202211
203212impl Decodable for String {
204- fn decode ( bf : & mut Bufferfish ) -> Result < String , BufferfishError > {
213+ fn decode_value ( bf : & mut Bufferfish ) -> Result < String , BufferfishError > {
205214 bf. read_string ( )
206215 }
207216
@@ -215,12 +224,12 @@ impl Decodable for String {
215224}
216225
217226impl < T : Decodable > Decodable for Vec < T > {
218- fn decode ( bf : & mut Bufferfish ) -> Result < Vec < T > , BufferfishError > {
227+ fn decode_value ( bf : & mut Bufferfish ) -> Result < Vec < T > , BufferfishError > {
219228 let len = bf. read_u16 ( ) ? as usize ;
220229 let mut vec = Vec :: with_capacity ( len) ;
221230
222231 for _ in 0 ..len {
223- vec. push ( T :: decode ( bf) ?) ;
232+ vec. push ( T :: decode_value ( bf) ?) ;
224233 }
225234
226235 Ok ( vec)
0 commit comments