diff options
author | Toby Vincent <tobyv13@gmail.com> | 2022-11-17 23:12:10 -0600 |
---|---|---|
committer | Toby Vincent <tobyv13@gmail.com> | 2022-11-17 23:12:10 -0600 |
commit | 09be0362d42034e343b64de08618c995b63c90fe (patch) | |
tree | 23f44d4e36cd767ea86f524db6016d64819eaf9b /src/finder | |
parent | 082d11db68efa63f6da1be29cc9dc95b8f9e1735 (diff) |
feat: get intitial finder working
Diffstat (limited to 'src/finder')
-rw-r--r-- | src/finder/config.rs | 53 | ||||
-rw-r--r-- | src/finder/error.rs | 12 |
2 files changed, 24 insertions, 41 deletions
diff --git a/src/finder/config.rs b/src/finder/config.rs index d0a0570..916637f 100644 --- a/src/finder/config.rs +++ b/src/finder/config.rs @@ -2,32 +2,37 @@ use figment::{providers::Serialized, value, Figment, Metadata, Profile, Provider use serde::{Deserialize, Serialize}; #[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +#[serde(default)] pub struct Config { pub program: String, pub args: Vec<String>, } impl Config { - pub fn from<T: Provider>(provider: T) -> figment::error::Result<Config> { + // Extract the configuration from any `Provider` + pub fn extract<T: Provider>(provider: T) -> figment::error::Result<Config> { Figment::from(provider).extract() } + + // Provide a default provider, a `Figment`. + pub fn figment() -> Figment { + Figment::from(Config::default()) + } } impl Default for Config { fn default() -> Self { Self { - program: "fzf-tmux".into(), - args: vec![ - "--", + program: "fzf".into(), + args: [ "--multi", "--print-query", "-d/", - "--preview-window='right,75%,<80(up,75%,border-bottom)'", + "--preview-window=right,75%,<80(up,75%,border-bottom)", "--preview='sel={}; less ${sel:-{q}} 2>/dev/null'", ] - .into_iter() .map(Into::into) - .collect(), + .to_vec(), } } } @@ -38,7 +43,7 @@ impl Provider for Config { } fn data(&self) -> figment::error::Result<value::Map<Profile, value::Dict>> { - Serialized::defaults(Config::default()).data() + Serialized::defaults(Self::default()).data() } } @@ -48,35 +53,7 @@ mod tests { use figment::providers::{Format, Serialized, Toml}; #[test] - fn defaults() { - figment::Jail::expect_with(|jail| { - jail.create_file( - "tmuxr.toml", - r#" - program = "fzf-tmux" - args = [ - "--", - "--multi", - "--print-query", - "-d/", - "--preview-window='right,75%,<80(up,75%,border-bottom)'", - "--preview='sel={}; less ${sel:-{q}} 2>/dev/null'", - ] - "#, - )?; - - let config: Config = Figment::from(Serialized::defaults(Config::default())) - .merge(Toml::file("tmuxr.toml")) - .extract()?; - - assert_eq!(config, Config::default()); - - Ok(()) - }); - } - - #[test] - fn custom() { + fn test_extract() { figment::Jail::expect_with(|jail| { jail.create_file( "tmuxr.toml", @@ -94,7 +71,7 @@ mod tests { config, Config { program: "fzf".into(), - args: vec!["-0".into(), "-1".into(), "--preview='cat'".into()], + args: ["-0", "-1", "--preview='cat'"].map(Into::into).to_vec(), } ); diff --git a/src/finder/error.rs b/src/finder/error.rs index 6ea5017..a8009a8 100644 --- a/src/finder/error.rs +++ b/src/finder/error.rs @@ -2,9 +2,15 @@ pub type Result<T> = std::result::Result<T, Error>; #[derive(thiserror::Error, Debug)] pub enum Error { - #[error("IO error: {0}")] - IO(#[from] std::io::Error), + #[error("Child process has not been spawned")] + NoChild, - #[error("Stdin error: Failed to get finder's stdin")] + #[error("Failed to get Child's stdin")] Stdin, + + #[error("Config error: {0}")] + Config(#[from] figment::error::Error), + + #[error("IO error: {0}")] + IO(#[from] std::io::Error), } |