semantic/
semantic.rs

1use html_types::semantic::{Body, Class, Document, Head, Html, Id, Script};
2use html_types::{attributes::Value, text::Text, url::Url};
3
4// This shows the semantic module of
5// The semantic module is trying to provide strongly typed models of the html data structure
6// The idea is that you are required to have values in the correct types. Such that the
7// title element exists as a text node, inside head
8//
9// This means html syntax errors == compiler errors
10// It also means you can much more easily verify your template functions worked as expected.
11// This sample builds a very minimal document. Using the semantic module
12fn main() {
13    let title = Some(Text::create("Title"));
14    let styles = vec![];
15    let url = Url::absolute_unchecked("http://google.com".into());
16    let script = Script::External(url);
17    let scripts = vec![script];
18    let head = Head {
19        title,
20        styles,
21        scripts,
22    };
23    let content = vec![Text::create("Hello").into()];
24    let body = Body {
25        content,
26        scripts: vec![],
27        id: Some(Id::create("my-id").unwrap()),
28        class: vec![
29            Class::create("test").unwrap(),
30            Class::create("body").unwrap(),
31        ],
32    };
33    let html = Html {
34        head,
35        body,
36        lang: Value::EN,
37    };
38    let doc = Document { html };
39    let string: String = doc.into();
40
41    println!("{}", string);
42}