use std::path::PathBuf;
use serde::Serialize;
use serde::de::DeserializeOwned;
use super::super::{ArgsSource, ConfigLoader, EnvSource, FileSource, Layer, PendingCustomLayer};
impl<T> ConfigLoader<T>
where
T: Serialize + DeserializeOwned,
{
#[must_use]
pub fn file(mut self, path: impl Into<PathBuf>) -> Self {
self.files.push(FileSource::new(path));
self
}
#[must_use]
pub fn optional_file(mut self, path: impl Into<PathBuf>) -> Self {
self.files.push(FileSource::optional(path));
self
}
#[must_use]
pub fn with_file(mut self, file: FileSource) -> Self {
self.files.push(file);
self
}
#[must_use]
pub fn env(mut self, source: EnvSource) -> Self {
self.env_sources.push(source);
self
}
#[must_use]
pub fn args(mut self, source: ArgsSource) -> Self {
self.args_source = Some(source);
self
}
pub fn layer(mut self, layer: Layer) -> Self {
self.custom_layers
.push(PendingCustomLayer::Immediate(layer));
self
}
}