bufferfish_core/
encodable.rs

1//! Types implementing this trait are able to be encoded to a `Bufferfish`. Implements encoding for primitive types.
2
3use crate::{Bufferfish, BufferfishError};
4
5/// Types implementing this trait are able to be encoded to a `Bufferfish`.
6pub trait Encodable {
7    /// Encode the type into a given `Bufferfish`.
8    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError>;
9
10    /// Encode the type into a new `Bufferfish`.
11    fn to_bufferfish(&self) -> Result<Bufferfish, BufferfishError> {
12        let mut bf = Bufferfish::new();
13        self.encode(&mut bf)?;
14
15        Ok(bf)
16    }
17}
18
19impl Encodable for u8 {
20    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError> {
21        bf.write_u8(*self)
22    }
23}
24
25impl Encodable for u16 {
26    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError> {
27        bf.write_u16(*self)
28    }
29}
30
31impl Encodable for u32 {
32    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError> {
33        bf.write_u32(*self)
34    }
35}
36
37impl Encodable for i8 {
38    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError> {
39        bf.write_i8(*self)
40    }
41}
42
43impl Encodable for i16 {
44    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError> {
45        bf.write_i16(*self)
46    }
47}
48
49impl Encodable for i32 {
50    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError> {
51        bf.write_i32(*self)
52    }
53}
54
55impl Encodable for bool {
56    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError> {
57        bf.write_bool(*self)
58    }
59}
60
61impl Encodable for String {
62    fn encode(&self, bf: &mut Bufferfish) -> Result<(), BufferfishError> {
63        bf.write_string(self)
64    }
65}