#![warn(missing_docs)]
#![doc(html_root_url = "https://docs.rs/confget/5.1.2")]
#![allow(clippy::pub_use)]
#[cfg(feature = "ini-regex")]
use crate::backend::ini_re::IniREBackend;
#[cfg(feature = "ini-nom")]
use crate::backend::ini_nom::IniNomBackend;
use crate::backend::{Backend, DataRead};
pub mod backend;
pub mod defs;
pub mod format;
#[cfg(test)]
pub mod tests;
pub use defs::{BackendKind, ConfgetError, Config, FileData, SectionData};
#[inline]
pub fn get_backend<'cfg>(
config: &'cfg Config,
) -> Result<Box<dyn Backend<'cfg> + 'cfg>, ConfgetError> {
match config.backend {
#[cfg(feature = "ini-regex")]
BackendKind::IniRE => Ok(Box::new(IniREBackend::from_config(config)?)),
#[cfg(feature = "ini-nom")]
BackendKind::IniNom => Ok(Box::new(IniNomBackend::from_config(config)?)),
}
}
#[inline]
pub fn read_ini_file(config: &Config) -> Result<DataRead, ConfgetError> {
#[cfg(feature = "ini-nom")]
if config.backend == BackendKind::IniNom {
let ini = IniNomBackend::from_config(config)?;
return ini.read_file();
}
#[cfg(feature = "ini-regex")]
if config.backend == BackendKind::IniRE {
let ini = IniREBackend::from_config(config)?;
return ini.read_file();
}
Err(ConfgetError::Config(format!(
"confget::read_ini_file() invoked for a non-INI-style backend {backend}",
backend = config.backend.as_ref()
)))
}
#[inline]
#[allow(clippy::must_use_candidate)]
pub fn features() -> Vec<(&'static str, &'static str)> {
let mut res = vec![
("BASE", env!("CARGO_PKG_VERSION")),
("REGEX", "1.0"),
("REGEX_IMPL_RUST_CRATE_REGEX", "1"),
("INI_BACKEND", BackendKind::get_preferred_ini_backend_name()),
];
#[cfg(feature = "ini-nom")]
{
res.push(("INI_NOM", "1.0"));
}
#[cfg(feature = "ini-regex")]
{
res.push(("INI_REGEX", "1.0"));
}
res
}