diff options
author | mcarton <cartonmartin+git@gmail.com> | 2018-12-12 20:43:36 +0100 |
---|---|---|
committer | Dirkjan Ochtman <dirkjan@ochtman.nl> | 2018-12-12 21:48:41 +0100 |
commit | 48c5ebbd2be8f7d89f37f3aa04500b8ad1a3d460 (patch) | |
tree | b21964dcbce68948ae3dee763ea7c61931ed5167 /askama_derive/src/generator.rs | |
parent | 9e1cf8f0dff3bd96db4b25703877db5632267ed2 (diff) | |
download | askama-48c5ebbd2be8f7d89f37f3aa04500b8ad1a3d460.tar.gz askama-48c5ebbd2be8f7d89f37f3aa04500b8ad1a3d460.tar.bz2 askama-48c5ebbd2be8f7d89f37f3aa04500b8ad1a3d460.zip |
Allow using brackets for enums in `match`
Diffstat (limited to '')
-rw-r--r-- | askama_derive/src/generator.rs | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs index b30b040..047e975 100644 --- a/askama_derive/src/generator.rs +++ b/askama_derive/src/generator.rs @@ -1,6 +1,6 @@ use super::{get_template_source, Context, Heritage}; use crate::input::TemplateInput; -use crate::parser::{Cond, Expr, MatchParameter, MatchVariant, Node, Target, When, WS}; +use crate::parser::{Cond, Expr, MatchParameter, MatchParameters, MatchVariant, Node, Target, When, WS}; use askama_shared::filters; use proc_macro2::Span; @@ -399,18 +399,43 @@ impl<'a> Generator<'a> { } None => buf.write("_"), }; - if !params.is_empty() { - buf.write("("); - for (i, param) in params.iter().enumerate() { - if let MatchParameter::Name(p) = *param { - self.locals.insert(p); + + match params { + MatchParameters::Simple(params) => { + if !params.is_empty() { + buf.write("("); + for (i, param) in params.iter().enumerate() { + if let MatchParameter::Name(p) = *param { + self.locals.insert(p); + } + if i > 0 { + buf.write(", "); + } + self.visit_match_param(buf, param); + } + buf.write(")"); } - if i > 0 { - buf.write(", "); + } + MatchParameters::Named(params) => { + buf.write("{"); + for (i, param) in params.iter().enumerate() { + if let Some(MatchParameter::Name(p)) = param.1 { + self.locals.insert(p); + } else { + self.locals.insert(param.0); + } + + if i > 0 { + buf.write(", "); + } + buf.write(param.0); + if let Some(param) = ¶m.1 { + buf.write(":"); + self.visit_match_param(buf, ¶m); + } } - self.visit_match_param(buf, param); + buf.write("}"); } - buf.write(")"); } buf.writeln(" => {"); self.handle_ws(ws); |