figa

Crates.iofiga
lib.rsfiga
version0.3.0
sourcesrc
created_at2023-09-26 17:51:13.238065
updated_at2023-10-02 13:23:18.705407
descriptionA layered configuration library for Rust
homepage
repositoryhttps://github.com/zakarumych/figa
max_upload_size
id983930
size43,526
development (github:dabbotorg:development)

documentation

https://docs.rs/figa

README

Figa - layered configuration library.

Augments serde deserialization with customizeable updating mechanism.

Usage

This crate provides Figa trait to update values using serde deserialization. The trait uses single method update.
The magic happens in derive macro. Enable "derive" feature to make it re-exported from figa crate, or use figa-proc crate directly.
Derive macro currently supports only structs without generics. User may customize update behavior for struct fields using #[figa(*)] attribute:

  • #[figa(replace)] tells the codegen that field's value must be replaced with the new one.
  • #[figa(append)] works for collections and tells the codegen that this field is a collection and new elements must be added. In case of maps, if value with the same key was present it will be replaced with new one. For Vec and String appended values are added to the end as expected.
  • #[figa(update)] tells the codegen that field must be updated. This means that Figa::update will be called on for it recursively. For collections this means that values with same keys or indices are updated using Figa trait and new values are appended.

Optional load feature

provides opinionated way to load configuration from .toml files in predefined set of locations.

License

Licensed under either of

at your option.

Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 8

cargo fmt