mod api; mod backend; mod error; mod websocket; use crate::command::service::CommandManagementService; use crate::http::api::setup_api; use crate::http::backend::setup_backend; use crate::http::websocket::setup_websocket; use crate::panels::PanelService; use crate::telemetry::management_service::TelemetryManagementService; use actix_web::middleware::Logger; use actix_web::{web, App, HttpServer}; use log::info; use std::sync::Arc; use tokio_util::sync::CancellationToken; pub async fn setup( cancellation_token: CancellationToken, telemetry_definitions: Arc, panel_service: PanelService, command_service: Arc, ) -> anyhow::Result<()> { let data = web::Data::new(telemetry_definitions); let cancel_token = web::Data::new(cancellation_token); let panel_service = web::Data::new(Arc::new(panel_service)); let command_service = web::Data::new(command_service); info!("Starting HTTP Server"); HttpServer::new(move || { App::new() .app_data(data.clone()) .app_data(cancel_token.clone()) .app_data(panel_service.clone()) .app_data(command_service.clone()) .service(web::scope("/backend").configure(setup_backend)) .service(web::scope("/ws").configure(setup_websocket)) .service(web::scope("/api").configure(setup_api)) .wrap(Logger::default()) }) .bind("localhost:8080")? .run() .await?; Ok(()) }