cjval 0.9.0

Schema-validation of CityJSON/Seq datasets
Documentation
use crate::cjval::CJValidator;
use cjval;

use serde_json::json;
use serde_json::Value;

fn get_data1() -> Value {
    let j_mininal = r#"
        {
            "type": "CityJSON",
            "version": "2.0",
            "CityObjects":
            {
                "LondonTower": { 
                    "type": "Building",
                    "attributes": {
                      "size": 23232.1,
                      "+building-type": "residential",
                      "function": "something"
                    },
                    "geometry": []
                }
            },
            "vertices": [],
            "transform":
            {
                "scale": [0.001, 0.001, 0.001],
                "translate": [ 0.0, 0.0, 0.0]
            }
        }
        "#;
    let v: Value = serde_json::from_str(&j_mininal).unwrap();
    v
}

#[test]
fn extension_att_no_schema() {
    let j = get_data1();
    let v: CJValidator = CJValidator::from_str(&j.to_string());
    let re = v.validate();
    assert!(!re["extensions"].is_valid());
}

#[test]
fn extension_att_w_schema() {
    let j = get_data1();
    let mut v: CJValidator = CJValidator::from_str(&j.to_string());
    let s = std::fs::read_to_string("schemas/extensions/20/simpleattribute.ext.json").unwrap();
    let _ = v.add_one_extension_from_str(&s);
    let re = v.validate();
    assert!(re["extensions"].is_valid());
}

#[test]
fn extension_att_w_schema_2() {
    let mut j = get_data1();
    *j.pointer_mut("/CityObjects/LondonTower/attributes/+building-type")
        .unwrap() = json!("commercial");
    let mut v: CJValidator = CJValidator::from_str(&j.to_string());
    let s = std::fs::read_to_string("schemas/extensions/20/simpleattribute.ext.json").unwrap();
    let _ = v.add_one_extension_from_str(&s);
    let re = v.validate();
    assert!(re["extensions"].is_valid());
}