aboutsummaryrefslogtreecommitdiffstats
path: root/src/directories
diff options
context:
space:
mode:
Diffstat (limited to 'src/directories')
-rw-r--r--src/directories/config.rs26
-rw-r--r--src/directories/error.rs17
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),
+}
+