Skip to content

Commit d8343dd

Browse files
committed
Filly mirror the new Encodable API
1 parent 923d7c4 commit d8343dd

File tree

2 files changed

+42
-17
lines changed

2 files changed

+42
-17
lines changed

rust/bufferfish-core/src/decodable.rs

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,16 @@ use crate::{Bufferfish, BufferfishError};
55
/// Types implementing this trait are able to be decoded from a `Bufferfish`.
66
pub 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

4958
impl 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

6372
impl 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

7786
impl 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

91100
impl 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

105114
impl 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

119128
impl 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

133142
impl 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

147156
impl 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

161170
impl 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

175184
impl 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

189198
impl 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

203212
impl 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

217226
impl<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)

rust/bufferfish-derive/src/lib.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ pub fn bufferfish_impl_decodable(input: proc_macro::TokenStream) -> proc_macro::
108108
let ident = field.ident.as_ref().expect("named fields required");
109109
let ty = &field.ty;
110110
quote! {
111-
#ident: <#ty as bufferfish::Decodable>::decode(bf)?,
111+
#ident: <#ty as bufferfish::Decodable>::decode_value(bf)?,
112112
}
113113
})
114114
.collect::<Vec<_>>(),
@@ -118,7 +118,7 @@ pub fn bufferfish_impl_decodable(input: proc_macro::TokenStream) -> proc_macro::
118118
.map(|field| {
119119
let ty = &field.ty;
120120
quote! {
121-
<#ty as bufferfish::Decodable>::decode(bf)?,
121+
<#ty as bufferfish::Decodable>::decode_value(bf)?,
122122
}
123123
})
124124
.collect::<Vec<_>>(),
@@ -218,6 +218,10 @@ pub fn bufferfish_impl_decodable(input: proc_macro::TokenStream) -> proc_macro::
218218
impl bufferfish::Decodable for #name {
219219
fn decode(bf: &mut bufferfish::Bufferfish) -> Result<Self, bufferfish::BufferfishError> {
220220
#packet_id_snippet
221+
Self::decode_value(bf)
222+
}
223+
224+
fn decode_value(bf: &mut bufferfish::Bufferfish) -> Result<Self, bufferfish::BufferfishError> {
221225
Ok(Self {
222226
#(#decoded_snippets)*
223227
})
@@ -244,6 +248,10 @@ pub fn bufferfish_impl_decodable(input: proc_macro::TokenStream) -> proc_macro::
244248
impl bufferfish::Decodable for #name {
245249
fn decode(bf: &mut bufferfish::Bufferfish) -> Result<Self, bufferfish::BufferfishError> {
246250
#packet_id_snippet
251+
Self::decode_value(bf)
252+
}
253+
254+
fn decode_value(bf: &mut bufferfish::Bufferfish) -> Result<Self, bufferfish::BufferfishError> {
247255
Ok(Self(
248256
#(#decoded_snippets)*
249257
))
@@ -270,6 +278,10 @@ pub fn bufferfish_impl_decodable(input: proc_macro::TokenStream) -> proc_macro::
270278
impl bufferfish::Decodable for #name {
271279
fn decode(bf: &mut bufferfish::Bufferfish) -> Result<Self, bufferfish::BufferfishError> {
272280
#packet_id_snippet
281+
Self::decode_value(bf)
282+
}
283+
284+
fn decode_value(bf: &mut bufferfish::Bufferfish) -> Result<Self, bufferfish::BufferfishError> {
273285
Ok(Self)
274286
}
275287

@@ -291,6 +303,10 @@ pub fn bufferfish_impl_decodable(input: proc_macro::TokenStream) -> proc_macro::
291303
impl bufferfish::Decodable for #name {
292304
fn decode(bf: &mut bufferfish::Bufferfish) -> Result<Self, bufferfish::BufferfishError> {
293305
#packet_id_snippet
306+
Self::decode_value(bf)
307+
}
308+
309+
fn decode_value(bf: &mut bufferfish::Bufferfish) -> Result<Self, bufferfish::BufferfishError> {
294310
let variant_idx = bf.read_u8()?;
295311
Ok(match variant_idx {
296312
#(#decoded_snippets)*

0 commit comments

Comments
 (0)