@@ -4,100 +4,104 @@ use crate::{Bufferfish, BufferfishError};
44
55/// Types implementing this trait are able to be encoded to a `Bufferfish`.
66pub trait Encodable : Sized {
7- /// Encode the type into a given `Bufferfish`.
8- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > ;
7+ /// Encode this type into a given `Bufferfish`.
8+ fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
9+ self . encode_value ( bf)
10+ }
11+
12+ /// Encodes a raw value into a given `Bufferfish`.
13+ ///
14+ /// Note: This is generally not what you want to call on types
15+ /// implementing `Encodable`, as it will not encode the header value.
16+ /// Instead, use `encode` to encode an entire type.
17+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > ;
918
1019 /// Encode the type into a new `Bufferfish`.
20+ ///
21+ /// Note: As this allocates a new `Bufferfish`, consider using
22+ /// `encode` instead and reusing a previously allocated `Bufferfish`.
1123 fn to_bufferfish ( & self ) -> Result < Bufferfish , BufferfishError > {
1224 let mut bf = Bufferfish :: new ( ) ;
1325 self . encode ( & mut bf) ?;
1426
1527 Ok ( bf)
1628 }
17-
18- /// Encode this type into a provided `Bufferfish` buffer.
19- ///
20- /// This is useful when you want to reuse an existing buffer to avoid
21- /// allocations.
22- fn encode_into ( self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
23- self . encode ( bf)
24- }
2529}
2630
2731impl Encodable for u8 {
28- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
32+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
2933 bf. write_u8 ( * self )
3034 }
3135}
3236
3337impl Encodable for u16 {
34- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
38+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
3539 bf. write_u16 ( * self )
3640 }
3741}
3842
3943impl Encodable for u32 {
40- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
44+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
4145 bf. write_u32 ( * self )
4246 }
4347}
4448
4549impl Encodable for u64 {
46- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
50+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
4751 bf. write_u64 ( * self )
4852 }
4953}
5054
5155impl Encodable for u128 {
52- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
56+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
5357 bf. write_u128 ( * self )
5458 }
5559}
5660
5761impl Encodable for i8 {
58- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
62+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
5963 bf. write_i8 ( * self )
6064 }
6165}
6266
6367impl Encodable for i16 {
64- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
68+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
6569 bf. write_i16 ( * self )
6670 }
6771}
6872
6973impl Encodable for i32 {
70- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
74+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
7175 bf. write_i32 ( * self )
7276 }
7377}
7478
7579impl Encodable for i64 {
76- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
80+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
7781 bf. write_i64 ( * self )
7882 }
7983}
8084
8185impl Encodable for i128 {
82- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
86+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
8387 bf. write_i128 ( * self )
8488 }
8589}
8690
8791impl Encodable for bool {
88- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
92+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
8993 bf. write_bool ( * self )
9094 }
9195}
9296
9397impl Encodable for String {
94- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
98+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
9599 bf. write_string ( self )
96100 }
97101}
98102
99103impl < T : Encodable > Encodable for Vec < T > {
100- fn encode ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
104+ fn encode_value ( & self , bf : & mut Bufferfish ) -> Result < ( ) , BufferfishError > {
101105 bf. write_array ( self )
102106 }
103107}
0 commit comments