diff --git a/src/lib.rs b/src/lib.rs index 2b4251fb..a0b53232 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -247,21 +247,42 @@ enum RequestField { #[derive(Debug)] struct Response { - fields: Vec, - body_fields: Vec, - header_fields: Vec, + fields: Vec, } impl From> for Response { fn from(fields: Vec) -> 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 { - fields: fields, - body_fields: vec![], - header_fields: vec![], + fields: response_fields, } } } +#[derive(Debug)] +enum ResponseField { + Body(Field), + Header(String, Field), +} + /// Helper method for turning a value into tokens. fn tokens_for(value: T) -> Tokens where T: ToTokens { let mut tokens = Tokens::new();