1use packo::Packo;
2
3pub type Document = Packo<256, Tag, 1, u8>;
4
5pub struct Tag {
6 name: &'static str,
7 text: &'static str,
8}
9
10#[rustfmt::skip]
11fn main() {
12 let mut doc = Document::default();
13
14 let html = doc.insert(Tag { name: "html", text: "" });
15 let body = doc.nest(html, Tag{ name: "body", text: "" });
16 let p1 = doc.nest(body, Tag{ name: "p", text: "first line" });
17 let _p2 = doc.append(p1, Tag{ name: "p", text: "second line" });
18
19 print(&doc, html);
20 println!();
21
22 println!("{doc}");
23}
24
25fn print(d: &Document, i: u8) {
26 print!("<{}>", d[i].name);
27 let s = d.child(i);
28 let mut c = s;
29 while c != 0 {
30 print(d, c);
31 c = d.next(c);
32 if c == s {
33 break;
34 }
35 }
36 print!("{}", d[i].text);
37 print!("</{}>", d[i].name);
38}