pub struct SearchDirectoriesForFileName<'a, TFileName> { /* private fields */ }
Expand description
A list of search directories that the config files will be searched under, scoped to a particular config file name.
Implementations§
Source§impl<'a, TFileName> SearchDirectoriesForFileName<'a, TFileName>
impl<'a, TFileName> SearchDirectoriesForFileName<'a, TFileName>
Sourcepub fn with_project<TProject>(
self,
project: TProject,
) -> SearchDirectoriesForProjectAndFileName<'a, TProject, TFileName>
pub fn with_project<TProject>( self, project: TProject, ) -> SearchDirectoriesForProjectAndFileName<'a, TProject, TFileName>
Search for configuration files for the given project name and with this config file name.
The project name is usually the name of your application.
Sourcepub fn find_files<TDropinSuffix>(
self,
dropin_suffix: Option<TDropinSuffix>,
) -> Result<Files>
pub fn find_files<TDropinSuffix>( self, dropin_suffix: Option<TDropinSuffix>, ) -> Result<Files>
Returns an Iterator
of (
PathBuf
,
File
)
s for all the files found in the specified search directories.
Only files named file_name
under the search directories will be considered.
If dropin_suffix
is provided, then directories named format!("{file_name}.d")
under the search directories are treated as dropin directories.
Only dropin files whose name ends with dropin_suffix
will be considered. Note that if you intend to use a file extension as a suffix,
then dropin_suffix
must include the .
, such as ".conf"
.
You will likely want to parse each file returned by this function according to whatever format they’re supposed to contain and merge them into a unified config object, with settings from later files overriding settings from earlier files. This function does not guarantee that the files are well-formed, only that they exist and could be opened for reading.
§Errors
Any errors from reading non-existing directories and non-existing files are ignored. Apart from that, any I/O errors from walking the directories and from opening the files found within are propagated.
§Examples
§Get all config files for the system service foobar
… taking into account OS vendor configs, ephemeral overrides and sysadmin overrides.
let files =
uapi_config::SearchDirectories::modern_system()
.with_file_name("foobar.conf")
.find_files(Some(".conf"))
.unwrap();
This will locate /usr/etc/foobar.conf
/run/foobar.conf
, /etc/foobar.conf
in that order and return the last one,
then all dropins /usr/etc/foobar.d/*.conf
, /run/foobar.d/*.conf
, /etc/foobar.d/*.conf
in lexicographical order.
§Get the config files for the “foo.service” systemd system unit like systemd would do
let search_directories: uapi_config::SearchDirectories =
// From `man systemd.unit`
[
"/run/systemd/generator.late",
"/usr/lib/systemd/system",
"/usr/local/lib/systemd/system",
"/run/systemd/generator",
"/run/systemd/system",
"/etc/systemd/system",
"/run/systemd/generator.early",
"/run/systemd/transient",
"/run/systemd/system.control",
"/etc/systemd/system.control",
].into_iter()
.map(|path| std::path::Path::new(path).into())
.collect();
let files =
search_directories
.with_file_name("foo.service")
.find_files(Some(".conf"))
.unwrap();
This will locate /run/systemd/generator.late/foobar.service
/usr/lib/systemd/system/foo.service
, … in that order and return the last one,
then all dropins /run/systemd/generator.late/foo.service.d/*.conf
, /usr/lib/systemd/system/foo.service.d/*.conf
, … in lexicographical order.
Trait Implementations§
Source§impl<'a, TFileName: Clone> Clone for SearchDirectoriesForFileName<'a, TFileName>
impl<'a, TFileName: Clone> Clone for SearchDirectoriesForFileName<'a, TFileName>
Source§fn clone(&self) -> SearchDirectoriesForFileName<'a, TFileName>
fn clone(&self) -> SearchDirectoriesForFileName<'a, TFileName>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more