20个版本 (5个重大变更)
0.6.1 | 2022年4月23日 |
---|---|
0.6.0 | 2022年4月16日 |
0.5.1 | 2022年4月11日 |
0.4.3 | 2022年4月9日 |
0.1.3 | 2022年3月30日 |
#1100 在 编码
每月57次下载
50KB
1K SLoC
Rschema —
Rschema 提供了一个宏,用于从Rust结构中生成JSON模式。
示例
use rschema::{
Schema,
Schematic,
};
#[derive(Debug, Schematic)]
#[rschema(additional_properties)]
struct Data {
#[rschema(
title = "Test flag",
description = "The flag whether for test.",
)]
test_flag: bool,
}
#[derive(Debug, Schematic)]
struct AppConfig {
#[rschema(
title = "Application name",
required,
)]
name: String,
#[rschema(
title = "Application version",
pattern = r"^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$",
required,
)]
version: String,
#[rschema(
title = "Application data",
description = "This property is optional.",
)]
other_data: Data,
}
fn main() -> rschema::Result<()> {
Schema::new::<AppConfig>("Application Config")
.write_pretty("../schemas/config.schema.json")?;
Ok(())
}
此代码生成以下JSON模式文件。
{
"title": "Application Config",
"type": "object",
"properties": {
"name": {
"title": "Application name",
"type": "string"
},
"version": {
"title": "Application version",
"type": "string",
"pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
},
"other_data": {
"title": "Application data",
"type": "object",
"properties": {
"test_flag": {
"title": "Test flag",
"description": "The flag whether for test.",
"type": "boolean"
}
},
"additionalProperties": true
}
},
"required": [
"name",
"version"
],
"additionalProperties": false
}
与Serde结合使用
Rschema 强烈建议与 Serde 结合使用。
例如,从您定义的结构和枚举生成JSON模式。通过JSON模式验证的数据文件始终可反序列化为原始结构!
依赖关系
~2–2.9MB
~57K SLoC