diff options
author | Toby Vincent <tobyv13@gmail.com> | 2023-01-11 12:12:24 -0600 |
---|---|---|
committer | Toby Vincent <tobyv13@gmail.com> | 2023-01-11 14:03:38 -0600 |
commit | 14b367de207df7cb57bb54512b8963ef7d3221fa (patch) | |
tree | ba9d468808a3dd0c556b154a67ee66a81661d0bc /src | |
parent | bd59027acc1d17eff34b031e62b19c067fba64bf (diff) |
feat: add async ctrl-c signal handling
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs index 35ae66d..8470651 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,9 +5,10 @@ use figment::{ Figment, }; use projectr::{project::ProjectItem, search::Search, Cli, Config}; +use tokio::signal; -#[tracing::instrument] -fn main() -> Result<()> { +#[tokio::main] +async fn main() -> Result<()> { let cli = Cli::parse(); let config: Config = Figment::new() @@ -23,11 +24,16 @@ fn main() -> Result<()> { .with_max_level(cli.verbosity) .init(); - run(&config).context("Failed to run projectr") + let res = tokio::select! { + res = signal::ctrl_c() => res.map_err(Into::into), + res = run(&config) => res.context("Failed to run projectr"), + }; + + res } #[tracing::instrument] -pub fn run(config: &Config) -> Result<()> { +pub async fn run(config: &Config) -> Result<()> { let mut projects: Vec<ProjectItem> = Search::from(config.paths.to_owned()).collect(); projects.sort_unstable_by_key(|p| *p.timestamp()); |