confignode 0.1.0

A library to parse Kerbal Space Program 1 ConfigNode files
Documentation
use std::collections::HashMap;

use confignode::{ConfigNode, ConfigNodeParser, ConfigNodeValue};

#[test]
fn comments() {
    assert_eq!(
        ConfigNodeParser::parse(
            "
            // test
            ABC = DEF"
        ),
        Ok(ConfigNode {
            children: HashMap::from([("ABC".to_owned(), ConfigNodeValue::Text("DEF".to_owned()))])
        })
    );

    assert_eq!(
        ConfigNodeParser::parse(
            "
            ABC = DE//F"
        ),
        Ok(ConfigNode {
            children: HashMap::from([("ABC".to_owned(), ConfigNodeValue::Text("DE".to_owned()))])
        })
    );

    assert_eq!(
        ConfigNodeParser::parse("A/B/C =/ DE/F//G"),
        Ok(ConfigNode {
            children: HashMap::from([(
                "A/B/C".to_owned(),
                ConfigNodeValue::Text("/ DE/F".to_owned())
            )])
        })
    );

    assert_eq!(
        ConfigNodeParser::parse(
            "GAME//test
            {
                Title = Career (CAREER)
            }"
        ),
        Ok(ConfigNode {
            children: HashMap::from([(
                "GAME".to_owned(),
                ConfigNodeValue::Node(ConfigNode {
                    children: HashMap::from([(
                        "Title".to_owned(),
                        ConfigNodeValue::Text("Career (CAREER)".to_owned())
                    )])
                })
            )])
        })
    );
}

#[test]
fn empty() {
    assert_eq!(
        ConfigNodeParser::parse(""),
        Ok(ConfigNode {
            children: HashMap::new()
        })
    );
}

#[test]
fn special_characters() {
    assert_eq!(
        ConfigNodeParser::parse(
            "!!@(#@/
            {
                +-\\() = \\=/-$(!)
            }"
        ),
        Ok(ConfigNode {
            children: HashMap::from([(
                "!!@(#@/".to_owned(),
                ConfigNodeValue::Node(ConfigNode {
                    children: HashMap::from([(
                        "+-\\()".to_owned(),
                        ConfigNodeValue::Text("\\=/-$(!)".to_owned())
                    )])
                })
            )])
        })
    );
}