From 12931fc0242f09ff34dd9f97a14507e2122c8bc3 Mon Sep 17 00:00:00 2001
From: Jiahao XU <Jiahao_XU@outlook.com>
Date: Wed, 8 Jun 2022 20:44:20 +1000
Subject: [PATCH] Refactor: Mv `AutoAbortJoinHandle` into `helpers`

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
---
 src/fetchers.rs | 22 +++++++---------------
 src/helpers.rs  |  9 +++++++++
 2 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/fetchers.rs b/src/fetchers.rs
index 2e7b6d02..69905c8a 100644
--- a/src/fetchers.rs
+++ b/src/fetchers.rs
@@ -4,9 +4,8 @@ use std::sync::Arc;
 pub use gh_crate_meta::*;
 pub use log::debug;
 pub use quickinstall::*;
-use tokio::task::JoinHandle;
 
-use crate::{BinstallError, PkgFmt, PkgMeta};
+use crate::{AutoAbortJoinHandle, BinstallError, PkgFmt, PkgMeta};
 
 mod gh_crate_meta;
 mod quickinstall;
@@ -62,10 +61,12 @@ impl MultiFetcher {
             .fetchers
             .iter()
             .cloned()
-            .map(|fetcher| (
-                fetcher.clone(),
-                AutoAbortJoinHandle(tokio::spawn(async move { fetcher.check().await })),
-            ))
+            .map(|fetcher| {
+                (
+                    fetcher.clone(),
+                    AutoAbortJoinHandle(tokio::spawn(async move { fetcher.check().await })),
+                )
+            })
             .collect();
 
         for (fetcher, mut handle) in handles {
@@ -92,12 +93,3 @@ impl MultiFetcher {
         None
     }
 }
-
-#[derive(Debug)]
-struct AutoAbortJoinHandle(JoinHandle<Result<bool, BinstallError>>);
-
-impl Drop for AutoAbortJoinHandle {
-    fn drop(&mut self) {
-        self.0.abort();
-    }
-}
diff --git a/src/helpers.rs b/src/helpers.rs
index ae7a432d..869bfedc 100644
--- a/src/helpers.rs
+++ b/src/helpers.rs
@@ -300,3 +300,12 @@ impl AsyncFileWriter {
         }
     }
 }
+
+#[derive(Debug)]
+pub struct AutoAbortJoinHandle<T>(pub task::JoinHandle<T>);
+
+impl<T> Drop for AutoAbortJoinHandle<T> {
+    fn drop(&mut self) {
+        self.0.abort();
+    }
+}