use std::{path::PathBuf, sync::LazyLock}; pub enum CommonPath { Config, Data, DataLocal, DataLocalLow, Document, Home, Public, SavedGames, } impl CommonPath { pub fn get(&self) -> Option { static CONFIG: LazyLock> = LazyLock::new(|| dirs::config_dir()); static DATA: LazyLock> = LazyLock::new(|| dirs::data_dir()); static DATA_LOCAL: LazyLock> = LazyLock::new(|| dirs::data_local_dir()); static DOCUMENT: LazyLock> = LazyLock::new(|| dirs::document_dir()); static HOME: LazyLock> = LazyLock::new(|| dirs::home_dir()); static PUBLIC: LazyLock> = LazyLock::new(|| dirs::public_dir()); #[cfg(windows)] static DATA_LOCAL_LOW: LazyLock> = LazyLock::new(|| { known_folders::get_known_folder_path(known_folders::KnownFolder::LocalAppDataLow) }); #[cfg(not(windows))] static DATA_LOCAL_LOW: Option = None; #[cfg(windows)] static SAVED_GAMES: LazyLock> = LazyLock::new(|| { known_folders::get_known_folder_path(known_folders::KnownFolder::SavedGames) }); #[cfg(not(windows))] static SAVED_GAMES: Option = None; match self { Self::Config => CONFIG.clone(), Self::Data => DATA.clone(), Self::DataLocal => DATA_LOCAL.clone(), Self::DataLocalLow => DATA_LOCAL_LOW.clone(), Self::Document => DOCUMENT.clone(), Self::Home => HOME.clone(), Self::Public => PUBLIC.clone(), Self::SavedGames => SAVED_GAMES.clone(), } } }