46 points lukaslalinsky 1 hour ago 18 comments

slopinthebag 1 hour ago | parent

one thing i love about rust's macros is that you can accomplish this without needing a separate file type or inventing syntax

   #[component]
   pub fn HomePage(user: Option<User>) -> Element {
      rsx! {
         Layout { 
            title: "Home",
            if let Some(u) = user {
               h1 { "Welcome back, {u.name}!" }
               a { href: "/users/{u.id}", "Your profile" }
            } else {
               h1 { "Welcome, guest!" }
               a { href: "/login", "Log in" }
            }
         }
      }
   }

sroerick 1 hour ago | parent

That is super cool actually

asimovDev 58 minutes ago | parent

This is just Twig templates, crazy. It's cool that Rust can do this out of a box

slopinthebag 55 minutes ago | parent

yep and you get rust's lsp support too, autoformatting, etc.

this is rsx, but there are other macros that look just like html. i prefer this though, it's much more compact and readable imo

dnautics 47 minutes ago | parent

> you can accomplish this

That's not HTML though, you have to learn a whole new dsl that must conform to rust parser rules. So, not the same thing at all.

josephg 38 minutes ago | parent

You can do actual html. This is Leptos, a Solidjs like rust library:

    #[component]
    fn App() -> impl IntoView {
        let (count, set_count) = signal(0);
        view! {
            <button
                on:click=move |_| set_count.set(3) >
                "Click me”</button>
            <p>{move || count.get() * 2}</p>
        }
    }

skavi 14 minutes ago | parent

but you have invented syntax

Humphrey 1 hour ago | parent

I love the idea! I could imagine something similar created for other languages too. Perhaps written in a way that a template could be reused in, let's say Django, and a JS React frontend. With all the type-safety that tsx provides.

dnautics 48 minutes ago | parent

This is sort of halfway between tsx and Elixir's EEx

sorokod 31 minutes ago | parent

marcle 29 minutes ago | parent

I always thought that the type-safe XML/HTML in Ur/Web was elegant.

For examples, see http://www.impredicative.com/ur/demo/

fergie 51 minutes ago | parent

W3C: Why can't we just have <includes src="./header.html"> and be done with it?

jrimbault 36 minutes ago | parent

<?php include "header.html" ?>

messe 33 minutes ago | parent

    <!-- #include file="header.html" -->
https://en.wikipedia.org/wiki/Server_Side_Includes

fergie 31 minutes ago | parent

SSIs are not widely supported any more, and were never a part of the HTML standard

(but yes- I used these a lot like 25 years ago)

fergie 32 minutes ago | parent

Yes, but then you need php

Why is there no direct support for templating in HTML itself?

cton 23 minutes ago | parent

pautasso 5 minutes ago | parent

Nice idea!

https://web.dev/articles/imports

Been there, tried that.

Introduced in 2014 (Chrome 36) Deprecated 2018 (Chrome 70) Retired 2019 (Chrome 73)