use std::sync::LazyLock;
use crate::config::connect_string_parser::sanitize_network_name;
use crate::constants;
static DEFAULTS: LazyLock<Defaults> = LazyLock::new(|| {
let driver_name =
format!("{} : {}", constants::DRIVER_NAME, env!("CARGO_PKG_VERSION"));
let mut config_dir: Option<String> = None;
if let Ok(value) = std::env::var("TNS_ADMIN")
&& !value.is_empty()
{
config_dir = Some(value);
} else if let Ok(value) = std::env::var("ORACLE_HOME")
&& !value.is_empty()
{
let mut path = std::path::PathBuf::new();
path.push(value);
path.push("network");
path.push("admin");
config_dir = Some(path.to_string_lossy().into_owned());
}
let program = std::env::current_exe()
.map(|p| p.file_name().map(|s| s.to_string_lossy().into_owned()))
.unwrap_or(None)
.unwrap_or(String::from("unknown"));
let machine = whoami::hostname().unwrap_or(String::from("unknown"));
let osuser = whoami::username().unwrap_or(String::from("unknown"));
Defaults {
config_dir,
driver_name,
program: sanitize_network_name(&program),
machine: sanitize_network_name(&machine),
osuser: sanitize_network_name(&osuser),
}
});
struct Defaults {
config_dir: Option<String>,
driver_name: String,
program: String,
machine: String,
osuser: String,
}
pub(crate) fn default_config_dir() -> &'static Option<String> {
&DEFAULTS.config_dir
}
pub(crate) fn default_driver_name() -> &'static String {
&DEFAULTS.driver_name
}
pub(crate) fn default_machine() -> &'static String {
&DEFAULTS.machine
}
pub(crate) fn default_osuser() -> &'static String {
&DEFAULTS.osuser
}
pub(crate) fn default_program() -> &'static String {
&DEFAULTS.program
}