17个版本
0.1.16 | 2024年1月2日 |
---|---|
0.1.15 | 2023年12月20日 |
0.1.14 | 2023年7月15日 |
0.1.12 | 2023年4月23日 |
0.0.0 |
|
#1659 in 编码
54,973 个月下载量
用于 2 crates
66KB
1.5K SLoC
serde_starlark
Serde序列化器,用于生成有效的Starlark,这是一种声明性格式,用于在包括Bazel、Buck、Pants和Please等构建系统中描述构建目标。
示例
以下示例将syn
crate的最小Bazel目标进行序列化。
该仓库中的tests/bazel.rs测试有一个更详细的示例,包括诸如load(…)
、package(default_visibility = …)
、对glob(…)
的独立include
和exclude
参数以及select({…})
等内容。
#[derive(Serialize)]
#[serde(rename = "rust_library")]
pub struct RustLibrary {
pub name: String,
pub srcs: Glob,
pub crate_features: BTreeSet<String>,
pub edition: u16,
pub deps: BTreeSet<String>,
}
#[derive(Serialize)]
#[serde(rename = "glob")]
pub struct Glob(pub BTreeSet<String>);
fn main() {
let rust_library = RustLibrary { ... };
print!("{}", serde_starlark::to_string(&rust_library).unwrap());
}
rust_library(
name = "syn",
srcs = glob(["**/*.rs"]),
crate_features = [
"default",
"full",
],
edition = 2018,
deps = [
":proc-macro2",
":quote",
":unicode-ident",
],
)
数据模型
原始类型(整数、布尔值、字符串)以明显的方式序列化为Starlark。
Serde序列化序列序列化为Starlark数组。Serde映射序列化为Starlark映射。
具有命名字段的Rust结构体序列化为具有命名参数的Starlark "函数调用"。
#[derive(Serialize)]
#[serde(rename = "rust_library")]
pub struct RustLibrary {
pub name: String,
pub edition: u16,
}
rust_library(
name = "syn",
edition = 2018,
)
Rust新类型结构体和元组结构体序列化为具有位置参数的Starlark "函数调用"。
#[derive(Serialize)]
#[serde(rename = "select")]
pub struct Select<T>(pub BTreeMap<String, T>);
select({
"//conditions:default": [],
})
要使新类型结构体不显示为函数调用,请使用serde(transparent)
属性。
#[derive(Serialize)]
#[serde(transparent)]
pub struct Dependency(pub String);
类型为 Option<T>
的字段序列化时可以表示为 None
或存在时的值。建议使用 serde(skip_serializing_if = "Option::is_none")
来省略序列化输出中的值为 None
的字段。
许可证
根据您的选择,可在 Apache License, Version 2.0 或 MIT 许可证 下使用。除非您明确声明,否则您提交的任何有意包含在此软件包中的贡献,如 Apache-2.0 许可证中定义的,应按上述方式双许可,不附加任何额外条款或条件。
依赖项
~110–345KB