mirror of
https://gitlab.com/msrd0/gotham-restful.git
synced 2025-02-22 20:52:27 +00:00
remove some of the &mut &mut types (#6)
This commit is contained in:
parent
45eac21726
commit
e013af8e18
2 changed files with 56 additions and 46 deletions
|
@ -16,21 +16,27 @@ pub trait GetOpenapi
|
|||
fn get_openapi(&mut self, path : &str);
|
||||
}
|
||||
|
||||
pub struct OpenapiRouter<'a, D>
|
||||
{
|
||||
pub router : &'a mut D,
|
||||
pub openapi_builder : &'a mut OpenapiBuilder
|
||||
}
|
||||
|
||||
macro_rules! implOpenapiRouter {
|
||||
($implType:ident) => {
|
||||
|
||||
impl<'a, C, P> GetOpenapi for (&mut $implType<'a, C, P>, &mut OpenapiBuilder)
|
||||
impl<'a, 'b, C, P> GetOpenapi for OpenapiRouter<'a, $implType<'b, C, P>>
|
||||
where
|
||||
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
||||
P : RefUnwindSafe + Send + Sync + 'static
|
||||
{
|
||||
fn get_openapi(&mut self, path : &str)
|
||||
{
|
||||
self.0.get(path).to_new_handler(OpenapiHandler::new(self.1.openapi.clone()));
|
||||
self.router.get(path).to_new_handler(OpenapiHandler::new(self.openapi_builder.openapi.clone()));
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, C, P> DrawResources for (&mut $implType<'a, C, P>, &mut OpenapiBuilder)
|
||||
impl<'a, 'b, C, P> DrawResources for OpenapiRouter<'a, $implType<'b, C, P>>
|
||||
where
|
||||
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
||||
P : RefUnwindSafe + Send + Sync + 'static
|
||||
|
@ -41,46 +47,46 @@ macro_rules! implOpenapiRouter {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, C, P> DrawResourceRoutes for (&mut (&mut $implType<'a, C, P>, &mut OpenapiBuilder), &str)
|
||||
impl<'a, 'b, C, P> DrawResourceRoutes for (&mut OpenapiRouter<'a, $implType<'b, C, P>>, &str)
|
||||
where
|
||||
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
||||
P : RefUnwindSafe + Send + Sync + 'static
|
||||
{
|
||||
fn read_all<Handler : ResourceReadAll>(&mut self)
|
||||
{
|
||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
||||
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||
|
||||
let path = format!("/{}", &self.1);
|
||||
let mut item = (self.0).1.remove_path(&path);
|
||||
let mut item = (self.0).openapi_builder.remove_path(&path);
|
||||
item.get = Some(OperationDescription::new::<Handler>(schema).into_operation());
|
||||
(self.0).1.add_path(path, item);
|
||||
(self.0).openapi_builder.add_path(path, item);
|
||||
|
||||
(&mut *(self.0).0, self.1).read_all::<Handler>()
|
||||
(&mut *(self.0).router, self.1).read_all::<Handler>()
|
||||
}
|
||||
|
||||
fn read<Handler : ResourceRead>(&mut self)
|
||||
{
|
||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
||||
let id_schema = (self.0).1.add_schema::<Handler::ID>();
|
||||
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||
let id_schema = (self.0).openapi_builder.add_schema::<Handler::ID>();
|
||||
|
||||
let path = format!("/{}/{{id}}", &self.1);
|
||||
let mut item = (self.0).1.remove_path(&path);
|
||||
let mut item = (self.0).openapi_builder.remove_path(&path);
|
||||
item.get = Some(OperationDescription::new::<Handler>(schema).add_path_param("id", id_schema).into_operation());
|
||||
(self.0).1.add_path(path, item);
|
||||
(self.0).openapi_builder.add_path(path, item);
|
||||
|
||||
(&mut *(self.0).0, self.1).read::<Handler>()
|
||||
(&mut *(self.0).router, self.1).read::<Handler>()
|
||||
}
|
||||
|
||||
fn search<Handler : ResourceSearch>(&mut self)
|
||||
{
|
||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
||||
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||
|
||||
let path = format!("/{}/search", &self.1);
|
||||
let mut item = (self.0).1.remove_path(&self.1);
|
||||
let mut item = (self.0).openapi_builder.remove_path(&self.1);
|
||||
item.get = Some(OperationDescription::new::<Handler>(schema).with_query_params(Handler::Query::schema()).into_operation());
|
||||
(self.0).1.add_path(path, item);
|
||||
(self.0).openapi_builder.add_path(path, item);
|
||||
|
||||
(&mut *(self.0).0, self.1).search::<Handler>()
|
||||
(&mut *(self.0).router, self.1).search::<Handler>()
|
||||
}
|
||||
|
||||
fn create<Handler : ResourceCreate>(&mut self)
|
||||
|
@ -88,15 +94,15 @@ macro_rules! implOpenapiRouter {
|
|||
Handler::Res : 'static,
|
||||
Handler::Body : 'static
|
||||
{
|
||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
||||
let body_schema = (self.0).1.add_schema::<Handler::Body>();
|
||||
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||
let body_schema = (self.0).openapi_builder.add_schema::<Handler::Body>();
|
||||
|
||||
let path = format!("/{}", &self.1);
|
||||
let mut item = (self.0).1.remove_path(&path);
|
||||
let mut item = (self.0).openapi_builder.remove_path(&path);
|
||||
item.post = Some(OperationDescription::new::<Handler>(schema).with_body::<Handler::Body>(body_schema).into_operation());
|
||||
(self.0).1.add_path(path, item);
|
||||
(self.0).openapi_builder.add_path(path, item);
|
||||
|
||||
(&mut *(self.0).0, self.1).create::<Handler>()
|
||||
(&mut *(self.0).router, self.1).create::<Handler>()
|
||||
}
|
||||
|
||||
fn update_all<Handler : ResourceUpdateAll>(&mut self)
|
||||
|
@ -104,15 +110,15 @@ macro_rules! implOpenapiRouter {
|
|||
Handler::Res : 'static,
|
||||
Handler::Body : 'static
|
||||
{
|
||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
||||
let body_schema = (self.0).1.add_schema::<Handler::Body>();
|
||||
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||
let body_schema = (self.0).openapi_builder.add_schema::<Handler::Body>();
|
||||
|
||||
let path = format!("/{}", &self.1);
|
||||
let mut item = (self.0).1.remove_path(&path);
|
||||
let mut item = (self.0).openapi_builder.remove_path(&path);
|
||||
item.put = Some(OperationDescription::new::<Handler>(schema).with_body::<Handler::Body>(body_schema).into_operation());
|
||||
(self.0).1.add_path(path, item);
|
||||
(self.0).openapi_builder.add_path(path, item);
|
||||
|
||||
(&mut *(self.0).0, self.1).update_all::<Handler>()
|
||||
(&mut *(self.0).router, self.1).update_all::<Handler>()
|
||||
}
|
||||
|
||||
fn update<Handler : ResourceUpdate>(&mut self)
|
||||
|
@ -120,41 +126,41 @@ macro_rules! implOpenapiRouter {
|
|||
Handler::Res : 'static,
|
||||
Handler::Body : 'static
|
||||
{
|
||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
||||
let id_schema = (self.0).1.add_schema::<Handler::ID>();
|
||||
let body_schema = (self.0).1.add_schema::<Handler::Body>();
|
||||
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||
let id_schema = (self.0).openapi_builder.add_schema::<Handler::ID>();
|
||||
let body_schema = (self.0).openapi_builder.add_schema::<Handler::Body>();
|
||||
|
||||
let path = format!("/{}/{{id}}", &self.1);
|
||||
let mut item = (self.0).1.remove_path(&path);
|
||||
let mut item = (self.0).openapi_builder.remove_path(&path);
|
||||
item.put = Some(OperationDescription::new::<Handler>(schema).add_path_param("id", id_schema).with_body::<Handler::Body>(body_schema).into_operation());
|
||||
(self.0).1.add_path(path, item);
|
||||
(self.0).openapi_builder.add_path(path, item);
|
||||
|
||||
(&mut *(self.0).0, self.1).update::<Handler>()
|
||||
(&mut *(self.0).router, self.1).update::<Handler>()
|
||||
}
|
||||
|
||||
fn delete_all<Handler : ResourceDeleteAll>(&mut self)
|
||||
{
|
||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
||||
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||
|
||||
let path = format!("/{}", &self.1);
|
||||
let mut item = (self.0).1.remove_path(&path);
|
||||
let mut item = (self.0).openapi_builder.remove_path(&path);
|
||||
item.delete = Some(OperationDescription::new::<Handler>(schema).into_operation());
|
||||
(self.0).1.add_path(path, item);
|
||||
(self.0).openapi_builder.add_path(path, item);
|
||||
|
||||
(&mut *(self.0).0, self.1).delete_all::<Handler>()
|
||||
(&mut *(self.0).router, self.1).delete_all::<Handler>()
|
||||
}
|
||||
|
||||
fn delete<Handler : ResourceDelete>(&mut self)
|
||||
{
|
||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
||||
let id_schema = (self.0).1.add_schema::<Handler::ID>();
|
||||
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||
let id_schema = (self.0).openapi_builder.add_schema::<Handler::ID>();
|
||||
|
||||
let path = format!("/{}/{{id}}", &self.1);
|
||||
let mut item = (self.0).1.remove_path(&path);
|
||||
let mut item = (self.0).openapi_builder.remove_path(&path);
|
||||
item.delete = Some(OperationDescription::new::<Handler>(schema).add_path_param("id", id_schema).into_operation());
|
||||
(self.0).1.add_path(path, item);
|
||||
(self.0).openapi_builder.add_path(path, item);
|
||||
|
||||
(&mut *(self.0).0, self.1).delete::<Handler>()
|
||||
(&mut *(self.0).router, self.1).delete::<Handler>()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use crate::{
|
||||
matcher::{AcceptHeaderMatcher, ContentTypeMatcher},
|
||||
openapi::router::OpenapiRouter,
|
||||
resource::*,
|
||||
result::{ResourceError, ResourceResult, Response},
|
||||
RequestBody,
|
||||
|
@ -49,7 +50,7 @@ pub trait WithOpenapi<D>
|
|||
{
|
||||
fn with_openapi<F>(&mut self, title : String, version : String, server_url : String, block : F)
|
||||
where
|
||||
F : FnOnce((&mut D, &mut OpenapiBuilder));
|
||||
F : FnOnce(OpenapiRouter<D>);
|
||||
}
|
||||
|
||||
/// This trait adds the `resource` method to gotham's routing. It allows you to register
|
||||
|
@ -316,10 +317,13 @@ macro_rules! implDrawResourceRoutes {
|
|||
{
|
||||
fn with_openapi<F>(&mut self, title : String, version : String, server_url : String, block : F)
|
||||
where
|
||||
F : FnOnce((&mut Self, &mut OpenapiBuilder))
|
||||
F : FnOnce(OpenapiRouter<$implType<'a, C, P>>)
|
||||
{
|
||||
let mut router = OpenapiBuilder::new(title, version, server_url);
|
||||
block((self, &mut router));
|
||||
let router = OpenapiRouter {
|
||||
router: self,
|
||||
openapi_builder: &mut OpenapiBuilder::new(title, version, server_url)
|
||||
};
|
||||
block(router);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue