#display #detail #enums #data-store #error #io-error #displaythis

displaythis-impl

displaythis 库的实现细节

2 个稳定版本

1.0.23 2020 年 12 月 4 日

#63#io-error

Download history 73/week @ 2024-03-31 6/week @ 2024-04-07 9/week @ 2024-04-14 24/week @ 2024-04-21 36/week @ 2024-04-28 15/week @ 2024-05-05 38/week @ 2024-05-12 16/week @ 2024-05-19 20/week @ 2024-05-26 37/week @ 2024-06-02 25/week @ 2024-06-09 30/week @ 2024-06-16 34/week @ 2024-06-23 2/week @ 2024-06-30 13/week @ 2024-07-07 27/week @ 2024-07-14

每月 79 次下载
2 个 crate 中使用 (通过 displaythis)

MIT/Apache

22KB
590

derive(Display)

此库提供了一个方便的 derive 宏,用于标准库的 std::fmt::Display trait。displaythis 是 thiserror 的分支,修改为用于非错误类型。


示例

# use std::io;
use displaythis::Display;

#[derive(Display, Debug)]
pub enum DataStoreError {
    #[display("data store disconnected")]
    Disconnect(io::Error),
    #[display("the data for key `{0}` is not available")]
    Redaction(String),
    #[display("invalid header (expected {expected:?}, found {found:?})")]
    InvalidHeader {
        expected: String,
        found: String,
    },
    #[display("unknown data store error")]
    Unknown,
}

详细信息

  • displaythis 故意不在你的公共 API 中出现。你将获得与手动编写 std::fmt::Display 实现相同的结果,从手动实现切换到 displaythis 或相反都不是破坏性更改。

  • 类型可以是枚举、具有命名字段的 struct、元组 struct 或单元 struct。

  • 你应该在 struct 或你的枚举的每个变体上提供 #[display("...")] 消息,如示例中所示。

    消息支持从错误中插值字段的简写。

    • #[display("{var}")] ⟶ write!("{}", self.var)
    • #[display("{0}")]write!("{}", self.0)
    • #[display("{var:?}")]write!("{:?}", self.var)
    • #[display("{0:?}")]write!("{:?}", self.0)

    这些简写可以与任何额外的格式参数一起使用,这些参数可以是任意表达式。例如

    #[derive(Display, Debug)]
    pub enum Error {
        #[display("invalid rdo_lookahead_frames {0} (expected < {})", i32::MAX)]
        InvalidLookahead(u32),
    }
    

    如果需要引用结构体或枚举的字段之一作为额外的表达式参数,则请按.var引用命名字段,按.0引用元组字段。

    #[derive(Display, Debug)]
    pub enum Error {
        #[display("first letter must be lowercase but was {:?}", first_char(.0))]
        WrongCase(String),
        #[display("invalid index {idx}, expected at least {} and at most {}", .limits.lo, .limits.hi)]
        OutOfBounds { idx: usize, limits: Limits },
    }
    

许可证

在您的选择下,根据Apache许可证,版本2.0MIT许可证进行许可。
除非您明确表示,否则根据Apache-2.0许可证定义,您提交的任何有意提交以包含在此软件包中的贡献,都将根据上述条款进行双重许可,没有任何附加条款或条件。

依赖关系

~1.5MB
~35K SLoC