#rocket #stack #error #thin #compatibility #report #error-stack

rocket_error_stack

Compatibility Wrapper for error-stack and rocket

2 releases

0.1.1 Mar 12, 2023
0.1.0 Nov 19, 2022

#54 in #thin

MIT license

4KB

rocket_error_stack

Description

This crate provides rocket_error_stack::Report and rocket_error_stack::Result as thin Wrappers around error_stack::Report and error_stack::Result with rockets rocket::response::Responder implemented.

Install

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

Note about required trait implementations

Your Reports will have to implement rocket_error_stack::StatusCodeReport to define the HTTP response code.

Supported versions

This crate currently supports rocket 0.5.0-rc.2 and error-stack 0.3.

Usage

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(())
}

Dependencies

~15–46MB
~787K SLoC