oak-json 0.0.11

High-performance incremental JSON parser for the oak ecosystem with flexible configuration, optimized for data interchange and configuration files.
Documentation
#![feature(new_range_api)]
use core::range::Range;
use oak_core::source::ToSource;
use oak_json::ast::*;

#[test]
fn test_json_to_source() {
    let root = JsonRoot {
        value: JsonValueNode::Object(JsonObject {
            fields: vec![
                JsonField { name: JsonString { value: "name".to_string(), span: Range { start: 0, end: 0 } }, value: JsonValueNode::String(JsonString { value: "oak".to_string(), span: Range { start: 0, end: 0 } }), span: Range { start: 0, end: 0 } },
                JsonField { name: JsonString { value: "version".to_string(), span: Range { start: 0, end: 0 } }, value: JsonValueNode::Number(JsonNumber { value: 1.0, span: Range { start: 0, end: 0 } }), span: Range { start: 0, end: 0 } },
            ],
            span: Range { start: 0, end: 0 },
        }),
    };

    let source = root.to_source_string();
    assert_eq!(source, "{\"name\":\"oak\",\"version\":1}");
}

#[cfg(feature = "oak-pretty-print")]
#[test]
fn test_json_to_doc() {
    use oak_pretty_print::{AsDocument, FormatConfig};

    let root = JsonRoot {
        value: JsonValueNode::Object(JsonObject {
            fields: vec![JsonField {
                name: JsonString { value: "name".to_string(), span: Range { start: 0, end: 0 } },
                value: JsonValueNode::String(JsonString { value: "oak".to_string(), span: Range { start: 0, end: 0 } }),
                span: Range { start: 0, end: 0 },
            }],
            span: Range { start: 0, end: 0 },
        }),
    };

    let doc = root.as_document();
    let formatted = doc.render(FormatConfig::default());
    assert!(formatted.contains("\"name\": \"oak\""));
}