33个版本 (7个重大更新)

0.9.3 2024年8月19日
0.8.4 2024年7月22日
0.6.0 2024年2月6日
0.4.10 2023年11月30日
0.4.0 2023年7月3日

#974 in 编码

Download history 775/week @ 2024-05-03 513/week @ 2024-05-10 642/week @ 2024-05-17 1369/week @ 2024-05-24 891/week @ 2024-05-31 1127/week @ 2024-06-07 815/week @ 2024-06-14 994/week @ 2024-06-21 799/week @ 2024-06-28 736/week @ 2024-07-05 1059/week @ 2024-07-12 1065/week @ 2024-07-19 803/week @ 2024-07-26 1094/week @ 2024-08-02 969/week @ 2024-08-09 1386/week @ 2024-08-16

每月下载量4,466
18 个crate中使用 (via 方案)

MIT 许可证

51KB
1.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())?;

依赖项

~0.7–2.6MB
~50K SLoC