treescript-interpreter 0.1.1

TreeScript interpreter, with some built-in libraries and API to create more
Documentation
use crate::value::Value;
use std::io;
use std::io::Write;

pub struct Printer<'a, W: Write> {
  pub output: &'a mut W,
}

impl<'a, W: Write> Printer<'a, W> {
  fn print_sub_value(&mut self, x: Value) -> io::Result<()> {
    match x {
      Value::Splice(idx) => return write!(self.output, "splice {} ", idx),
      Value::Prim(prim) => return write!(self.output, "{} {} ", prim.type_str(), prim),
      Value::Record { head, props } => {
        if let Err(err) = write!(self.output, "{} {} ", head, props.len()) {
          return Err(err);
        }
        for prop in props {
          if let Err(err) = self.print_sub_value(prop) {
            return Err(err);
          }
        }
        return Ok(());
      }
    }
  }

  fn print_newline(&mut self) -> io::Result<()> {
    return write!(self.output, "\n");
  }

  pub fn print_value(&mut self, x: Value) -> io::Result<()> {
    return self.print_sub_value(x).and_then(|()| self.print_newline());
  }
}