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}