#trillium #框架 #async #handler

trillium-error

trillium.rs 的错误处理支持

1 个不稳定版本

0.1.0 2022 年 10 月 11 日

#44 in #trillium

MIT/Apache

8KB
52

trillium-error

此包为 trillium Web 框架添加错误处理支持。

由于 Rust 的限制,trillium 目前不支持错误处理。当语言添加能力以表达 for<'a> Fn(&'a Conn) -> impl Future<Output=> + 'a 的界限时,trillium 将添加对错误处理的第一类支持。更多详情请参阅此处的讨论。在此期间,trillium-error 提供了一个过程宏,以帮助编写具有错误处理的手柄。

用法

请参阅文档

许可证

Apache 2.0 或 MIT 许可证


lib.rs:

此包为 trillium Web 框架添加错误处理支持。

由于 Rust 的限制,trillium 目前不支持错误处理。当语言添加能力以表达 for<'a> Fn(&'a Conn) -> impl Future<Output=> + 'a 的界限时,trillium 将添加对错误处理的第一类支持。在此期间,trillium-error 提供了一个过程宏,以帮助编写具有错误处理的手柄。更多详情请参阅此处的讨论。

use trillium_error::handler;

#[derive(thiserror::Error, Debug)]
pub enum AppError {
#[error("Custom error")]
CustomError,
#[error("IO error")]
IoError(std::io::Error),
}

impl From<std::io::Error> for AppError {
fn from(err: std::io::Error) -> Self {
AppError::IoError(err)
}
}

#[async_trait]
impl Handler for AppError {
async fn run(&self, conn: Conn) -> Conn {
conn.with_status(500).with_body("Internal Server Error")
}
}

#[handler]
async fn helloworld(conn: &mut Conn) -> Result<(), AppError> {
conn.set_status(200);
conn.set_body("hello world");
// Ok(())
Err(AppError::CustomError)
}

fn main() {
trillium_tokio::run(helloworld);
}

依赖项

~1.5MB
~36K SLoC