8个不稳定版本 (3个破坏性版本)
0.4.1 | 2023年4月20日 |
---|---|
0.4.0 | 2023年2月22日 |
0.3.0 | 2022年11月19日 |
0.2.2 | 2022年10月14日 |
0.1.0 | 2022年4月11日 |
#199 在 过程宏 中
5,053 每月下载量
用于 9 个crate(6个直接使用)
45KB
1K SLoC
StructStruck
是否曾有过深度嵌套的JSON结构体
{
"outer": {
"middle": {
"inner": {
"foo": "bar"
}
}
}
}
并且想要用相同的方式编写Rust结构体来处理数据?
struct Parent {
outer: struct {
middle: struct {
inner: struct {
foo: String,
}
}
}
}
这个过程宏crate正好可以实现这一点。请查看文档以了解具体方法。
为了说明,一些更多用例
- 一个枚举,其中每个变体都有自己的结构体,名称与变体完全相同。
structstruck::strike! {
enum Token {
Identifier(struct {
name: String,
}),
Punctuation(struct {
character: char,
}),
}
}
- 我的原始用例:使用
kube
方便地编写Kubernetes自定义资源。
structstruck::strike! {
#[strikethrough[derive(Deserialize, Serialize, Clone, Debug, Validate, JsonSchema)]]
#[strikethrough[serde(rename_all = "camelCase")]]
#[derive(CustomResource)]
#[kube(
group = "kafka.strimzi.io",
version = "v1beta2",
kind = "Kafka",
namespaced
)]
struct KafkaSpec {
kafka: struct KafkaCluster {
#[validate(length(min = 1))]
version: String,
#[validate(range(min = 1))]
replicas: u32,
listeners: Vec<struct KafkaListener {
name: String,
port: u16,
r#type: String,
tls: bool,
}>,
config: HashMap<String, JsonValue>,
storage: struct {
r#type: String,
volumes: Vec<struct Volume {
id: Option<u64>,
r#type: String,
size: String,
delete_claim: bool,
}>,
},
},
zookeeper: struct {
#[validate(range(min = 1))]
replicas: u32,
storage: Volume,
},
entity_operator: struct {
topic_operator: Option<HashMap<String, JsonValue>>,
user_operator: Option<HashMap<String, JsonValue>>,
},
}
}
依赖关系
~305KB