diff --git a/src/main.rs b/src/main.rs index 8799e35..c20924c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,15 +2,11 @@ use actix_web::{App, HttpResponse, HttpServer, Responder, get, post, web, middle use actix_cors::Cors; use serde_json::json; use serde::Deserialize; -use std::sync::RwLock; +use std::sync::{Arc, RwLock}; mod api; use api::{APIClient, APIError, Format}; -struct AppState { - client: RwLock -} - #[derive(Deserialize)] struct DeezerTrackList { data: Vec @@ -34,7 +30,7 @@ struct RequestParams { } #[post("/get_url")] -async fn get_url(req: web::Json, data: web::Data) -> impl Responder { +async fn get_url(req: web::Json, state: web::Data>>) -> impl Responder { if req.formats.is_empty() { return HttpResponse::BadRequest().body("Format list cannot be empty"); } @@ -42,7 +38,7 @@ async fn get_url(req: web::Json, data: web::Data) -> im return HttpResponse::BadRequest().body("ID list cannot be empty"); } - let mut client = data.client.read().unwrap().clone(); + let mut client = state.read().unwrap().clone(); let old_license = client.license_token.clone(); let resp: Result = client.api_call("song.getListData", &json!({"sng_ids":req.ids,"array_default":["SNG_ID","TRACK_TOKEN"]})).await; @@ -66,7 +62,7 @@ async fn get_url(req: web::Json, data: web::Data) -> im }; if client.license_token != old_license { - let mut client_write = data.client.write().unwrap(); + let mut client_write = state.write().unwrap(); *client_write = client; } @@ -80,9 +76,12 @@ async fn main() -> std::io::Result<()> { let port = std::env::var("PORT").unwrap_or("8000".to_string()); let port: u16 = port.parse().unwrap_or(8000); - let client = web::Data::new(AppState { - client: RwLock::new(APIClient::new()), - }); + let bind_addr = format!("0.0.0.0:{}", port); + println!("Listening on {bind_addr}"); + + let client = web::Data::new( + Arc::new(RwLock::new(APIClient::new())) + ); env_logger::init(); @@ -101,7 +100,7 @@ async fn main() -> std::io::Result<()> { .service(index) .service(get_url) }) - .bind(format!("0.0.0.0:{}", port))? + .bind(bind_addr)? .run() .await } \ No newline at end of file