mirror of https://github.com/rwf2/Rocket.git
Parse 'data' parameter in route attribute.
This commit is contained in:
parent
025c9243c0
commit
8adf9f7c46
|
@ -8,6 +8,9 @@ use syntax::ptr::P;
|
||||||
use utils::*;
|
use utils::*;
|
||||||
use rocket::Method;
|
use rocket::Method;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
const DEBUG: bool = true;
|
||||||
|
|
||||||
pub struct MetaItemParser<'a, 'c: 'a> {
|
pub struct MetaItemParser<'a, 'c: 'a> {
|
||||||
attr_name: &'a str,
|
attr_name: &'a str,
|
||||||
ctxt: &'a ExtCtxt<'c>,
|
ctxt: &'a ExtCtxt<'c>,
|
||||||
|
@ -119,6 +122,7 @@ pub struct RouteParams {
|
||||||
pub method: Spanned<Method>,
|
pub method: Spanned<Method>,
|
||||||
pub path: KVSpanned<String>,
|
pub path: KVSpanned<String>,
|
||||||
pub form: Option<KVSpanned<String>>,
|
pub form: Option<KVSpanned<String>>,
|
||||||
|
pub data: Option<KVSpanned<String>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait RouteDecoratorExt {
|
pub trait RouteDecoratorExt {
|
||||||
|
@ -169,7 +173,7 @@ impl<'a, 'c> RouteDecoratorExt for MetaItemParser<'a, 'c> {
|
||||||
|
|
||||||
// Now grab all of the required and optional parameters.
|
// Now grab all of the required and optional parameters.
|
||||||
let req: [&'static str; 1] = ["path"];
|
let req: [&'static str; 1] = ["path"];
|
||||||
let opt: [&'static str; 1] = ["form"];
|
let opt: [&'static str; 2] = ["form", "data"];
|
||||||
let kv_pairs = get_key_values(self.ctxt, self.meta_item.span,
|
let kv_pairs = get_key_values(self.ctxt, self.meta_item.span,
|
||||||
&req, &opt, kv_params);
|
&req, &opt, kv_params);
|
||||||
|
|
||||||
|
@ -179,7 +183,7 @@ impl<'a, 'c> RouteDecoratorExt for MetaItemParser<'a, 'c> {
|
||||||
});
|
});
|
||||||
|
|
||||||
// If there's a form parameter, ensure method is POST.
|
// If there's a form parameter, ensure method is POST.
|
||||||
let form = kv_pairs.get("form").map_or(None, |f| {
|
let form = kv_pairs.get("form").and_then(|f| {
|
||||||
if method.node != Method::Post {
|
if method.node != Method::Post {
|
||||||
self.ctxt.span_err(f.p_span, "Use of `form` requires POST method...");
|
self.ctxt.span_err(f.p_span, "Use of `form` requires POST method...");
|
||||||
let message = format!("...but {} was found instead.", method.node);
|
let message = format!("...but {} was found instead.", method.node);
|
||||||
|
@ -201,10 +205,17 @@ impl<'a, 'c> RouteDecoratorExt for MetaItemParser<'a, 'c> {
|
||||||
Some(f.clone().map(String::from))
|
Some(f.clone().map(String::from))
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let data = kv_pairs.get("data").and_then(|data| {
|
||||||
|
Some(data.clone().map(String::from))
|
||||||
|
});
|
||||||
|
|
||||||
|
debug!("Found data: {:?}", data);
|
||||||
|
|
||||||
RouteParams {
|
RouteParams {
|
||||||
method: method,
|
method: method,
|
||||||
path: path,
|
path: path,
|
||||||
form: form
|
form: form,
|
||||||
|
data: data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue