5个不稳定版本
0.3.2 | 2023年8月18日 |
---|---|
0.3.1 | 2023年8月18日 |
0.2.0 | 2023年8月18日 |
0.1.1 | 2023年5月17日 |
#596 在 进程宏 中
每月下载量 48次
16KB
285 行
quickerr
一个用于快速定义错误的宏,类似于 thiserror
,但更简洁、更具观点。仅使用声明宏,因此编译时间不应有太大影响。它使用Markdown-like语法。主要用于我个人的使用,我发现它对于快速定义高质量的错误非常有帮助。
示例
# use quickerr::error;
# error! { MyOtherError "" }
# error! { MySecondOtherError "" }
error! {
pub EnumError
"a problem happened!"
MyOtherError,
MySecondOtherError,
}
这大致展开为
#[derive(Debug)]
#[non_exhaustive]
pub enum EnumError {
MyOtherError(MyOtherError),
MySecondOtherError(MySecondOtherError),
}
impl ::std::fmt::Display for EnumError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str("a problem happened!")
}
}
impl ::std::error::Error for EnumError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
Some(match self {
MyOtherError(err) => err,
MySecondOtherError(err) => err,
})
}
}
impl ::std::convert::From<MyOtherError> for EnumError {
fn from(source: MyOtherError) -> Self {
Self::MyOtherError(source)
}
}
impl ::std::convert::From<MySecondOtherError> for EnumError {
fn from(source: MySecondOtherError) -> Self {
Self::MySecondOtherError(source)
}
}
依赖项
~290–730KB
~18K SLoC