summary refs log tree commit diff
path: root/modules/morgana_proc/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'modules/morgana_proc/src/lib.rs')
-rw-r--r--modules/morgana_proc/src/lib.rs17
1 files changed, 11 insertions, 6 deletions
diff --git a/modules/morgana_proc/src/lib.rs b/modules/morgana_proc/src/lib.rs
index 2f0c81b..8061b1b 100644
--- a/modules/morgana_proc/src/lib.rs
+++ b/modules/morgana_proc/src/lib.rs
@@ -25,7 +25,12 @@ pub fn morx(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
 
     let ast = tokens.to_token_iter().parse_all::<MorxBlock>().expect("syntax error");
 
-    generate_block(&ast).into()
+    let child_vec_expr = generate_block(&ast);
+    quote! {
+        RenderNode::Fragment {
+            children: #child_vec_expr
+        }
+    }.into()
 }
 
 fn generate_block(ast: &MorxBlock) -> unsynn::TokenStream {
@@ -46,7 +51,7 @@ fn generate_block(ast: &MorxBlock) -> unsynn::TokenStream {
 }
 
 fn generate_node(ast: &MorxNode) -> unsynn::TokenStream {
-    let elem_name = ast.0.first.to_string();
+    let elem_name = &ast.0.first;
     let attrs_or_props = match &ast.0.second {
         Either::Fourth(cons) => {
             let attrs = &cons.first;
@@ -98,19 +103,19 @@ fn generate_node(ast: &MorxNode) -> unsynn::TokenStream {
         _ => quote!{ vec![] }
     };
 
-    let is_component_node = elem_name.chars().next().map_or(false, |char| char.is_uppercase());
+    let is_component_node = elem_name.to_string().chars().next().map_or(false, |char| char.is_uppercase());
 
     if is_component_node {
         quote! {
             RenderNode::Component(
-                Box::new(#elem_name {
+                Box::new({ #elem_name {
                     #(#elem_props),*
                     children: #children
-                })
+                } })
             )
         }.into()
     } else {
-        let elem_name = Literal::string(&elem_name).into_token_stream();
+        let elem_name = Literal::string(&elem_name.to_string()).into_token_stream();
         quote! {
             RenderNode::Element {
                 name: #elem_name.to_string(),