Extendable sources
Requires the
extends
Cargo feature, which is enabled by default.
Not supported for enums.
Configs can extend other configs, generating an accurate layer chain, via the #[setting(extend)]
attribute field. Extended configs can either be a file path (relative from the current config) or a
secure URL.
When defining extend
, we currently support 3 types of patterns. We also suggest making the setting
optional, so that extending is not required by consumers!
Single source
The first pattern is with a single string, which only allows a single file or URL to be extended.
#![allow(unused)] fn main() { #[derive(Config)] struct AppConfig { #[setting(extend, validate = schematic::validate::extends_string)] pub extends: Option<String>, } }
Example:
extends: "./another/file.yml"
Multiple sources
The second pattern is with a list of strings, allowing multiple files or URLs to be extended. Each item in the list is merged from top to bottom (lowest precedence to highest).
#![allow(unused)] fn main() { #[derive(Config)] struct AppConfig { #[setting(extend, validate = schematic::validate::extends_list)] pub extends: Option<Vec<String>>, } }
Example:
extends:
- "./another/file.yml"
- "https://domain.com/some/other/file.yml"
Either pattern
And lastly, supporting both a string or a list, using our built-in enum.
#![allow(unused)] fn main() { #[derive(Config)] struct AppConfig { #[setting(extend, validate = schematic::validate::extends_from)] pub extends: Option<schematic::ExtendsFrom>, } }