mirror of
https://gitlab.com/msrd0/gotham-restful.git
synced 2025-04-20 14:57:01 +00:00
match content type
This commit is contained in:
parent
197aad3c94
commit
dd9e10a154
1 changed files with 44 additions and 7 deletions
|
@ -20,7 +20,11 @@ use gotham::{
|
||||||
router::{
|
router::{
|
||||||
builder::*,
|
builder::*,
|
||||||
non_match::RouteNonMatch,
|
non_match::RouteNonMatch,
|
||||||
route::matcher::{AcceptHeaderRouteMatcher, RouteMatcher}
|
route::matcher::{
|
||||||
|
content_type::ContentTypeHeaderRouteMatcher,
|
||||||
|
AcceptHeaderRouteMatcher,
|
||||||
|
RouteMatcher
|
||||||
|
}
|
||||||
},
|
},
|
||||||
state::{FromState, State}
|
state::{FromState, State}
|
||||||
};
|
};
|
||||||
|
@ -305,6 +309,33 @@ impl From<Option<Vec<Mime>>> for MaybeMatchAcceptHeader
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
struct MaybeMatchContentTypeHeader
|
||||||
|
{
|
||||||
|
matcher : Option<ContentTypeHeaderRouteMatcher>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RouteMatcher for MaybeMatchContentTypeHeader
|
||||||
|
{
|
||||||
|
fn is_match(&self, state : &State) -> Result<(), RouteNonMatch>
|
||||||
|
{
|
||||||
|
match &self.matcher {
|
||||||
|
Some(matcher) => matcher.is_match(state),
|
||||||
|
None => Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Option<Vec<Mime>>> for MaybeMatchContentTypeHeader
|
||||||
|
{
|
||||||
|
fn from(types : Option<Vec<Mime>>) -> Self
|
||||||
|
{
|
||||||
|
Self {
|
||||||
|
matcher: types.map(ContentTypeHeaderRouteMatcher::new)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! implDrawResourceRoutes {
|
macro_rules! implDrawResourceRoutes {
|
||||||
($implType:ident) => {
|
($implType:ident) => {
|
||||||
|
|
||||||
|
@ -386,9 +417,11 @@ macro_rules! implDrawResourceRoutes {
|
||||||
Res : ResourceResult,
|
Res : ResourceResult,
|
||||||
Handler : ResourceCreate<Body, Res>
|
Handler : ResourceCreate<Body, Res>
|
||||||
{
|
{
|
||||||
let matcher : MaybeMatchAcceptHeader = Res::accepted_types().into();
|
let accept_matcher : MaybeMatchAcceptHeader = Res::accepted_types().into();
|
||||||
|
let content_matcher : MaybeMatchContentTypeHeader = Body::supported_types().into();
|
||||||
self.0.post(&self.1)
|
self.0.post(&self.1)
|
||||||
.extend_route_matcher(matcher)
|
.extend_route_matcher(accept_matcher)
|
||||||
|
.extend_route_matcher(content_matcher)
|
||||||
.to(|state| create_handler::<Handler, Body, Res>(state));
|
.to(|state| create_handler::<Handler, Body, Res>(state));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,9 +431,11 @@ macro_rules! implDrawResourceRoutes {
|
||||||
Res : ResourceResult,
|
Res : ResourceResult,
|
||||||
Handler : ResourceUpdateAll<Body, Res>
|
Handler : ResourceUpdateAll<Body, Res>
|
||||||
{
|
{
|
||||||
let matcher : MaybeMatchAcceptHeader = Res::accepted_types().into();
|
let accept_matcher : MaybeMatchAcceptHeader = Res::accepted_types().into();
|
||||||
|
let content_matcher : MaybeMatchContentTypeHeader = Body::supported_types().into();
|
||||||
self.0.put(&self.1)
|
self.0.put(&self.1)
|
||||||
.extend_route_matcher(matcher)
|
.extend_route_matcher(accept_matcher)
|
||||||
|
.extend_route_matcher(content_matcher)
|
||||||
.to(|state| update_all_handler::<Handler, Body, Res>(state));
|
.to(|state| update_all_handler::<Handler, Body, Res>(state));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,9 +446,11 @@ macro_rules! implDrawResourceRoutes {
|
||||||
Res : ResourceResult,
|
Res : ResourceResult,
|
||||||
Handler : ResourceUpdate<ID, Body, Res>
|
Handler : ResourceUpdate<ID, Body, Res>
|
||||||
{
|
{
|
||||||
let matcher : MaybeMatchAcceptHeader = Res::accepted_types().into();
|
let accept_matcher : MaybeMatchAcceptHeader = Res::accepted_types().into();
|
||||||
|
let content_matcher : MaybeMatchContentTypeHeader = Body::supported_types().into();
|
||||||
self.0.put(&format!("{}/:id", self.1))
|
self.0.put(&format!("{}/:id", self.1))
|
||||||
.extend_route_matcher(matcher)
|
.extend_route_matcher(accept_matcher)
|
||||||
|
.extend_route_matcher(content_matcher)
|
||||||
.with_path_extractor::<PathExtractor<ID>>()
|
.with_path_extractor::<PathExtractor<ID>>()
|
||||||
.to(|state| update_handler::<Handler, ID, Body, Res>(state));
|
.to(|state| update_handler::<Handler, ID, Body, Res>(state));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue