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
实现。Display
derive 宏支持从错误中插值字段的简写/// {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