mod pem;
mod types;
mod validate;
pub use pem::convert_cert_paths;
pub use types::*;
pub use validate::{ValidatedConfigs, create_server_configs};
pub async fn load_configs(args: &Vec<String>) -> std::io::Result<Vec<Config>> {
let mut all_configs = vec![];
for config_filename in args {
let config_bytes = match tokio::fs::read(config_filename).await {
Ok(b) => b,
Err(e) => {
return Err(std::io::Error::new(
std::io::ErrorKind::InvalidInput,
format!("Could not read config file {config_filename}: {e}"),
));
}
};
let config_str = match String::from_utf8(config_bytes) {
Ok(s) => s,
Err(e) => {
return Err(std::io::Error::new(
std::io::ErrorKind::InvalidInput,
format!("Could not parse config file {config_filename} as UTF8: {e}"),
));
}
};
let mut configs = match serde_yaml::from_str::<Vec<Config>>(&config_str) {
Ok(c) => c,
Err(e) => {
return Err(std::io::Error::new(
std::io::ErrorKind::InvalidInput,
format!("Could not parse config file {config_filename} as config YAML: {e}"),
));
}
};
all_configs.append(&mut configs)
}
Ok(all_configs)
}
#[cfg(any(target_os = "android", target_os = "ios", feature = "ffi"))]
#[cfg_attr(
all(feature = "ffi", not(any(target_os = "android", target_os = "ios"))),
allow(dead_code)
)]
pub fn load_config_str(config_str: &str) -> std::io::Result<Vec<Config>> {
serde_yaml::from_str::<Vec<Config>>(config_str).map_err(|e| {
std::io::Error::new(
std::io::ErrorKind::InvalidInput,
format!("Could not parse config string as config YAML: {e}"),
)
})
}