aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2023-01-11 12:12:24 -0600
committerToby Vincent <tobyv13@gmail.com>2023-01-11 14:03:38 -0600
commit14b367de207df7cb57bb54512b8963ef7d3221fa (patch)
treeba9d468808a3dd0c556b154a67ee66a81661d0bc /src/main.rs
parentbd59027acc1d17eff34b031e62b19c067fba64bf (diff)
feat: add async ctrl-c signal handling
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs14
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());