3 releases
0.1.2 | Feb 9, 2023 |
---|---|
0.1.1 | Feb 9, 2023 |
0.1.0 | Feb 9, 2023 |
#1369 in HTTP server
15KB
347 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
~7–9.5MB
~175K SLoC