use std::fmt::Debug; use std::fs::File; use anyhow::anyhow; use serde::Deserialize; use xdg::BaseDirectories; use crate::ID; #[derive(Debug, Clone, Deserialize)] pub enum TopLevelFilter { ActiveWorkspace, ConfiguredOutput, } #[derive(Debug, Clone, Default, Deserialize)] pub struct AppListConfig { pub filter_top_levels: Option, } impl AppListConfig { /// load config with the provided name pub fn load() -> anyhow::Result { let file= match BaseDirectories::new().ok().and_then(|dirs| dirs.find_config_file(format!("{ID}/config.ron"))).and_then(|p| File::open(p).ok()) { Some(path) => path, _ => { anyhow::bail!("Failed to load config"); } }; ron::de::from_reader::<_, AppListConfig>(file).map_err(|err| anyhow!("Failed to parse config file: {}", err)) } }