73个版本 (16个重大更改)
新 0.17.2 | 2024年8月19日 |
---|---|
0.16.6 | 2024年7月22日 |
0.14.2 | 2024年3月7日 |
0.12.8 | 2023年12月4日 |
0.11.0 | 2023年7月3日 |
#1285 in 过程宏
4,062 每月下载量
在 18 个库中使用 (通过 schematic)
105KB
2.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())?;
依赖
~1.2–1.7MB
~32K SLoC