From 254ac541034e3cf4295e38d33515a3b5f252394a Mon Sep 17 00:00:00 2001
From: Chris Wong <lambda.fairy@gmail.com>
Date: Tue, 29 May 2018 19:18:30 +1200
Subject: [PATCH] Merge If and Special variants

---
 maud_macros/src/ast.rs      |  3 +--
 maud_macros/src/generate.rs |  7 ++++---
 maud_macros/src/parse.rs    | 10 +++++++---
 3 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/maud_macros/src/ast.rs b/maud_macros/src/ast.rs
index b689d70..6f62243 100644
--- a/maud_macros/src/ast.rs
+++ b/maud_macros/src/ast.rs
@@ -21,10 +21,9 @@ pub enum Markup {
     Let {
         tokens: TokenStream,
     },
-    If {
+    Special {
         segments: Vec<Special>,
     },
-    Special(Special),
     Match {
         head: TokenStream,
         arms: Vec<Special>,
diff --git a/maud_macros/src/generate.rs b/maud_macros/src/generate.rs
index 6ae98ef..f3fcce1 100644
--- a/maud_macros/src/generate.rs
+++ b/maud_macros/src/generate.rs
@@ -51,12 +51,11 @@ impl Generator {
             Markup::Splice { expr } => build.push_tokens(self.splice(expr)),
             Markup::Element { name, attrs, body } => self.element(name, attrs, body, build),
             Markup::Let { tokens } => build.push_tokens(tokens),
-            Markup::If { segments } => {
+            Markup::Special { segments } => {
                 for segment in segments {
                     build.push_tokens(self.special(segment));
                 }
             },
-            Markup::Special(special) => build.push_tokens(self.special(special)),
             Markup::Match { head, arms, arms_span } => {
                 build.push_tokens({
                     let body = arms
@@ -178,7 +177,9 @@ fn desugar_classes_or_ids(
             span: toggler.cond_span,
         };
         let head = desugar_toggler(toggler);
-        markups.push(Markup::Special(Special { head, body }));
+        markups.push(Markup::Special {
+            segments: vec![Special { head, body }],
+        });
     }
     Some(Attribute {
         name: TokenStream::from(TokenTree::Ident(Ident::new(attr_name, Span::call_site()))),
diff --git a/maud_macros/src/parse.rs b/maud_macros/src/parse.rs
index 5b79084..c06f41d 100644
--- a/maud_macros/src/parse.rs
+++ b/maud_macros/src/parse.rs
@@ -122,7 +122,7 @@ impl Parser {
                             "if" => {
                                 let mut segments = Vec::new();
                                 self.if_expr(vec![keyword], &mut segments)?;
-                                ast::Markup::If { segments }
+                                ast::Markup::Special { segments }
                             },
                             "while" => self.while_expr(keyword)?,
                             "for" => self.for_expr(keyword)?,
@@ -242,7 +242,9 @@ impl Parser {
                 None => return self.error("unexpected end of @while expression"),
             }
         };
-        Ok(ast::Markup::Special(ast::Special { head: head.into_iter().collect(), body }))
+        Ok(ast::Markup::Special {
+            segments: vec![ast::Special { head: head.into_iter().collect(), body }],
+        })
     }
 
     /// Parses a `@for` expression.
@@ -269,7 +271,9 @@ impl Parser {
                 None => return self.error("unexpected end of @for expression"),
             }
         };
-        Ok(ast::Markup::Special(ast::Special { head: head.into_iter().collect(), body }))
+        Ok(ast::Markup::Special {
+            segments: vec![ast::Special { head: head.into_iter().collect(), body }],
+        })
     }
 
     /// Parses a `@match` expression.