2 releases

0.1.1 Feb 9, 2023
0.1.0 Feb 9, 2023

#45 in #json-response

21 downloads per month
Used in json-resp

MIT/Apache

32KB
748 lines

Json-resp

This crate provides a success and an error response for Apis, with utilities and macros to ease the generation of responses and openapi docs(with openapi feature).(Only axum supported right now)

Check out the examples for full explanation.

Success

The success response looks like:

{
    "status": 200,
    "content": C, // C should implement serde::Serialize
    "meta": M // M should implement serde::Serialize
}

And can be produces with builder pattern:

JsonResponse::with_content(content).meta(meta)

Errors

The error response looks like:

{
    "status": 404,
    "code": "error code here",
    "hint": "do something", // Optional
    "content": C // C should implement serde::Serialize
}

And can be produces with a derive macro, openapi docs will be generated too.

#[derive(JsonError)]
enum MyAppErrors{
    // status can be either a number or http::StatusCode
    #[json_error(request, status=StatusCode::NOT_FOUND, code="does-not-exist", hint="some hint")]
    DoesNotExist,

    #[json_error(request, status=409, code="does-not-exist")]
    Validation(ValidationErrors),

    #[json_error(internal)]
    SomethingWentWrong
}

And just use it in your handlers:

async fn my_handler() -> Result<MyResponse, MyAppErrors>{
    Err(MyAppErrors::DoesNotExist)
}

Dependencies

~1.5MB
~36K SLoC