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::{
|
||||
builder::*,
|
||||
non_match::RouteNonMatch,
|
||||
route::matcher::{AcceptHeaderRouteMatcher, RouteMatcher}
|
||||
route::matcher::{
|
||||
content_type::ContentTypeHeaderRouteMatcher,
|
||||
AcceptHeaderRouteMatcher,
|
||||
RouteMatcher
|
||||
}
|
||||
},
|
||||
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 {
|
||||
($implType:ident) => {
|
||||
|
||||
|
@ -386,9 +417,11 @@ macro_rules! implDrawResourceRoutes {
|
|||
Res : ResourceResult,
|
||||
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)
|
||||
.extend_route_matcher(matcher)
|
||||
.extend_route_matcher(accept_matcher)
|
||||
.extend_route_matcher(content_matcher)
|
||||
.to(|state| create_handler::<Handler, Body, Res>(state));
|
||||
}
|
||||
|
||||
|
@ -398,9 +431,11 @@ macro_rules! implDrawResourceRoutes {
|
|||
Res : ResourceResult,
|
||||
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)
|
||||
.extend_route_matcher(matcher)
|
||||
.extend_route_matcher(accept_matcher)
|
||||
.extend_route_matcher(content_matcher)
|
||||
.to(|state| update_all_handler::<Handler, Body, Res>(state));
|
||||
}
|
||||
|
||||
|
@ -411,9 +446,11 @@ macro_rules! implDrawResourceRoutes {
|
|||
Res : ResourceResult,
|
||||
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))
|
||||
.extend_route_matcher(matcher)
|
||||
.extend_route_matcher(accept_matcher)
|
||||
.extend_route_matcher(content_matcher)
|
||||
.with_path_extractor::<PathExtractor<ID>>()
|
||||
.to(|state| update_handler::<Handler, ID, Body, Res>(state));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue