7个不稳定版本 (3个破坏性更改)
0.4.0 | 2019年10月8日 |
---|---|
0.3.0 | 2019年8月4日 |
0.2.0 | 2019年7月28日 |
0.1.3 | 2019年7月28日 |
#7 in #glitch
13KB
207 行
glitchup_derive
一组进程宏,用于辅助使用glitchup
。检查变更日志中的任何更新。
#[derive(MutConfig)]
此派生宏用于为任何兼容的结构体派生MutConfig
。为了使结构体兼容,必须满足以下条件
- 结构体的名称必须包含
Config
。 - 结构体的字段必须是以下类型
- 原语
isize
String
bool
- 泛型
Vec<{支持的类型(incl.泛型)}>
Option<{支持的类型(incl.泛型)}>
- 原语
选择这些特定原语是因为MutOptionVal
使用了这些值。
MutConfig
特质实现了一个to_hashmap
函数,其中结构体的字段被转换为用于Mutation
的HashMap<String, MutOptionVal>
。
#[derive(Debug, Deserialize, MutConfig)]
struct MainConfig {
mutation : MutationConfig,
mutations : Vec<Vec<String>> // works!
mapint : Vec<Vec<u8>> // fails!
}
#[derive(Debug, Deserialize, MutConfig)]
struct MutationConfig {
min : Option<isize>,
max : Option<isize>,
chunksize : isize,
}
在上面的MainConfig
中,mapint
将失败,因为它使用不兼容的类型u8
。但是,我们需要它才能让我们的应用程序工作。让我们假设没有Mutation
会使用它。因此,我们可以添加#[ignore]
属性
#[derive(Debug, Deserialize, MutConfig)]
struct MainConfig {
mutation : MutationConfig,
mutations : Vec<Vec<String>> // works!
#[ignore]
mapint : Vec<Vec<u8>> // all ok now!
}
...
被标记为#[ignore]
的任何字段将不会包含在to_hashmap(...)
中。
依赖项
~2MB
~45K SLoC