diff --git a/crates/tauri/src/lib.rs b/crates/tauri/src/lib.rs index 446fd28..19ca565 100644 --- a/crates/tauri/src/lib.rs +++ b/crates/tauri/src/lib.rs @@ -2,40 +2,43 @@ use core::panic; use std::sync::Arc; use tauri::{path::BaseDirectory, Manager}; -use tokio::sync::Mutex; +use tokio::sync::{Mutex, MutexGuard}; use tower::{Service, ServiceExt}; -async fn process_tauri_request(request: tauri::http::Request<>, router: axum:Router ){ -let (parts, body) = request.into_parts(); -let body = axum::body::Body::from(body); +async fn process_tauri_request( + request: tauri::http::Request>, + mut router: MutexGuard<'_, axum::Router>, +) -> tauri::http::Response> { + let (parts, body) = request.into_parts(); + let body = axum::body::Body::from(body); -let request = axum::extract::Request::from_parts(parts, body); + let request = axum::extract::Request::from_parts(parts, body); -let response = match router.as_service().ready().await { - Ok(ready_service) => ready_service.call(request).await, - Err(_error) => panic!("Failed to get ready service"), -}; + let response = match router.as_service().ready().await { + Ok(ready_service) => ready_service.call(request).await, + Err(_error) => panic!("Failed to get ready service"), + }; -let response = match response { - Ok(response) => response, - Err(_error) => panic!("Problem getting response from request."), -}; + let response = match response { + Ok(response) => response, + Err(_error) => panic!("Problem getting response from request."), + }; -let (parts, body) = response.into_parts(); -let body = match axum::body::to_bytes(body, usize::MAX).await { - Ok(bytes) => bytes.to_vec(), - Err(_error) => panic!("Problem converting response body to bytes."), -}; + let (parts, body) = response.into_parts(); + let body = match axum::body::to_bytes(body, usize::MAX).await { + Ok(bytes) => bytes.to_vec(), + Err(_error) => panic!("Problem converting response body to bytes."), + }; -let response = tauri::http::Response::from_parts(parts, body); + let response = tauri::http::Response::from_parts(parts, body); + + response } #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() .setup(|app| { - // Create a router and adds it the the app state - let resource_path_buf = app .path() .resolve("assets", BaseDirectory::Resource) @@ -45,6 +48,8 @@ pub fn run() { clego::get_router(resource_path_buf.as_path()).clone(), )); + // Adds the router to the application state + // This makes it so we can retrieve it from any app instance (see bellow) app.manage(router); Ok(()) @@ -53,7 +58,10 @@ pub fn run() { let router = Arc::clone(&app.state::>>()); tauri::async_runtime::spawn(async move { - let mut router = router.lock().await; + let router = router.lock().await; + + let response = process_tauri_request(request, router).await; + responder.respond(response); }); })