jsxn 0.1.1

Put JSX in your JSON and JSON in your JSX!
Documentation
use ::jsxn::{json, jsx, jsxn};
use nom::error::ErrorKind;
use pretty_assertions::assert_eq;
use std::collections::BTreeMap;

const VALID_JSX_ELEMENT: &str = r#"
    <Element prop="value" />
"#;

const VALID_JSON: &str = r#"
    { "key": "value" }
"#;

#[test]
fn parse_valid_jsxn() {
    assert_eq!(
        jsxn::root::<(&str, ErrorKind)>(VALID_JSX_ELEMENT),
        Ok((
            "",
            jsxn::JsxnValue::JsxValue(jsx::JsxValue::JsxElement(jsx::JsxElement::new(
                String::from("Element"),
                {
                    let mut props = BTreeMap::new();
                    props.insert(
                        String::from("prop"),
                        jsx::JsxValue::JsonValue(json::JsonValue::Str(String::from("value"))),
                    );
                    props
                },
                vec![],
            )))
        ))
    );
    assert_eq!(
        jsxn::root::<(&str, ErrorKind)>(VALID_JSON),
        Ok((
            "",
            jsxn::JsxnValue::JsonValue(json::JsonValue::Object({
                let mut object = BTreeMap::new();
                object.insert(
                    String::from("key"),
                    json::JsonValue::Str(String::from("value")),
                );
                object
            }))
        ))
    );
}

#[test]
fn serialize_jsxn() {
    assert_eq!(
        serde_json::to_string_pretty(
            &jsxn::root::<(&str, ErrorKind)>(&format!("[{},{}]", VALID_JSX_ELEMENT, VALID_JSON))
                .unwrap()
                .1
        )
        .unwrap(),
        String::from(
            r#"[
  {
    "type": "Element",
    "props": {
      "prop": "value"
    },
    "children": []
  },
  {
    "key": "value"
  }
]"#
        )
    )
}