DEPRECATED - MOVED TO https://crates.io/crates/descriptive_toml_derive
Description
Procedural derive macro for serializing a struct into a TOML template with field descriptions that is easily edited and deserialized.
Nested structs are not currently supported.
Purpose
Make it easy to write a struct that defines a TOML
template for optional configuration of an executable. Once the struct is deserialized with the derive macro implemented to_string_pretty_toml()
function, it can be written to a (TOML) file, the file should be understandable without knowing any details of the binary. Deserializing the produced TOML file with no edits produceses the original struct with all optional fields None
. Editing the produced TOML file will then deserialize into the original struct with those edited values.
Table of Contents
- DEPRECATED - MOVED TO https://crates.io/crates/descriptive_toml_derive
- Description
- Purpose
- Table of Contents
- Guide
Guide
What is derived?
A pub trait
named TomlConfig
with a single function with the signature: fn to_string_pretty_toml(&self) -> String
Example use in fastPASTA
This macro was originally made for use in the fastPASTA crate.
The example is based on how the macro is used in fastPASTA
.
Implementing
The struct CustomChecks
is implemented like this:
use TomlConfig;
use ;
// Deriving the `TomlConfig` macro which implements the `TomlConfig` trait.
Serializing
The template file is generated e.g. like this.
let toml = default.to_string_pretty_toml;
write.unwrap;
The contents of "custom_checks.toml" is now:
# Number of CRU Data Packets expected in the data
# Example: 20, 500532
#cdps = None [ u32 ] # (Uncomment and set to enable this check)
# Number of Physics (PhT) Triggers expected in the data
# Example: 0, 10
#triggers_pht = None [ u32 ] # (Uncomment and set to enable this check)
# Legal Chip ordering for Outer Barrel (ML/OL). Needs to be a list of two lists of 7 chip IDs
# Example: [[0, 1, 2, 3, 4, 5, 6], [8, 9, 10, 11, 12, 13, 14]]
#chip_orders_ob = None [ (Vec < u8 >, Vec < u8 >) ] # (Uncomment and set to enable this check)
Editing all the fields to contain Some
values could look like this:
# Number of CRU Data Packets expected in the data
# Example: 20, 500532
= 20
# Number of Physics (PhT) Triggers expected in the data
# Example: 0, 10
= 0
# Legal Chip ordering for Outer Barrel (ML/OL). Needs to be a list of two lists of 7 chip IDs
# Example: [[0, 1, 2, 3, 4, 5, 6], [8, 9, 10, 11, 12, 13, 14]]
= [[0, 1, 2, 3, 4, 5, 6], [8, 9, 10, 11, 12, 13, 14]]
Deserializing
Deserializing from a TOML file is the same method as with any other TOML file, using serde_derive
:
let toml = read_to_string.unwrap;
let custom_checks = from_str.unwrap;
A user that is already familiar with the configuration file might simply write
= 10
And input it to the binary. Which would deserialize into a struct with the cdps
field containing Some(10)
, and the rest of the fields are None
.