moana_std 0.1.4

moana 用户标准库
Documentation
//! 内核调试控制台格式化输出宏
//!
//! [`kdprint!`](macro@crate::kdprint) / [`kdprintln!`](macro@crate::kdprintln)
//! 提供 `format_args!` 风格的格式化输出,
//! 最终经 [`crate::sys::system::debug_print`] 送往内核调试控制台。

/// [`kdprint!`](macro@crate::kdprint) / [`kdprintln!`](macro@crate::kdprintln)
/// 的底层 writer,将格式化输出
/// 转发给 [`crate::sys::system::debug_print`]。仅供宏内部使用。
#[doc(hidden)]
pub struct KdWriter;

impl core::fmt::Write for KdWriter {
    fn write_str(&mut self, s: &str) -> core::fmt::Result {
        crate::sys::system::debug_print(s.as_bytes()).map_err(|_| core::fmt::Error)
    }
}

/// 格式化输出到内核调试控制台(不带换行)。
///
/// 用法同 [`core::write!`],输出最终经 [`crate::sys::system::debug_print`] 送往内核。
/// 输出失败会被忽略。
///
/// ```text
/// kdprint!("x = {x}, y = {}\n", y);
/// ```
#[macro_export]
macro_rules! kdprint {
    ($($arg:tt)*) => {{
        let _ = <$crate::kdprint::KdWriter as ::core::fmt::Write>::write_fmt(
            &mut $crate::kdprint::KdWriter,
            ::core::format_args!($($arg)*),
        );
    }};
}

/// 格式化输出到内核调试控制台,并追加换行符。
///
/// 用法同 [`core::writeln!`]。无参数时仅输出一个换行。
///
/// ```text
/// kdprintln!("booted");
/// kdprintln!("x = {x}");
/// ```
#[macro_export]
macro_rules! kdprintln {
    () => {
        $crate::kdprint!("\n")
    };
    ($($arg:tt)*) => {{
        let _ = <$crate::kdprint::KdWriter as ::core::fmt::Write>::write_fmt(
            &mut $crate::kdprint::KdWriter,
            ::core::format_args!("{}\n", ::core::format_args!($($arg)*)),
        );
    }};
}