document_tree/
lib.rs

1#![warn(clippy::pedantic)]
2#![recursion_limit = "256"]
3
4//! See [doctree][] reference.
5//! Serves as AST.
6//!
7//! [doctree]: https://docutils.sourceforge.net/docs/ref/doctree.html
8
9#[macro_use]
10mod macro_util;
11
12pub mod attribute_types;
13pub mod element_categories;
14pub mod elements;
15pub mod extra_attributes;
16pub mod url;
17
18pub use self::element_categories::HasChildren;
19pub use self::elements::*; //Element,CommonAttributes,HasExtraAndChildren
20pub use self::extra_attributes::ExtraAttributes;
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25    use std::default::Default;
26
27    #[test]
28    fn imperative() {
29        let mut doc = Document::default();
30        let mut title = Title::default();
31        let url = "https://example.com/image.jpg".parse().unwrap();
32        let image = ImageInline::with_extra(extra_attributes::ImageInline::new(url));
33        title.append_child("Hi");
34        title.append_child(image);
35        doc.append_child(title);
36
37        println!("{doc:?}");
38    }
39
40    #[test]
41    fn descriptive() {
42        let doc = Document::with_children(vec![
43            Title::with_children(vec![
44                "Hi".into(),
45                ImageInline::with_extra(extra_attributes::ImageInline::new(
46                    "https://example.com/image.jpg".parse().unwrap(),
47                ))
48                .into(),
49            ])
50            .into(),
51        ]);
52
53        println!("{doc:?}");
54    }
55}