use actix_files as fs; use actix_web::{web, middleware, App, HttpServer}; use chrono::prelude::*; use clap::Parser; use log::error; use data::db; mod consts; mod utils; mod data; mod hash; mod model; mod user; mod email; mod config; mod services; #[actix_web::main] async fn main() -> std::io::Result<()> { if process_args() { return Ok(()) } std::env::set_var("RUST_LOG", "info,actix_web=info"); env_logger::init(); println!("Starting Recipes as web server..."); let config = web::Data::new(config::load()); let port = config.as_ref().port; println!("Configuration: {:?}", config); let db_connection = web::Data::new(db::Connection::new().unwrap()); let server = HttpServer::new(move || { App::new() .wrap(middleware::Logger::default()) .wrap(middleware::Compress::default()) .app_data(db_connection.clone()) .app_data(config.clone()) .service(services::home_page) .service(services::sign_up_get) .service(services::sign_up_post) .service(services::sign_up_check_email) .service(services::sign_up_validation) .service(services::sign_in_get) .service(services::sign_in_post) .service(services::sign_out) .service(services::view_recipe) .service(fs::Files::new("/static", "static")) .default_service(web::to(services::not_found)) }); //.workers(1); server.bind(&format!("0.0.0.0:{}", port))?.run().await } #[derive(Parser, Debug)] struct Args { #[arg(long)] dbtest: bool } fn process_args() -> bool { let args = Args::parse(); if args.dbtest { match db::Connection::new() { Ok(con) => { if let Err(error) = con.execute_file("sql/data_test.sql") { eprintln!("{}", error); } // Set the creation datetime to 'now'. con.execute_sql("UPDATE [User] SET [creation_datetime] = ?1 WHERE [email] = 'paul@test.org'", [Utc::now()]).unwrap(); }, Err(error) => { eprintln!("{}", error); }, } return true; } false }