7 unstable releases (3 breaking)
0.4.0 | Oct 8, 2019 |
---|---|
0.3.0 | Aug 4, 2019 |
0.2.0 | Jul 28, 2019 |
0.1.3 | Jul 28, 2019 |
#8 in #glitch
13KB
207 lines
glitchup_derive
A group of procedural macros to assist in the use of glitchup
. Check any updates on the changelog.
#[derive(MutConfig)]
This derivation macro is used to derive MutConfig
for any compatible struct. For a struct to be compatible, the following must apply:
- The name of the struct must contain
Config
. - The fields of the struct must be of the following types:
- Primitives
isize
String
bool
- Generics
Vec<{Supported Type (incl. Generic)}>
Option<{Supported Type (incl. Generic)}>
- Primitives
These specific primitives were selected due to the MutOptionVal
using said values.
The MutConfig
trait implements a to_hashmap
function, where the fields of the struct are converted into a HashMap<String, MutOptionVal>
to be used by a Mutation
.
#[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,
}
In MainConfig
above, mapint
would fail, since it uses the incompatible type u8
. However, we need it in order for our application to work. Let's assume that no Mutation
will use it. Therefore, what we can do is add the #[ignore]
attribute:
#[derive(Debug, Deserialize, MutConfig)]
struct MainConfig {
mutation : MutationConfig,
mutations : Vec<Vec<String>> // works!
#[ignore]
mapint : Vec<Vec<u8>> // all ok now!
}
...
Any field tagged with #[ignore]
will not be included in to_hashmap(...)
.
Dependencies
~2MB
~48K SLoC