From a676de8a96145c7dd7317e6dd4a6b273f10ab6ec Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <win10@list.ru>
Date: Fri, 11 Mar 2022 00:08:21 +0400
Subject: [PATCH] Runtime switched to tokio. (#56)

Signed-off-by: Pavel Kirilin <win10@list.ru>
---
 Cargo.lock                             | 13 ++++++++++++-
 Cargo.toml                             |  4 ++--
 src/info_storages/file_info_storage.rs |  6 +++---
 src/info_storages/models/file_info.rs  |  4 ++--
 src/main.rs                            |  2 +-
 src/protocol/core/write_bytes.rs       |  2 +-
 src/protocol/creation/routes.rs        |  2 +-
 src/protocol/termination/routes.rs     |  2 +-
 src/storages/file_storage.rs           |  8 ++++----
 9 files changed, 27 insertions(+), 16 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 20aee94..20fccd0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2762,7 +2762,6 @@ version = "0.5.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b555e70fbbf84e269ec3858b7a6515bcfe7a166a7cc9c636dd6efd20431678b6"
 dependencies = [
- "actix-rt",
  "once_cell",
  "tokio",
  "tokio-rustls",
@@ -3087,6 +3086,7 @@ dependencies = [
  "pin-project-lite",
  "signal-hook-registry",
  "socket2",
+ "tokio-macros",
  "winapi",
 ]
 
@@ -3101,6 +3101,17 @@ dependencies = [
  "tokio",
 ]
 
+[[package]]
+name = "tokio-macros"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
 [[package]]
 name = "tokio-native-tls"
 version = "0.3.0"
diff --git a/Cargo.toml b/Cargo.toml
index e70ca65..84bffee 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -62,7 +62,7 @@ version = "^0.7.0"
 
 [dependencies.rbatis]
 default-features = false
-features = ["runtime-actix-rustls", "all-database"]
+features = ["runtime-tokio-rustls", "all-database"]
 optional = true
 version = "^3.0"
 
@@ -83,7 +83,7 @@ features = ["derive"]
 version = "0.23"
 
 [dependencies.tokio]
-features = ["time", "process", "fs", "io-std", "io-util", "rt-multi-thread", "bytes"]
+features = ["time", "process", "fs", "io-std", "io-util", "rt-multi-thread", "bytes", "rt", "macros"]
 version = "1.4.0"
 
 [dependencies.tokio-amqp]
diff --git a/src/info_storages/file_info_storage.rs b/src/info_storages/file_info_storage.rs
index a2cdf35..461ca73 100644
--- a/src/info_storages/file_info_storage.rs
+++ b/src/info_storages/file_info_storage.rs
@@ -45,7 +45,7 @@ impl InfoStorage for FileInfoStorage {
     async fn set_info(&self, file_info: &FileInfo, create: bool) -> RustusResult<()> {
         let info = file_info.clone();
         let path = self.info_file_path(info.id.as_str());
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             let file = OpenOptions::new()
                 .write(true)
                 .create(create)
@@ -68,7 +68,7 @@ impl InfoStorage for FileInfoStorage {
 
     async fn get_info(&self, file_id: &str) -> RustusResult<FileInfo> {
         let info_path = self.info_file_path(file_id);
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             if !info_path.exists() {
                 return Err(RustusError::FileNotFound);
             }
@@ -84,7 +84,7 @@ impl InfoStorage for FileInfoStorage {
     async fn remove_info(&self, file_id: &str) -> RustusResult<()> {
         let id = String::from(file_id);
         let info_path = self.info_file_path(id.as_str());
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             if !info_path.exists() {
                 return Err(RustusError::FileNotFound);
             }
diff --git a/src/info_storages/models/file_info.rs b/src/info_storages/models/file_info.rs
index 42089ab..e1dbc45 100644
--- a/src/info_storages/models/file_info.rs
+++ b/src/info_storages/models/file_info.rs
@@ -91,7 +91,7 @@ impl FileInfo {
 
     pub async fn json(&self) -> RustusResult<String> {
         let info_clone = self.clone();
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             serde_json::to_string(&info_clone).map_err(RustusError::from)
         })
         .await
@@ -102,7 +102,7 @@ impl FileInfo {
     }
 
     pub async fn from_json(data: String) -> RustusResult<Self> {
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             serde_json::from_str::<Self>(data.as_str()).map_err(RustusError::from)
         })
         .await
diff --git a/src/main.rs b/src/main.rs
index 400db9f..16713c6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -135,7 +135,7 @@ fn setup_logging(app_config: &RustusConf) -> RustusResult<()> {
 
 /// Main program entrypoint.
 #[cfg_attr(coverage, no_coverage)]
-#[actix_web::main]
+#[tokio::main]
 async fn main() -> std::io::Result<()> {
     let app_conf = RustusConf::from_args();
     // Configuring logging.
diff --git a/src/protocol/core/write_bytes.rs b/src/protocol/core/write_bytes.rs
index 93cf900..49418ab 100644
--- a/src/protocol/core/write_bytes.rs
+++ b/src/protocol/core/write_bytes.rs
@@ -105,7 +105,7 @@ pub async fn write_bytes(
             .hooks_format
             .format(&request, &file_info)?;
         let headers = request.headers().clone();
-        actix_web::rt::spawn(async move {
+        tokio::task::spawn_local(async move {
             state
                 .notification_manager
                 .send_message(message, hook, &headers)
diff --git a/src/protocol/creation/routes.rs b/src/protocol/creation/routes.rs
index c11fe66..86c8b34 100644
--- a/src/protocol/creation/routes.rs
+++ b/src/protocol/creation/routes.rs
@@ -200,7 +200,7 @@ pub async fn create_file(
         let headers = request.headers().clone();
         // Adding send_message task to tokio reactor.
         // Thin function would be executed in background.
-        actix_web::rt::spawn(async move {
+        tokio::task::spawn_local(async move {
             state
                 .notification_manager
                 .send_message(message, Hook::PostCreate, &headers)
diff --git a/src/protocol/termination/routes.rs b/src/protocol/termination/routes.rs
index 8da92a2..31a5df3 100644
--- a/src/protocol/termination/routes.rs
+++ b/src/protocol/termination/routes.rs
@@ -29,7 +29,7 @@ pub async fn terminate(
                 .hooks_format
                 .format(&request, &file_info)?;
             let headers = request.headers().clone();
-            actix_web::rt::spawn(async move {
+            tokio::task::spawn_local(async move {
                 state
                     .notification_manager
                     .send_message(message, Hook::PostTerminate, &headers)
diff --git a/src/storages/file_storage.rs b/src/storages/file_storage.rs
index 537378f..86bf09d 100644
--- a/src/storages/file_storage.rs
+++ b/src/storages/file_storage.rs
@@ -89,7 +89,7 @@ impl Storage for FileStorage {
         }
         let path = String::from(file_info.path.as_ref().unwrap());
         let force_sync = self.force_fsync;
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             // Opening file in w+a mode.
             // It means that we're going to append some
             // bytes to the end of a file.
@@ -121,7 +121,7 @@ impl Storage for FileStorage {
         let info = file_info.clone();
         // New path to file.
         let file_path = self.data_file_path(info.id.as_str())?;
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             // Creating new file.
             OpenOptions::new()
                 .create(true)
@@ -144,7 +144,7 @@ impl Storage for FileStorage {
         parts_info: Vec<FileInfo>,
     ) -> RustusResult<()> {
         let info = file_info.clone();
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             let mut file = OpenOptions::new()
                 .write(true)
                 .append(true)
@@ -172,7 +172,7 @@ impl Storage for FileStorage {
 
     async fn remove_file(&self, file_info: &FileInfo) -> RustusResult<()> {
         let info = file_info.clone();
-        actix_web::rt::task::spawn_blocking(move || {
+        tokio::task::spawn_blocking(move || {
             // Let's remove the file itself.
             let data_path = PathBuf::from(info.path.as_ref().unwrap().clone());
             if !data_path.exists() {
-- 
GitLab