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编码

Download history 4/week @ 2024-03-31

每月57次下载

MIT/Apache

50KB
1K SLoC

Rschema — Crates 徽标 文档徽标 许可证: Apache 许可证: MIT

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