2 个版本
| 0.1.1 | 2024 年 2 月 27 日 |
|---|---|
| 0.1.0 | 2024 年 2 月 27 日 |
#375 在 Rust 模式
2,588 每月下载量
用于 4 个包(2 个直接使用)
19KB
105 行
docsplay:文档注释 - 显示
这个库是 displaydoc 的分支,提供了一个方便的 derive 宏,用于为标准库的 core::fmt::Display trait 实现。
[dependencies]
docsplay = "0.1"
编译器支持:需要 rustc 1.56+
示例
与来自 Error derive 宏的 thiserror 的展示一起,以传播来自 io::Error 的源位置,使用 #[source] 属性
use std::io;
use docsplay::Display;
use thiserror::Error;
#[derive(Display, Error, Debug)]
pub enum DataStoreError {
/// data store disconnected
Disconnect(#[source] io::Error),
/// the data for key `{0}` is not available
Redaction(String),
/// invalid header (expected {expected:?}, found {found:?})
InvalidHeader {
expected: String,
found: String,
},
/// unknown data store error
Unknown,
}
let error = DataStoreError::Redaction("CLASSIFIED CONTENT".to_string());
assert!("the data for key `CLASSIFIED CONTENT` is not available" == &format!("{}", error));
请注意,尽管 io::Error 实现了 Display,我们并没有将其添加到 DataStoreError::Disconnect 的生成消息中,因为它已经通过 #[source] 属性提供。有关避免错误报告中重复的更多信息,请参阅 rust 博客 此处。
详细信息
- 如果您在每个变体上提供如示例中所示的文档字符串注释,则为您枚举生成
fmt::Display实现。Displayderive 宏支持从错误中插值字段的简写/// {var}⟶write!("{}", self.var)/// {0}⟶write!("{}", self.0)/// {var:?}⟶write!("{:?}", self.var)/// {0:?}⟶write!("{:?}", self.0)/// {0.foo()}⟶write!("{}", self.0.foo())/// {0.foo():?}⟶write!("{:?}", self.0.foo())
- 这同样适用于结构体和泛型类型
/// oh no, an error: {0}
#[derive(Display)]
pub struct Error<E>(pub E);
let error: Error<&str> = Error("muahaha i am an error");
assert!("oh no, an error: muahaha i am an error" == &format!("{}", error));
-
可以在 derive 旁边添加两个可选属性到您的类型
-
#[ignore_extra_doc_attributes]使宏忽略第一个之后的任何文档注释属性(或///行)。 -
#[prefix_enum_doc_attributes]将您的枚举本身的文档注释消息与每个变体的消息合并,格式为enum: variant。当添加到枚举时,枚举的文档注释成为必填。当添加到任何其他类型时,它没有效果。
-
-
如果您想要一个独立的文档注释,可以在变体或结构体上使用
#[display("...")属性来覆盖它。
常见问题解答
-
这个包与
no_std兼容吗?- 是的!这个包实现了
core::fmt::Display特性,而不是std::fmt::Display特性,因此它应该可以在std和no_std环境中工作。只需添加default-features = false。
- 是的!这个包实现了
-
这个crate是否可以通过
Display特质与Path和PathBuf一起使用?- 是的。这个crate使用了@dtolnay的自动引用特殊化技术为类型添加一个特殊的特质来获取显示实现。然后它针对
Path和PathBuf进行特殊化,当这两个类型之一被发现时,它会调用self.display()来获取一个可以用于Display格式说明符的std::path::Display<'_>类型!
- 是的。这个crate使用了@dtolnay的自动引用特殊化技术为类型添加一个特殊的特质来获取显示实现。然后它针对
许可协议
在您选择的情况下,根据Apache License, Version 2.0或MIT许可证许可。除非您明确声明,否则您根据Apache-2.0许可证定义的任何有意提交以包含在此crate中的贡献,都将根据上述条款进行双重许可,而无需任何额外的条款或条件。
依赖项
约300–760KB
~18K SLoC