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]