okapi
okapi copied to clipboard
Derive for OpenApiResponderInner
Description
This PR adds derive macro for the OpenApiResponderInner trait. It's fully compatible with Rocket's Response derive macro.
Also, to reduce code generation, add set_description function to utils.
This pull request does not add any usage examples.
Codegen Examples
-
Simple enum:
#[derive(Responder, OpenApiResponder)] enum ServerResult { A(String), B(Json<u32>), }Macro expansion
impl ::rocket_okapi::response::OpenApiResponderInner for ServerResult { fn responses( gen: &mut ::rocket_okapi::gen::OpenApiGenerator, ) -> ::rocket_okapi::Result<::rocket_okapi::okapi::openapi3::Responses> { let mut responses = ::rocket_okapi::okapi::openapi3::Responses::default(); responses.responses.extend( { let mut r = <String as ::rocket_okapi::response::OpenApiResponderInner>::responses(gen)?; r } .responses, ); responses.responses.extend( { let mut r = <Json<u32> as ::rocket_okapi::response::OpenApiResponderInner>::responses(gen)?; r } .responses, ); Ok(responses) } } -
Generic struct:
#[derive(Responder, OpenApiResponder)] #[response(status = 404, content_type = "html")] struct NotFoundHtml<T>(T);Macro expansion
impl<T: ::rocket_okapi::response::OpenApiResponderInner> ::rocket_okapi::response::OpenApiResponderInner for NotFoundHtml<T> { fn responses( gen: &mut ::rocket_okapi::gen::OpenApiGenerator, ) -> ::rocket_okapi::Result<::rocket_okapi::okapi::openapi3::Responses> { let mut responses = ::rocket_okapi::okapi::openapi3::Responses::default(); responses.responses.extend( { let mut r = <T as ::rocket_okapi::response::OpenApiResponderInner>::responses(gen)?; ::rocket_okapi::util::set_status_code(&mut r, 404u16)?; ::rocket_okapi::util::set_content_type(&mut r, "text/html; charset=utf-8")?; r } .responses, ); Ok(responses) } }
Issues
Fixes https://github.com/GREsau/okapi/issues/146.