mirror of
https://gitlab.com/msrd0/gotham-restful.git
synced 2025-02-23 04:52:28 +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);
|
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 {
|
macro_rules! implOpenapiRouter {
|
||||||
($implType:ident) => {
|
($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
|
where
|
||||||
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
||||||
P : RefUnwindSafe + Send + Sync + 'static
|
P : RefUnwindSafe + Send + Sync + 'static
|
||||||
{
|
{
|
||||||
fn get_openapi(&mut self, path : &str)
|
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
|
where
|
||||||
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
||||||
P : RefUnwindSafe + 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
|
where
|
||||||
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
C : PipelineHandleChain<P> + Copy + Send + Sync + 'static,
|
||||||
P : RefUnwindSafe + Send + Sync + 'static
|
P : RefUnwindSafe + Send + Sync + 'static
|
||||||
{
|
{
|
||||||
fn read_all<Handler : ResourceReadAll>(&mut self)
|
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 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());
|
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)
|
fn read<Handler : ResourceRead>(&mut self)
|
||||||
{
|
{
|
||||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||||
let id_schema = (self.0).1.add_schema::<Handler::ID>();
|
let id_schema = (self.0).openapi_builder.add_schema::<Handler::ID>();
|
||||||
|
|
||||||
let path = format!("/{}/{{id}}", &self.1);
|
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());
|
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)
|
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 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());
|
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)
|
fn create<Handler : ResourceCreate>(&mut self)
|
||||||
|
@ -88,15 +94,15 @@ macro_rules! implOpenapiRouter {
|
||||||
Handler::Res : 'static,
|
Handler::Res : 'static,
|
||||||
Handler::Body : 'static
|
Handler::Body : 'static
|
||||||
{
|
{
|
||||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||||
let body_schema = (self.0).1.add_schema::<Handler::Body>();
|
let body_schema = (self.0).openapi_builder.add_schema::<Handler::Body>();
|
||||||
|
|
||||||
let path = format!("/{}", &self.1);
|
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());
|
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)
|
fn update_all<Handler : ResourceUpdateAll>(&mut self)
|
||||||
|
@ -104,15 +110,15 @@ macro_rules! implOpenapiRouter {
|
||||||
Handler::Res : 'static,
|
Handler::Res : 'static,
|
||||||
Handler::Body : 'static
|
Handler::Body : 'static
|
||||||
{
|
{
|
||||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||||
let body_schema = (self.0).1.add_schema::<Handler::Body>();
|
let body_schema = (self.0).openapi_builder.add_schema::<Handler::Body>();
|
||||||
|
|
||||||
let path = format!("/{}", &self.1);
|
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());
|
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)
|
fn update<Handler : ResourceUpdate>(&mut self)
|
||||||
|
@ -120,41 +126,41 @@ macro_rules! implOpenapiRouter {
|
||||||
Handler::Res : 'static,
|
Handler::Res : 'static,
|
||||||
Handler::Body : 'static
|
Handler::Body : 'static
|
||||||
{
|
{
|
||||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||||
let id_schema = (self.0).1.add_schema::<Handler::ID>();
|
let id_schema = (self.0).openapi_builder.add_schema::<Handler::ID>();
|
||||||
let body_schema = (self.0).1.add_schema::<Handler::Body>();
|
let body_schema = (self.0).openapi_builder.add_schema::<Handler::Body>();
|
||||||
|
|
||||||
let path = format!("/{}/{{id}}", &self.1);
|
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());
|
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)
|
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 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());
|
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)
|
fn delete<Handler : ResourceDelete>(&mut self)
|
||||||
{
|
{
|
||||||
let schema = (self.0).1.add_schema::<Handler::Res>();
|
let schema = (self.0).openapi_builder.add_schema::<Handler::Res>();
|
||||||
let id_schema = (self.0).1.add_schema::<Handler::ID>();
|
let id_schema = (self.0).openapi_builder.add_schema::<Handler::ID>();
|
||||||
|
|
||||||
let path = format!("/{}/{{id}}", &self.1);
|
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());
|
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::{
|
use crate::{
|
||||||
matcher::{AcceptHeaderMatcher, ContentTypeMatcher},
|
matcher::{AcceptHeaderMatcher, ContentTypeMatcher},
|
||||||
|
openapi::router::OpenapiRouter,
|
||||||
resource::*,
|
resource::*,
|
||||||
result::{ResourceError, ResourceResult, Response},
|
result::{ResourceError, ResourceResult, Response},
|
||||||
RequestBody,
|
RequestBody,
|
||||||
|
@ -49,7 +50,7 @@ pub trait WithOpenapi<D>
|
||||||
{
|
{
|
||||||
fn with_openapi<F>(&mut self, title : String, version : String, server_url : String, block : F)
|
fn with_openapi<F>(&mut self, title : String, version : String, server_url : String, block : F)
|
||||||
where
|
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
|
/// 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)
|
fn with_openapi<F>(&mut self, title : String, version : String, server_url : String, block : F)
|
||||||
where
|
where
|
||||||
F : FnOnce((&mut Self, &mut OpenapiBuilder))
|
F : FnOnce(OpenapiRouter<$implType<'a, C, P>>)
|
||||||
{
|
{
|
||||||
let mut router = OpenapiBuilder::new(title, version, server_url);
|
let router = OpenapiRouter {
|
||||||
block((self, &mut router));
|
router: self,
|
||||||
|
openapi_builder: &mut OpenapiBuilder::new(title, version, server_url)
|
||||||
|
};
|
||||||
|
block(router);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue