Crates.io | rocket_error_stack |
lib.rs | rocket_error_stack |
version | 0.1.1 |
source | src |
created_at | 2022-11-19 15:20:19.242681 |
updated_at | 2023-03-12 10:05:50.041178 |
description | Compatibility Wrapper for error-stack and rocket |
homepage | https://github.com/TheTaktik/rocket_error_stack |
repository | https://github.com/TheTaktik/rocket_error_stack |
max_upload_size | |
id | 718524 |
size | 3,837 |
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.
[dependencies]
rocket = { version = "0.5.0-rc.2" }
error-stack = "0.3"
rocket_error_stack = "0.1"
Your Reports will have to implement [rocket_error_stack::StatusCodeReport] to define the HTTP response code.
This crate currently supports rocket 0.5.0-rc.2 and 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(())
}