Skip to main content

rs_cinic_10_index/
lib.rs

1pub mod images;
2pub mod index;
3
4pub use index::Cinic10Index;
5
6use std::env;
7use std::path::PathBuf;
8use std::sync::RwLock;
9
10static STATIC_DEFAULT_PATH: RwLock<Option<PathBuf>> = RwLock::new(None);
11pub const CINC10_PATH_ENV_VAR: &str = "CINIC10_PATH";
12
13/// Get the default path for CINIC-10 data.
14///
15/// Returns either the last call to `set_default_path()`;
16/// or the value of the `CINIC10_PATH` env var,
17/// or `None`.
18pub fn get_default_data_path() -> Option<PathBuf> {
19    let path = STATIC_DEFAULT_PATH.read().unwrap().clone();
20    if path.is_some() {
21        return path;
22    }
23
24    match env::var(CINC10_PATH_ENV_VAR) {
25        Ok(path) => Some(PathBuf::from(path)),
26        Err(_) => None,
27    }
28}
29
30pub fn default_data_path_or_panic() -> PathBuf {
31    get_default_data_path().unwrap_or_else(|| {
32        panic!(
33            "CINIC-10 data path not set. \
34            Set the {CINC10_PATH_ENV_VAR} environment variable or call set_default_data_path()"
35        )
36    })
37}
38
39/// Set the value of `get_default_path()` in future calls.
40pub fn set_default_data_path(path: Option<PathBuf>) {
41    *STATIC_DEFAULT_PATH.write().unwrap() = path;
42}