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

MPL-2.0 许可证

13KB
207

glitchup_derive

glitchup_derive glitchup_derive

一组进程宏,用于辅助使用glitchup。检查变更日志中的任何更新。

#[derive(MutConfig)]

此派生宏用于为任何兼容的结构体派生MutConfig。为了使结构体兼容,必须满足以下条件

  • 结构体的名称必须包含Config
  • 结构体的字段必须是以下类型
    • 原语
      • isize
      • String
      • bool
    • 泛型
      • Vec<{支持的类型(incl.泛型)}>
      • Option<{支持的类型(incl.泛型)}>

选择这些特定原语是因为MutOptionVal使用了这些值。

MutConfig特质实现了一个to_hashmap函数,其中结构体的字段被转换为用于MutationHashMap<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