#fmt #formatting #debugging #extension

fmt_ext

为外部类型提供简单接口,用于自定义实现 DebugDisplay 特性。

3 个版本

0.1.2 2021 年 9 月 16 日
0.1.1 2021 年 7 月 15 日
0.1.0 2021 年 6 月 29 日

#257 in 值格式化

MIT 许可证

10KB
69

fmt_ext

Crates.io docs.rs

为外部类型提供简单接口,用于自定义实现 DebugDisplay 特性。

以下示例展示了如何为切片实现自定义的调试格式化,并额外打印其长度。

use std::{fmt, marker::PhantomData};

use fmt_ext::{debug::*, DebugExt};

// Create a type that will implement custom debug...
struct SliceWithLenDebug<T>(PhantomData<T>);

// Implement custom debug...
impl<T> CustomDebug for SliceWithLenDebug<T>
where
    T: fmt::Debug,
{
    type Target = [T];

    fn fmt_target(target: &Self::Target, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "Slice {{ len: {}, items: {:?} }}", target.len(), target)
    }
}

// Attach custom debug implementation to the target type...
impl<T> AttachDebug<SliceWithLenDebug<T>> for [T] {}

// Look! Now we have just call `debug` method on the target type...
fn main() {
    let numbers = [0, 1, 2, 3];
    println!("{:?}", numbers.debug());

    let strings = vec!["I", "am", "a", "custom", "debug"];
    println!("{:?}", strings.debug());
}

所有示例都在 此目录 中。

支持 #![no_std]

fmt_ext 默认支持 #![no_std] 模式。

许可证

fmt_ext 根据 MIT 许可证分发。

无运行时依赖