From dbc2772e63d8d61243b7ce9d2ad76459b41c3f8b Mon Sep 17 00:00:00 2001 From: rvcas Date: Sat, 21 May 2022 20:13:49 -0400 Subject: [PATCH] feat: start flat encoder --- src/flat.rs | 29 +++++++++++++++++++++++++++++ src/lib.rs | 1 + 2 files changed, 30 insertions(+) create mode 100644 src/flat.rs diff --git a/src/flat.rs b/src/flat.rs new file mode 100644 index 00000000..a8991206 --- /dev/null +++ b/src/flat.rs @@ -0,0 +1,29 @@ +pub trait Encode { + fn encode(&self, e: &mut Encoder) -> Result<(), String>; +} + +pub struct Encoder { + pub bytes: Vec, +} + +impl Default for Encoder { + fn default() -> Self { + Self::new() + } +} + +impl Encoder { + pub fn new() -> Encoder { + Encoder { bytes: Vec::new() } + } + + /// Encode any type that implements [`Encode`]. + pub fn encode(&mut self, x: T) -> Result<&mut Self, String> { + x.encode(self)?; + Ok(self) + } + + pub fn u8(&mut self, x: u8) -> Result<&mut Self, String> { + todo!() + } +} diff --git a/src/lib.rs b/src/lib.rs index 8f60fde7..d912086e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,7 @@ pub mod ast; pub mod builtins; pub mod cli; +pub mod flat; pub mod parser; #[macro_use]