use actix_web::{App, HttpServer}; use dichroism::config; use dichroism::handlers; use dichroism::result::Result; use diesel::prelude::SqliteConnection; use diesel::r2d2::ConnectionManager; use diesel::r2d2::Pool; use listenfd::ListenFd; #[actix_web::main] async fn main() -> Result<()> { // Gather config. let config = config::Config::new_from_env().await?; let bind_addr = config.bind_addr; // Initialize DB connection pool. //let manager = ConnectionManager::::new(config.db_url); let manager = ConnectionManager::::new(&config.db_url); let pool = Pool::builder().build(manager)?; // Initialize application server. let mut server = HttpServer::new(move || { App::new() .data(config.clone()) .data(pool.clone()) .service(handlers::hello) .service(handlers::create_image) .service(handlers::get_products) }); let mut listenfd = ListenFd::from_env(); server = if let Some(l) = listenfd .take_tcp_listener(0) .expect("Unable to grab TCP listener!") { // If using listenfd, use it to allow for cargo watch auto-reloading. server.listen(l)? } else { // Bind to config for release. server.bind(bind_addr)? }; Ok(server.run().await?) }