playdate_rs/
print.rs

1use core::fmt::{self, Write};
2
3use alloc::string::String;
4
5use crate::PLAYDATE;
6
7#[doc(hidden)]
8#[cold]
9pub fn _println(args: fmt::Arguments<'_>) {
10    let logger = unsafe { &mut LOGGER };
11    logger.write_fmt(args).unwrap();
12    logger.flush();
13}
14
15#[macro_export]
16macro_rules! println {
17    ($($arg:tt)*) => {{
18        $crate::print::_println(format_args!($($arg)*));
19    }};
20}
21
22static mut LOGGER: Logger = Logger { buf: String::new() };
23
24struct Logger {
25    buf: String,
26}
27
28impl Logger {
29    fn flush(&mut self) {
30        PLAYDATE.system.log_to_console(&self.buf);
31        self.buf.clear();
32    }
33}
34
35impl Write for Logger {
36    fn write_str(&mut self, s: &str) -> Result<(), fmt::Error> {
37        self.buf.push_str(s);
38        Ok(())
39    }
40}