1use std::path::PathBuf;
2use std::sync::OnceLock;
3
4pub fn ensure_data_dir(prefix: &str) -> PathBuf {
5 static DATA_DIR: OnceLock<PathBuf> = OnceLock::new();
6
7 std::env::set_var("KOI_NO_CREDENTIAL_STORE", "1");
10
11 DATA_DIR
12 .get_or_init(|| {
13 let mut base = if let Ok(existing) = std::env::var("KOI_DATA_DIR") {
14 PathBuf::from(existing)
15 } else {
16 let base = std::env::temp_dir().join(format!("{}-{}", prefix, std::process::id()));
17 std::env::set_var("KOI_DATA_DIR", &base);
18 base
19 };
20
21 if std::fs::create_dir_all(&base).is_err() {
22 base = std::env::temp_dir().join(format!("{}-{}", prefix, std::process::id()));
23 std::env::set_var("KOI_DATA_DIR", &base);
24 let _ = std::fs::create_dir_all(&base);
25 }
26
27 base
28 })
29 .clone()
30}