#kdl #schema #node #parser #document #type #title

kdl-schema

为KDL提供模式类型和解析

1个不稳定版本

0.1.0 2022年3月28日

#2233数据库接口


用于 kdl-schema-check

BlueOak-1.0.0

54KB
1K SLoC

kdl-schema

KDL Schema 类型和解析。

示例

构建一个模式

use kdl_schema::*;
let schema = Schema {
    document: Document {
        info: Info {
            title: vec![TextValue {
                text: "Sample Schema".to_string(),
                lang: Some("en".to_string()),
            }],
            ..Info::default()
        },
        nodes: vec![Node {
            name: Some("name".to_string()),
            values: vec![Value {
                validations: vec![Validation::Type("string".to_string())],
                ..Value::default()
            }],
            ..Node::default()
        }]
    }
};
println!("{:?}", schema);

解析一个模式KDL

#[cfg(feature = "parse-knuffel")] {
    let schema_kdl = r#"
document {
    info {
        title "Sample Schema" lang="en"
        description "An example schema" lang="en"
        author "boringcactus"
    }
    node "name" {
        value {
            type "string"
        }
    }
    node "age" {
        value {
            type "number"
        }
    }
}
"#;
    let _matching_document = r#"
name "Joe"
age 69
"#;
    let schema = kdl_schema::Schema::parse(schema_kdl).unwrap();
    assert_eq!(schema.document.info.title[0].text, "Sample Schema");
}

引用模式模式

assert_eq!(kdl_schema::SCHEMA_SCHEMA.document.info.title[0].text, "KDL Schema");

cargo功能

阻止版本1.0.0的条件

  • 一致的良好的文档
  • 如果引用源有其他内容,则将引用目标合并到引用源上
  • 良好的API从文件中进行解析
  • 类型实际上与模式匹配(目前我正在省略一些内容,因为模式模式没有使用它们)
  • 易于使用的构建器API,以非丑陋的方式在Rust中定义模式
  • 可以从Rust中的模式对象生成KDL
  • 可以选择kdl或knuffel作为解析器
  • 确保required falseprop中正常工作
  • 在解析时验证模式(确保例如引用可解析,ID是唯一的)
  • 确保枚举与整数值一起工作
  • 允许语言标签、修改日期等丰富类型

许可

Blue Oak Model License 1.0.0.

依赖关系

~6–350KB