92 个版本 (16 个重大更新)

0.17.3 2024 年 8 月 19 日
0.16.6 2024 年 7 月 22 日
0.14.5 2024 年 3 月 14 日
0.12.12 2023 年 12 月 10 日
0.11.0 2023 年 7 月 3 日

#184 in 编码

Download history 930/week @ 2024-04-29 479/week @ 2024-05-06 617/week @ 2024-05-13 1407/week @ 2024-05-20 1167/week @ 2024-05-27 1070/week @ 2024-06-03 1220/week @ 2024-06-10 849/week @ 2024-06-17 907/week @ 2024-06-24 817/week @ 2024-07-01 868/week @ 2024-07-08 960/week @ 2024-07-15 1132/week @ 2024-07-22 1025/week @ 2024-07-29 896/week @ 2024-08-05 1010/week @ 2024-08-12

每月 4,130 次下载
17 个 crates (11 直接) 中使用

MIT 许可证

215KB
5K SLoC

原理图

原理图是一个提供以下功能的库:

  • 一个支持合并策略、验证规则、环境变量等的多层 serde 驱动的配置系统!
  • 一个可以用来生成 TypeScript 类型、JSON 模式等模式建模系统!

这两个功能可以独立使用或一起使用。

cargo add schematic

开始使用: https://moonrepo.github.io/schematic

配置

  • 通过 serde 支持基于 JSON、TOML 和 YAML 的配置。
  • 从文件系统或安全的 URL 加载源。
  • 源分层,合并成最终配置。
  • 通过注释设置扩展额外文件。
  • 字段级合并策略,内置合并函数。
  • 聚合验证,内置验证函数(由 garde 提供)。
  • 环境变量解析和覆盖。
  • 美观的解析和验证错误(由 miette 提供)。
  • 生成可渲染为 TypeScript 类型、JSON 模式等的模式!

定义一个结构体或枚举,并派生 Config 特性。

use schematic::Config;

#[derive(Config)]
struct AppConfig {
	#[setting(default = 3000, env = "PORT")]
	port: usize,

	#[setting(default = true)]
	secure: bool,

	#[setting(default = vec!["localhost".into()])]
	allowed_hosts: Vec<String>,
}

然后从一个或多个源加载、解析、合并和验证配置。源可以是文件路径、安全 URL 或代码块。

use schematic::{ConfigLoader, Format};

let result = ConfigLoader::<AppConfig>::new()
	.code("secure: false", Format::Yaml)?
	.file("path/to/config.yml")?
	.url("https://ordomain.com/to/config.yaml")?
	.load()?;

result.config;
result.layers;

模式

定义一个结构体或枚举,并派生或实现 Schematic 特性。

use schematic::Schematic;

#[derive(Schematic)]
struct Task {
	command: String,
	args: Vec<String>,
	env: HashMap<String, String>,
}

然后使用模式类型信息生成多种格式的输出,如 JSON 模式或 TypeScript 类型。

use schematic::schema::{SchemaGenerator, TypeScriptRenderer};

let mut generator = SchemaGenerator::default();
generator.add::<Task>();
generator.generate(output_dir.join("types.ts"), TypeScriptRenderer::default())?;

依赖关系

~3–19MB
~205K SLoC