[][src]Crate serde_indextree

Serializing indextree structure.

Usage

serde_indextree provides two struct: Node for serializing a node and its descendants, SiblingNodes for serializing a node and its siblings in sequence.

use indextree::Arena;
use serde::Serialize;
use serde_indextree::Node;
use serde_json::to_string;

#[derive(Serialize)]
struct HtmlElement {
    tag: &'static str
}

// <html><head><title></title><head><body><h1></h1><h2></h2></body></html>
let arena = &mut Arena::new();
let a = arena.new_node(HtmlElement { tag: "html" });
let b = arena.new_node(HtmlElement { tag: "head" });
a.append(b, arena).unwrap();
let c = arena.new_node(HtmlElement { tag: "title" });
b.append(c, arena).unwrap();
let d = arena.new_node(HtmlElement { tag: "body" });
a.append(d, arena).unwrap();
let e = arena.new_node(HtmlElement { tag: "h1" });
d.append(e, arena).unwrap();
let f = arena.new_node(HtmlElement { tag: "h2" });
d.append(f, arena).unwrap();

assert_eq!(
    to_string(&Node::new(a, arena)).unwrap(),
    "{\
        \"tag\": \"html\",\
        \"children\": [\
            {\
                \"tag\": \"head\",\
                \"children\": [\
                    { \"tag\": \"title\" }\
                ]\
            }, {\
                \"tag\": \"body\",\
                \"children\": [\
                    { \"tag\": \"h1\" },\
                    { \"tag\": \"h2\" }\
                ]\
            }\
        ]\
    }"
);

Customization

Unfortunately, serde_indextree doesn't come up with any customization.

If you want to rename field names or anything, just copy the entire code (only 40+ lines) and modify it at your wish.

License

MIT

Structs

Node

Convenience wrapper struct for serializing a node and its descendants.

SiblingNodes

Convenience wrapper struct for serializing a node and its siblings.