playdate-rs 0.0.12

Safe Rust bindings for the Playdate SDK C-CPI
Documentation
use core::fmt::{self, Write};

use alloc::string::String;

use crate::PLAYDATE;

#[doc(hidden)]
#[cold]
pub fn _println(args: fmt::Arguments<'_>) {
    let logger = unsafe { &mut LOGGER };
    logger.write_fmt(args).unwrap();
    logger.flush();
}

#[macro_export]
macro_rules! println {
    ($($arg:tt)*) => {{
        $crate::print::_println(format_args!($($arg)*));
    }};
}

static mut LOGGER: Logger = Logger { buf: String::new() };

struct Logger {
    buf: String,
}

impl Logger {
    fn flush(&mut self) {
        PLAYDATE.system.log_to_console(&self.buf);
        self.buf.clear();
    }
}

impl Write for Logger {
    fn write_str(&mut self, s: &str) -> Result<(), fmt::Error> {
        self.buf.push_str(s);
        Ok(())
    }
}