From a4ff4bca20f3503b33e64685d51be9493d3ea5e5 Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Sun, 5 Mar 2023 00:35:34 +0100
Subject: [PATCH] refactor main into lib, with function to set up rocket
---
crates/ezidam/src/lib.rs | 44 +++++++++++++++++++++++++++++++++++++++
crates/ezidam/src/main.rs | 40 +++++++----------------------------
2 files changed, 51 insertions(+), 33 deletions(-)
create mode 100644 crates/ezidam/src/lib.rs
diff --git a/crates/ezidam/src/lib.rs b/crates/ezidam/src/lib.rs
new file mode 100644
index 0000000..2ce7d16
--- /dev/null
+++ b/crates/ezidam/src/lib.rs
@@ -0,0 +1,44 @@
+use rocket::{Build, Rocket};
+
+mod database;
+mod error;
+mod file_from_bytes;
+mod page;
+mod response_timer;
+mod routes;
+mod shutdown;
+
+#[cfg(test)]
+mod tests;
+
+pub fn rocket_setup(rocket_builder: Rocket) -> Rocket {
+ use database::Database;
+ use error::catchers;
+ use response_timer::ResponseTimer;
+ use rocket::fs::{relative, FileServer};
+ use rocket_dyn_templates::Template;
+
+ // Response timer
+ let rocket_builder = ResponseTimer::rocket(rocket_builder);
+
+ // Database
+ let rocket_builder = Database::rocket(rocket_builder);
+
+ // Templates
+ let rocket_builder = rocket_builder.attach(Template::fairing());
+
+ // Static assets
+ let rocket_builder = rocket_builder.mount("/", FileServer::from(relative!("static")));
+
+ // Routes
+ let rocket_builder = routes::routes(rocket_builder);
+
+ // Errors
+ let rocket_builder = catchers::register(rocket_builder);
+
+ // Shutdown
+ let rocket_builder = shutdown::shutdown(rocket_builder);
+
+ #[allow(clippy::let_and_return)]
+ rocket_builder
+}
diff --git a/crates/ezidam/src/main.rs b/crates/ezidam/src/main.rs
index 7acc5dd..510f36d 100644
--- a/crates/ezidam/src/main.rs
+++ b/crates/ezidam/src/main.rs
@@ -1,40 +1,14 @@
-mod database;
-mod error;
-mod file_from_bytes;
-mod page;
-mod response_timer;
-mod routes;
-mod shutdown;
+use ezidam::rocket_setup;
+use rocket::{main, Error};
// see for using rocket with main function https://github.com/intellij-rust/intellij-rust/issues/5975#issuecomment-920620289
-#[rocket::main]
-async fn main() -> std::result::Result<(), rocket::Error> {
- // Build server
+#[main]
+async fn main() -> Result<(), Error> {
+ // Rocket with default settings
let rocket_builder = rocket::build();
- // Response timer
- let rocket_builder = response_timer::ResponseTimer::rocket(rocket_builder);
-
- // Database
- let rocket_builder = database::Database::rocket(rocket_builder);
-
- // Templates
- let rocket_builder = rocket_builder.attach(rocket_dyn_templates::Template::fairing());
-
- // Static assets
- let rocket_builder = rocket_builder.mount(
- "/",
- rocket::fs::FileServer::from(rocket::fs::relative!("static")),
- );
-
- // Routes
- let rocket_builder = routes::routes(rocket_builder);
-
- // Errors
- let rocket_builder = error::catchers::register(rocket_builder);
-
- // Shutdown
- let rocket_builder = shutdown::shutdown(rocket_builder);
+ // Setup server
+ let rocket_builder = rocket_setup(rocket_builder);
// Launch server
let _ = rocket_builder