diff options
Diffstat (limited to 'src/directories')
-rw-r--r-- | src/directories/config.rs | 26 | ||||
-rw-r--r-- | src/directories/error.rs | 17 |
2 files changed, 43 insertions, 0 deletions
diff --git a/src/directories/config.rs b/src/directories/config.rs new file mode 100644 index 0000000..ec66d0c --- /dev/null +++ b/src/directories/config.rs @@ -0,0 +1,26 @@ +use figment::{providers::Serialized, value, Figment, Metadata, Profile, Provider}; +use serde::{Deserialize, Serialize}; +use std::path::PathBuf; + +#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)] +pub struct Config { + pub(crate) search: Vec<PathBuf>, + pub(crate) add: Vec<PathBuf>, + pub(crate) hidden: bool, +} + +impl Config { + pub fn from<T: Provider>(provider: T) -> figment::error::Result<Config> { + Figment::from(provider).extract() + } +} + +impl Provider for Config { + fn metadata(&self) -> Metadata { + Metadata::named("Tmuxr directory config") + } + + fn data(&self) -> figment::error::Result<value::Map<Profile, value::Dict>> { + Serialized::defaults(Config::default()).data() + } +} diff --git a/src/directories/error.rs b/src/directories/error.rs new file mode 100644 index 0000000..4e77fc1 --- /dev/null +++ b/src/directories/error.rs @@ -0,0 +1,17 @@ +pub type Result<T> = std::result::Result<T, Error>; + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("Ignore error: {0:?}")] + Ignore(#[from] ignore::Error), + + #[error("Path error: {0:?}")] + Path(#[from] PathError), +} + +#[derive(thiserror::Error, Debug)] +pub enum PathError { + #[error("Path contains invalid unicode: {0:?}")] + Unicode(String), +} + |