From d33140ebafba1bbdcb1797fd9ad689ea6a8ba493 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Wed, 24 Jul 2024 23:39:02 +0200 Subject: [PATCH] chore: Improve desktop/src/lib readability --- crates/desktop/src/lib.rs | 57 ++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/crates/desktop/src/lib.rs b/crates/desktop/src/lib.rs index e7da8af..3cadb71 100644 --- a/crates/desktop/src/lib.rs +++ b/crates/desktop/src/lib.rs @@ -2,18 +2,28 @@ use core::panic; use std::sync::Arc; use tauri::{path::BaseDirectory, Manager}; +use tauri::http::{ + Request as TauriRequest, + Response as TauriResponse, +}; +use axum::body::{ + Body as AxumBody, + to_bytes, +}; +use axum::extract::Request as AxumRequest; use tokio::sync::{Mutex, MutexGuard}; use tower::{Service, ServiceExt}; async fn process_tauri_request( - request: tauri::http::Request>, + request: TauriRequest>, mut router: MutexGuard<'_, axum::Router>, -) -> tauri::http::Response> { +) -> TauriResponse> { + // Convert the Tauri request to an Axum request let (parts, body) = request.into_parts(); - let body = axum::body::Body::from(body); - - let request = axum::extract::Request::from_parts(parts, body); + let body = AxumBody::from(body); + let request = AxumRequest::from_parts(parts, body); + // Process the request with the router let response = match router.as_service().ready().await { Ok(ready_service) => ready_service.call(request).await, Err(_error) => panic!("Failed to get ready service"), @@ -24,13 +34,14 @@ async fn process_tauri_request( Err(_error) => panic!("Problem getting response from request."), }; + // Convert the Axum response to a Tauri response let (parts, body) = response.into_parts(); - let body = match axum::body::to_bytes(body, usize::MAX).await { + let 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 = TauriResponse::from_parts(parts, body); response } @@ -39,32 +50,34 @@ async fn process_tauri_request( pub fn run() { tauri::Builder::default() .setup(|app| { - let resource_path_buf = app + let assets_path = app .path() .resolve("assets", BaseDirectory::Resource) .expect("Path should be resolvable"); - let router = Arc::new(Mutex::new( - app::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) + let router = Arc::new(Mutex::new( + app::get_router(assets_path.as_path()).clone(), + )); app.manage(router); Ok(()) }) - .register_asynchronous_uri_scheme_protocol("axum", move |app, request, responder| { - let router = Arc::clone(&app.state::>>()); + .register_asynchronous_uri_scheme_protocol( + "axum", + move |app, request, responder| { + // Retrieve the router from the application state and clone it for the async block + let router = Arc::clone(&app.state::>>()); - tauri::async_runtime::spawn(async move { - let router = router.lock().await; - - let response = process_tauri_request(request, router).await; - - responder.respond(response); - }); - }) + // Spawn a new async task to process the request + tauri::async_runtime::spawn(async move { + let router = router.lock().await; + let response = process_tauri_request(request, router).await; + responder.respond(response); + }); + } + ) .run(tauri::generate_context!()) .expect("error while running tauri application"); }