diff --git a/crates/flat/src/encode.rs b/crates/flat/src/encode.rs index 22935cfe..b747278b 100644 --- a/crates/flat/src/encode.rs +++ b/crates/flat/src/encode.rs @@ -12,6 +12,14 @@ impl Encode for bool { } } +impl Encode for u8 { + fn encode(&self, e: &mut Encoder) -> Result<(), String> { + e.u8(*self)?; + + Ok(()) + } +} + impl Encode for (T, K) where T: Encode, diff --git a/crates/flat/src/encoder.rs b/crates/flat/src/encoder.rs index 4ac01dee..24b2e7a4 100644 --- a/crates/flat/src/encoder.rs +++ b/crates/flat/src/encoder.rs @@ -30,7 +30,14 @@ impl Encoder { } pub fn u8(&mut self, x: u8) -> Result<&mut Self, String> { - todo!() + if self.used_bits == 0 { + self.current_byte = x; + self.next_word(); + } else { + todo!() + } + + Ok(self) } /// Encode a `bool` value. diff --git a/crates/flat/src/lib.rs b/crates/flat/src/lib.rs index 1c0c1334..e9b3b107 100644 --- a/crates/flat/src/lib.rs +++ b/crates/flat/src/lib.rs @@ -30,4 +30,11 @@ mod test { assert_eq!(bytes, vec![0b00000001]); } + + #[test] + fn encode_u8() { + let bytes = super::encode(3_u8).unwrap(); + + assert_eq!(bytes, vec![0b00000011, 0b00000001]); + } }