mirror of https://github.com/fafhrd91/actix-web
reuse percent decoder in macro
This commit is contained in:
parent
6ea98363be
commit
40c1547de6
48
src/de.rs
48
src/de.rs
|
@ -16,6 +16,20 @@ macro_rules! unsupported_type {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! percent_decode_if_needed {
|
||||||
|
($value:expr, $decode:expr) => {
|
||||||
|
if $decode {
|
||||||
|
if let Some(ref value) = RESERVED_QUOTER.requote($value.as_bytes()) {
|
||||||
|
Rc::make_mut(&mut value.clone()).parse()
|
||||||
|
} else {
|
||||||
|
$value.parse()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$value.parse()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! parse_single_value {
|
macro_rules! parse_single_value {
|
||||||
($trait_fn:ident, $visit_fn:ident, $tp:tt) => {
|
($trait_fn:ident, $visit_fn:ident, $tp:tt) => {
|
||||||
fn $trait_fn<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
fn $trait_fn<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
|
@ -26,19 +40,10 @@ macro_rules! parse_single_value {
|
||||||
format!("wrong number of parameters: {} expected 1",
|
format!("wrong number of parameters: {} expected 1",
|
||||||
self.req.match_info().len()).as_str()))
|
self.req.match_info().len()).as_str()))
|
||||||
} else {
|
} else {
|
||||||
let v: &str = &self.req.match_info()[0];
|
let v_parsed = percent_decode_if_needed!(&self.req.match_info()[0], self.decode)
|
||||||
let v_parsed = if self.decode {
|
.map_err(|_| de::value::Error::custom(
|
||||||
let decoded = RESERVED_QUOTER.requote(v.as_bytes());
|
format!("can not parse {:?} to a {}", &self.req.match_info()[0], $tp)
|
||||||
if let Some(ref value) = decoded {
|
))?;
|
||||||
Rc::make_mut(&mut value.clone()).parse()
|
|
||||||
} else {
|
|
||||||
v.parse()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
v.parse()
|
|
||||||
}.map_err(|_| de::value::Error::custom(
|
|
||||||
format!("can not parse {:?} to a {}", &self.req.match_info()[0], $tp)
|
|
||||||
))?;
|
|
||||||
visitor.$visit_fn(v_parsed)
|
visitor.$visit_fn(v_parsed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -256,19 +261,10 @@ macro_rules! parse_value {
|
||||||
fn $trait_fn<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
fn $trait_fn<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
where V: Visitor<'de>
|
where V: Visitor<'de>
|
||||||
{
|
{
|
||||||
let v: &str = &self.value;
|
let v_parsed = percent_decode_if_needed!(&self.value, self.decode)
|
||||||
let v_parsed = if self.decode {
|
.map_err(|_| de::value::Error::custom(
|
||||||
let decoded = RESERVED_QUOTER.requote(v.as_bytes());
|
format!("can not parse {:?} to a {}", &self.value, $tp)
|
||||||
if let Some(ref value) = decoded {
|
))?;
|
||||||
Rc::make_mut(&mut value.clone()).parse()
|
|
||||||
} else {
|
|
||||||
v.parse()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
v.parse()
|
|
||||||
}.map_err(|_| de::value::Error::custom(
|
|
||||||
format!("can not parse {:?} to a {}", &self.value, $tp)
|
|
||||||
))?;
|
|
||||||
visitor.$visit_fn(v_parsed)
|
visitor.$visit_fn(v_parsed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue