simple-shell 0.0.1

A simple no_std shell for embedded systems
Documentation
use core::fmt::Write;

pub(crate) struct Writer {
    print: fn(&str),
}

impl core::fmt::Write for Writer {
    fn write_str(&mut self, s: &str) -> core::fmt::Result {
        (self.print)(s);
        Ok(())
    }
}

impl Writer {
    pub fn new(print: fn(&str)) -> Self {
        Self { print }
    }

    pub fn print(&mut self, t: &str) {
        self.write_str(t).unwrap();
    }

    pub fn print_args(&mut self, t: core::fmt::Arguments) {
        self.write_fmt(t).unwrap();
    }
}

macro_rules! print {
    ($writer:expr, $fmt:literal$(, $($arg: tt)+)?) => {
        $writer.print_args(format_args!($fmt $(,$($arg)+)?))
    }
}

macro_rules! println {
    ($writer:expr, $fmt:literal$(, $($arg: tt)+)?) => {{
        $crate::print!($writer, $fmt $(,$($arg)+)?);
        $writer.print("\n");
    }};
    () => {
      $writer.print("\n");
    }
}

pub(crate) use print;
pub(crate) use println;