Extendable sources
Requires the
extendsCargo 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>,
}
}