use crate::get_executable_path::{ExecutablePath, get_executable_path};
use std::path::PathBuf;
pub type AppRootFolderPath = PathBuf;
pub fn get_app_root_folder_by_executable(executable: &ExecutablePath) -> AppRootFolderPath {
let mut main_folder_candidate: PathBuf = executable.parent().unwrap().into();
let build_folder_indicator = main_folder_candidate.join(".cargo-lock");
if build_folder_indicator.exists() {
while !main_folder_candidate.join("target").exists() {
main_folder_candidate = main_folder_candidate.parent().unwrap().into();
}
}
if !main_folder_candidate.exists() {
panic!(
"The main folder does not exist: {:?}",
main_folder_candidate
);
}
main_folder_candidate
}
pub fn get_app_root_folder() -> AppRootFolderPath {
get_app_root_folder_by_executable(&get_executable_path())
}