1 个不稳定版本
0.1.0 | 2022 年 8 月 27 日 |
---|
18 在 #derive-error 中
444 每月下载量
10KB
83 行
axum-derive-error
用于 axum 的错误类型派生 IntoResponse 的进程宏。
您的错误类型只需要实现 Error (Snafu 或 thiserror 可能在这里很有用),IntoResponse 和 Debug 将为您派生。默认情况下,错误将返回 500 响应,但可以使用 #[status = ...]
属性指定。
示例
use std::{error::Error, fmt::Display};
use axum_derive_error::ErrorResponse;
use axum::http::StatusCode;
#[derive(ErrorResponse)]
pub enum CreateUserError {
/// No status provided, so this will return a 500 error.
/// All 5xx errors will not display their message to the user, but will produce a tracing::error log
InsertUserToDb(sqlx::Error),
/// 422 returned as the response, the display implementation will be used as a message for the user
#[status(StatusCode::UNPROCESSABLE_ENTITY)]
InvalidBody(String),
}
impl Error for CreateUserError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
Self::InsertUserToDb(source) => Some(source),
Self::InvalidBody(_) => None,
}
}
}
impl Display for CreateUserError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::InsertUserToDb(source) => write!(f, "failed to insert user into the database"),
Self::InvalidBody(message) => write!(f, "body is invalid: {message}"),
}
}
}
许可
根据您的选择,受以下任一项许可协议保护:
- Apache 许可证 2.0 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您提交给工作的任何有意贡献,根据 Apache-2.0 许可协议定义,将按上述方式双重许可,不附加任何其他条款或条件。
依赖项
~1.5MB
~35K SLoC