107 lines · 2.6 KB · Rust
RawDownload
// SPDX-License-Identifier: GPL-2.0 //! Formatting utilities.//!//! This module is intended to be used in place of `core::fmt` in kernel code. pub use core::fmt::{    Arguments,    Debug,    Error,    Formatter,    Result,    Write, //}; /// Internal adapter used to route and allow implementations of formatting traits for foreign types.////// It is inserted automatically by the [`fmt!`] macro and is not meant to be used directly.////// [`fmt!`]: crate::prelude::fmt!#[doc(hidden)]pub struct Adapter<T>(pub T); macro_rules! impl_fmt_adapter_forward {    ($($trait:ident),* $(,)?) => {        $(            impl<T: $trait> $trait for Adapter<T> {                fn fmt(&self, f: &mut Formatter<'_>) -> Result {                    let Self(t) = self;                    $trait::fmt(t, f)                }            }        )*    };} use core::fmt::{    Binary,    LowerExp,    LowerHex,    Octal,    Pointer,    UpperExp,    UpperHex, //};impl_fmt_adapter_forward!(Debug, LowerHex, UpperHex, Octal, Binary, Pointer, LowerExp, UpperExp); /// A copy of [`core::fmt::Display`] that allows us to implement it for foreign types.////// Types should implement this trait rather than [`core::fmt::Display`]. Together with the/// [`Adapter`] type and [`fmt!`] macro, it allows for formatting foreign types (e.g. types from/// core) which do not implement [`core::fmt::Display`] directly.////// [`fmt!`]: crate::prelude::fmt!pub trait Display {    /// Same as [`core::fmt::Display::fmt`].    fn fmt(&self, f: &mut Formatter<'_>) -> Result;} impl<T: ?Sized + Display> Display for &T {    fn fmt(&self, f: &mut Formatter<'_>) -> Result {        Display::fmt(*self, f)    }} impl<T: ?Sized + Display> core::fmt::Display for Adapter<&T> {    fn fmt(&self, f: &mut Formatter<'_>) -> Result {        let Self(t) = self;        Display::fmt(t, f)    }} macro_rules! impl_display_forward {    ($(        $( { $($generics:tt)* } )? $ty:ty $( { where $($where:tt)* } )?    ),* $(,)?) => {        $(            impl$($($generics)*)? Display for $ty $(where $($where)*)? {                fn fmt(&self, f: &mut Formatter<'_>) -> Result {                    core::fmt::Display::fmt(self, f)                }            }        )*    };} impl_display_forward!(    bool,    char,    core::panic::PanicInfo<'_>,    Arguments<'_>,    i128,    i16,    i32,    i64,    i8,    isize,    str,    u128,    u16,    u32,    u64,    u8,    usize,    {<T: ?Sized>} crate::sync::Arc<T> {where crate::sync::Arc<T>: core::fmt::Display},    {<T: ?Sized>} crate::sync::UniqueArc<T> {where crate::sync::UniqueArc<T>: core::fmt::Display},);