http-derive-impl

Crates.iohttp-derive-impl
lib.rshttp-derive-impl
version0.1.0
created_at2025-07-15 10:06:48.105648+00
updated_at2025-07-15 10:06:48.105648+00
descriptionDerive macro for implementing `Into` for your enums using the standard http types.
homepagehttps://github.com/popen2/http-derive-rs
repository
max_upload_size
id1752921
size9,166
Zohar Zilberman (popen2)

documentation

README

🦀 http-derive

Derive macro for implementing Into<http::StatusCode> for your enums using the standard http types.

Why?

  • It uses the commonly-used http::StatusCode.
  • Selects http 0.2 and/or 1.0 using feature flags.
  • Works well with other libraries like thiserror.
  • Easier to define as part of an error enum instead of manually impl From<X> for http::StatusCode.

Inspiration

Features

By default this crate enables no features. This is to allow selecting which http crate/s are selected.

If your crate has to enable http support conditionally you can leave the [#derive(HttpStatus)] in place and turn on one or more of the features below depending on your crate's feature flags.

  • http-1 enables http = "1"
  • http-02 enables http = "0.2"

For example, in Cargo.toml add:

http-derive = { version = "0.1.0", features = ["http-1"] }

Examples

use http_derive::HttpStatus;

#[derive(Debug, HttpStatus, thiserror::Error)]
pub enum MyError {
    #[error("This is not supported")]
    #[http(status = "BAD_REQUEST")]
    Unsupported,

    #[error("Try again")]
    #[http(status = "SERVICE_UNAVAILABLE")]
    TryAgain,

    #[error(transparent)]
    #[http(transparent)]
    Sub(MySubError),
}

#[derive(Debug, HttpStatus, thiserror::Error)]
pub enum MySubError {
    #[error("Unauthorized")]
    #[http(status = "UNAUTHORIZED")]
    Unauthorized,

    #[error("Unauthorized")]
    #[http(status = "UNAUTHORIZED")]
    EvenMoreUnauthorized,
}
Commit count: 0

cargo fmt