#rocket #stack #error #wrapper #compatibility #thin #report

rocket_error_stack

错误堆栈和 rocket 的兼容性包装器

2 个版本

0.1.1 2023年3月12日
0.1.0 2022年11月19日

#53 in #thin

MIT 许可证

4KB

rocket_error_stack

描述

此软件包提供 rocket_error_stack::Reportrocket_error_stack::Result,作为围绕 error_stack::Reporterror_stack::Result 的薄包装,具有通过 rockets rocket::response::Responder 实现的响应器。

安装

[dependencies]
rocket = { version = "0.5.0-rc.2" }
error-stack = "0.3"
rocket_error_stack = "0.1"

关于所需特实现注意事项

您的报告必须实现 rocket_error_stack::StatusCodeReport 以定义 HTTP 响应代码。

支持版本

此软件包目前支持 rocket 0.5.0-rc.2 和 error-stack 0.3。

使用方法

use std::fmt;
use rocket::http::Status;
use error_stack::{Context, IntoReport, ResultExt};
use std::fs;

use rocket_error_stack::{Result, StatusCodeReport};

#[derive(Debug)]
struct SomeError(pub Status);

impl StatusCodeReport for SomeError {
  fn status(&self) -> Status {
      self.0
  }
}

impl fmt::Display for SomeError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str("Error during request")
    }
}

impl Context for SomeError {}

#[get("/")]
fn get() -> Result<(), SomeError> {
  fs::read_to_string("nonexistent")
    .into_report()
    .attach_printable("Something went wrong!")
    .change_context(SomeError(Status::InternalServerError))?;
  Ok(())
}

依赖关系

~15–50MB
~799K SLoC