47 lines
1.7 KiB
Rust
47 lines
1.7 KiB
Rust
// A very, very simple static composer example.
|
|
|
|
extern crate soda;
|
|
|
|
use soda::prelude::*;
|
|
use css::*;
|
|
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let page = PageBase("Test Page",
|
|
(
|
|
Tag::Style((
|
|
Rule(
|
|
Select::Tag("div").and(Select::Class("red")).or(Select::Tag("span").and(Select::Class("red"))),
|
|
Property::BackgroundColor("red")
|
|
),
|
|
Rule(
|
|
Select::Class("bigger"),
|
|
Property::FontSize(|st : &mut u32| {
|
|
format!("{}px", *st + 10)
|
|
})
|
|
)
|
|
)),
|
|
Tag::Heading1("Hello, World!"),
|
|
Tag::Paragraph("This is a test of Soda, an ultrafast composable frontend framework built in Rust!"),
|
|
Tag::Paragraph((
|
|
"This page has been visited ",
|
|
|st : &mut u32| {
|
|
*st += 1;
|
|
st.to_string()
|
|
},
|
|
" times."
|
|
)),
|
|
Tag::Div(
|
|
"This has a red background!"
|
|
).class("red"),
|
|
Tag::Span("it's coming straight at us!").class("bigger"),
|
|
Tag::Br,
|
|
Tag::Span("leon's getting laaaaaaaaaaaaaaaaaaaaaarger").class("red bigger")
|
|
)
|
|
);
|
|
let app = page.route();
|
|
Server::new(([0, 0, 0, 0], 3000)).await.unwrap().serve(app, 0).await.unwrap();
|
|
// weird rustc bug: if the second argument is omitted, rustc gets stuck in a recursion trying to figure out what type State is
|
|
// *before* exiting on the error produced by the missing argument. this consumes cpu and slowly eats ram until it OOMs or you kill it.
|
|
} |