origami_engine

Macro anon

source
anon!() { /* proc-macro */ }
Expand description

§anon! Macro

The anon! macro is responsible for rendering HTML elements into a String. It supports conditionals, loops, and any expression that returns &str.

§Basic Usage

use origami_macros::anon;

let mut s = String::new();
anon!(s, div {
    "Hello, World!"
});
assert_eq!(s, "<div>Hello, World!</div>");

§Expressions

You can include any expression that returns &str directly in the HTML:

use origami_macros::anon;

let foo = "some_string";
let mut s = String::new();
anon!(s, div {
    *foo;
});
assert_eq!(s, "<div>some_string</div>");

let mut s = String::new();
let bar = "dynamic_string";
anon!(s, div {
    *format!("Hello, {}", bar).as_str(); // Using format! as an expression
});
assert_eq!(s, "<div>Hello, dynamic_string</div>");

§Match Expressions

anon! supports match expressions for dynamic content:

use origami_macros::anon;

let value = "bar";
let mut s = String::new();
anon!(s, div {
    match value; {
        "bar" => { "Bar Component" },
        _ => { "Default Component" },
    }
});
assert_eq!(s, "<div>Bar Component</div>");

§Conditionals

anon! supports conditionals directly:

use origami_macros::anon;

let condition = true;
let mut s = String::new();
anon!(s, div {
    if condition; {
        "Condition met!"
    }
});
assert_eq!(s, "<div>Condition met!</div>");

§Loops

You can iterate over collections with anon!:

use origami_macros::anon;

struct Points {
    x: i32,
    y: i32,
}
let points = [
    Points { x: 1, y: 2 },
    Points { x: 3, y: 4 },
];
let mut s = String::new();
anon!(s, div {
    for point in points.iter(); {
        div {
            *point.x.to_string().as_str();
            ", "
            *point.y.to_string().as_str();
        }
    }
});
assert_eq!(s, "<div><div>1, 2</div><div>3, 4</div></div>");