pub mod jab;
mod utils;
use std::{path::PathBuf, sync::OnceLock};
static CUSTOM_SEARCH_DIRECTORY: OnceLock<PathBuf> = OnceLock::new();
static LIBRARY_DIRECTORY: OnceLock<PathBuf> = OnceLock::new();
#[cfg(all(target_arch = "x86"))]
const JAB_LIB_NAME: &str = "WindowsAccessBridge-32.dll";
#[cfg(all(target_arch = "x86_64"))]
const JAB_LIB_NAME: &str = "WindowsAccessBridge-64.dll";
pub fn set_custom_search_directory(directory: PathBuf) {
if CUSTOM_SEARCH_DIRECTORY.set(directory).is_err() {
eprintln!("Custom search directory is already set and cannot be changed.");
}
}
fn get_search_directory() -> PathBuf {
if let Some(custom_dir) = CUSTOM_SEARCH_DIRECTORY.get() {
custom_dir.clone()
} else {
PathBuf::from("C:\\Program Files\\Java\\jre1.8.0_*\\bin")
}
}
fn find_library_path(lib_name: &str) -> Option<PathBuf> {
let dir = get_search_directory();
let path = dir.join(lib_name);
if path.exists() { Some(path) } else { None }
}
pub fn setup_for() -> Result<(), String> {
if let Some(path) = find_library_path(JAB_LIB_NAME) {
LIBRARY_DIRECTORY
.set(path.parent().unwrap().to_path_buf())
.map_err(|_| "Не удалось установить путь к библиотеке".to_string())?;
println!(
"Библиотека установлена: {}",
LIBRARY_DIRECTORY.get().unwrap().display()
);
Ok(())
} else {
Err(format!(
"Не удалось найти библиотеку `{}` в указанной директории",
JAB_LIB_NAME
))
}
}