support for layered config using a serde Deserializer as a source #7
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This allows a serde Deserializer, representing a config file, to be used as a value source, via the new
ConfSerde
extension trait.To use it you have to put the
#[conf(serde)]
tag on your struct.The priority order is args > env > serde > defaults.
You can use this with a config file in any serde supported format. Or the data can come from another source, such as a json Value that you loaded and modified, or a figment::Value for instance.
I am very happy that this approach avoids creating any specific dependency on code that opens a file or reads any particular format, and that the error reporting is still comprehensive in the way that I want. This is at least proof of concept for a way that I would be happy for this to work in
conf
.Still needs a lot more tests and documentation, and we don't really support any serde options right now, but we have a plan for that.