Categorize response fields.
This commit is contained in:
parent
187a236708
commit
b1d5d50e91
33
src/lib.rs
33
src/lib.rs
@ -247,21 +247,42 @@ enum RequestField {
|
|||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct Response {
|
struct Response {
|
||||||
fields: Vec<Field>,
|
fields: Vec<ResponseField>,
|
||||||
body_fields: Vec<usize>,
|
|
||||||
header_fields: Vec<usize>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Vec<Field>> for Response {
|
impl From<Vec<Field>> for Response {
|
||||||
fn from(fields: Vec<Field>) -> Self {
|
fn from(fields: Vec<Field>) -> Self {
|
||||||
|
let response_fields = fields.into_iter().map(|field| {
|
||||||
|
for attr in field.attrs.clone().iter() {
|
||||||
|
match attr.value {
|
||||||
|
MetaItem::Word(_) | MetaItem::List(_, _) => {}
|
||||||
|
MetaItem::NameValue(ref ident, ref lit) => {
|
||||||
|
if ident == "header" {
|
||||||
|
if let Lit::Str(ref name, _) = *lit {
|
||||||
|
return ResponseField::Header(name.clone(), field);
|
||||||
|
} else {
|
||||||
|
panic!("ruma_api! header attribute expects a string value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ResponseField::Body(field);
|
||||||
|
}).collect();
|
||||||
|
|
||||||
Response {
|
Response {
|
||||||
fields: fields,
|
fields: response_fields,
|
||||||
body_fields: vec![],
|
|
||||||
header_fields: vec![],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum ResponseField {
|
||||||
|
Body(Field),
|
||||||
|
Header(String, Field),
|
||||||
|
}
|
||||||
|
|
||||||
/// Helper method for turning a value into tokens.
|
/// Helper method for turning a value into tokens.
|
||||||
fn tokens_for<T>(value: T) -> Tokens where T: ToTokens {
|
fn tokens_for<T>(value: T) -> Tokens where T: ToTokens {
|
||||||
let mut tokens = Tokens::new();
|
let mut tokens = Tokens::new();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user