error-http

Crates.ioerror-http
lib.rserror-http
version0.2.2
sourcesrc
created_at2023-12-07 13:57:52.451872
updated_at2023-12-22 14:03:32.185677
descriptionProcedural macro for associating error enums with HTTP codes.
homepagehttps://github.com/majchrzamemil/error-http
repositoryhttps://github.com/majchrzamemil/error-http
max_upload_size
id1061019
size12,541
(majchrzamemil)

documentation

https://docs.rs/error-http

README

error-http

The error-http crate defines a macro that implements proper HTTP responders for an enum with user-defined HTTP response codes and error messages.

#[derive(ToResponse)] macro is web server orthogonal, which means for once defined enum only by switching feature appropriate responder will be implemented for the chosen web server.

#[code(XXX)] defined for a given enum variant will result in XXX HTTP code being returned for it. Any variant without #[code(XXX)] will default to 500. Any invalid HTTP error code will default to 500.

#[body(message)] defined for a given variant will add a body to the response. body can be any expression that produces String or &str. Currently, there is no option to change the content type.

Supported web servers

This crate only allows choosing exactly one of avaliable implementations. Avaliable implementation:

  • actix-web
  • axum
  • rocket

Usage example

use error_http::ToResponse;
struct SomeStruct {
    _a: i32,
    _b: u32,
}

#[derive(ToResponse)]
enum Error {
    #[code(400)]
    First {
        _a: i32,
        _b: u32,
    },
    #[code(404)]
    #[body("custom error message")]
    Blah(SomeStruct, String),
    Third,
    #[code(99)]
    Invalid,
}

Future development

Possible expansion of this crate consists of:

  • content type and JSON body
  • tracing/logging
Commit count: 12

cargo fmt