use std::time::Duration; use actix_web::web::Data; use actix_web::{middleware, App, HttpServer}; use sea_orm::ConnectOptions; #[actix_web::main] async fn main() -> std::io::Result<()> { { use tracing_subscriber::prelude::*; use tracing_subscriber::{fmt, EnvFilter}; let fmt_layer = fmt::layer().with_target(false); let filter_layer = EnvFilter::try_from_default_env() .or_else(|_| EnvFilter::try_new("info")) .unwrap(); tracing_subscriber::registry() .with(filter_layer) .with(fmt_layer) .init(); } let mut db_opts = ConnectOptions::new("postgres://postgres@localhost/oswilno".to_string()); db_opts .max_connections(100) .min_connections(5) .connect_timeout(Duration::from_secs(8)) .idle_timeout(Duration::from_secs(8)) .sqlx_logging(true); let conn: sea_orm::DatabaseConnection = sea_orm::Database::connect(db_opts).await.unwrap(); let redis = { use redis_async_pool::{RedisConnectionManager, RedisPool}; RedisPool::new( RedisConnectionManager::new( redis::Client::open("redis://localhost:6379").expect("Fail to connect to redis"), true, None, ), 5, ) }; let mut l10n = oswilno_view::TranslationStorage::new(); let session_config = oswilno_session::SessionConfigurator::new(redis.clone()); session_config.translations(&mut l10n); HttpServer::new(move || { let session_config = session_config.clone(); let session_factory = session_config.factory(); App::new() .wrap(middleware::Logger::default()) .app_data(Data::new(session_factory.storage())) .wrap(session_factory) .app_data(Data::new(conn.clone())) .app_data(Data::new(redis.clone())) .app_data(Data::new(l10n.clone())) .configure(oswilno_parking_space::mount) .configure(oswilno_admin::mount) .configure(web_assets::configure) .configure(|c| session_config.app_data(c)) }) .bind(("0.0.0.0", 8080))? .run() .await }