diff --git a/crates/ezidam/src/error/conversion.rs b/crates/ezidam/src/error/conversion.rs new file mode 100644 index 0000000..97a6a13 --- /dev/null +++ b/crates/ezidam/src/error/conversion.rs @@ -0,0 +1,7 @@ +use super::Error; + +impl From for Error { + fn from(e: settings::Error) -> Error { + Error::internal_server_error(e) + } +} diff --git a/crates/ezidam/src/main.rs b/crates/ezidam/src/main.rs index 0b0ea11..d66890a 100644 --- a/crates/ezidam/src/main.rs +++ b/crates/ezidam/src/main.rs @@ -1,4 +1,8 @@ mod database; +mod error; +mod file_from_bytes; +mod response_timer; +mod routes; mod shutdown; // see for using rocket with main function https://github.com/intellij-rust/intellij-rust/issues/5975#issuecomment-920620289 @@ -13,6 +17,15 @@ async fn main() -> std::result::Result<(), rocket::Error> { // Database let rocket_builder = database::Database::rocket(rocket_builder); + // Templates + let rocket_builder = rocket_builder.attach(rocket_dyn_templates::Template::fairing()); + + // 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); diff --git a/crates/ezidam/src/routes/mod.rs b/crates/ezidam/src/routes/mod.rs new file mode 100644 index 0000000..0f677ef --- /dev/null +++ b/crates/ezidam/src/routes/mod.rs @@ -0,0 +1,17 @@ +use rocket::{Build, Rocket}; + +pub mod root; + +pub(self) mod prelude { + pub use crate::database::Database; + pub use crate::error::Error; + pub use crate::file_from_bytes::FileFromBytes; + pub use rocket_db_pools::Connection; + + pub type Result = std::result::Result; +} + +pub fn routes(rocket_builder: Rocket) -> Rocket { + // Root + rocket_builder.mount("/", root::routes()) +} diff --git a/crates/ezidam/src/routes/root.rs b/crates/ezidam/src/routes/root.rs new file mode 100644 index 0000000..4e48c7e --- /dev/null +++ b/crates/ezidam/src/routes/root.rs @@ -0,0 +1,16 @@ +use super::prelude::*; +use rocket::{get, routes}; +use settings::Settings; + +pub fn routes() -> Vec { + routes![logo] +} + +#[get("/logo")] +async fn logo(mut db: Connection) -> Result { + // Get settings + let settings = Settings::get(&mut *db).await?; + + // HTTP response + Ok(FileFromBytes::from(settings.business_logo())) +}