14个版本
0.2.5 | 2024年6月20日 |
---|---|
0.2.4 | 2023年5月3日 |
0.2.3 | 2021年7月16日 |
0.2.1 | 2021年3月26日 |
0.1.4 | 2019年10月18日 |
#28 在 过程宏 分类中
2,536,124 每月下载量
在 2,255 个crate中(197个直接使用) 使用
43KB
616 代码行
derive(Display) /// From<docs>
此库提供了一个方便的过程宏,用于实现标准库的 core::fmt::Display
特性。
[dependencies]
displaydoc = "0.2"
编译器支持:需要rustc 1.56+
示例
与 Error
过程宏(来自 thiserror
)一起演示,以通过具有 #[source]
属性的传播源位置
use std::io;
use displaydoc::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
实现如果您提供文档字符串注释/// {var}
⟶write!("{}", self.var)
/// {0}
⟶write!("{}", self.0)
/// {var:?}
⟶write!("{:?}", self.var)
/// {0:?}
⟶write!("{:?}", self.0)
- 这也可以与结构和 泛型类型一起使用
/// 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]
将枚举本身的文档注释消息与每个变体的消息合并,格式为“枚举:变体”。当添加到枚举时,枚举的文档注释变为强制性的。当添加到任何其他类型时,它没有任何效果。
-
-
如果您想要一个独立的文档注释,可以在变体或结构体上使用
#[displaydoc("...")
属性来覆盖它。
常见问题解答
-
这个crate兼容
no_std
吗?- 是的!这个crate实现了
core::fmt::Display
特性,而不是std::fmt::Display
特性,所以它应该在std
和no_std
环境中工作。只需添加default-features = false
即可。
- 是的!这个crate实现了
-
这个crate通过
Display
特性与Path
和PathBuf
一起工作吗?- 是的。这个crate使用 @dtolnay 的 自动引用特化技术 为类型添加一个特殊的特性来获取显示实现。然后它特化为
Path
和PathBuf
,当这两个类型中的任何一个被找到时,它调用self.display()
来获取一个可以与Display
格式说明符一起使用的std::path::Display<'_>
类型!
- 是的。这个crate使用 @dtolnay 的 自动引用特化技术 为类型添加一个特殊的特性来获取显示实现。然后它特化为
许可证
根据您的选择,受Apache许可证第2版或MIT许可证许可。除非您明确声明,否则根据 Apache-2.0 许可证的定义,您提交给该 crate 的任何贡献,都应如上所述双许可,而不附加任何额外条款或条件。
依赖关系
~280–730KB
~17K SLoC