ralix 0.2.0

A simple, type-safe, tree walking interpreter
use std::{fmt::Display, io};

pub struct Logger<W: io::Write> {
    writer: W,
}

const ERROR_PREFIX: &str = "\x1b[1;31mError\x1b[0m: ";
const INFO_PREFIX: &str = "\x1b[1;34mInfo\x1b[0m: ";
const WARN_PREFIX: &str = "\x1b[1;33mWarning\x1b[0m: ";

impl<W: io::Write> Logger<W> {
    pub const fn new(writer: W) -> Logger<W> {
        Logger { writer }
    }

    pub fn info<D: Display>(&mut self, msg: D) -> io::Result<()> {
        writeln!(self.writer, "{INFO_PREFIX}{msg}")
    }

    pub fn warn<D: Display>(&mut self, msg: D) -> io::Result<()> {
        writeln!(self.writer, "{WARN_PREFIX}{msg}")
    }

    pub fn error<D: Display>(&mut self, msg: D) -> io::Result<()> {
        writeln!(self.writer, "{ERROR_PREFIX}{msg}")
    }
}