tenho seguinte código rust

pub async fn start_downloads(app_handle: AppHandle) -> Result<(), String> {
    let exe_dir = get_exe_dir();
    let patch_file_path = exe_dir.join("patch.json");
    let download_dir = exe_dir.join("patchs");

    if !download_dir.exists() {
        tokio_fs::create_dir_all(&download_dir).await.map_err(|e| e.to_string())?;
    }

    let patches = read_patch_file(&patch_file_path).await.map_err(|e| e.to_string())?;
    let client = Client::new();
    let total_files = patches.len();

    app_handle.emit("download_message", DownloadMessage {
        message: "Conectando ao servidor...".to_string(),
    }).map_err(|e| e.to_string())?;

    let server_url = "https://hil-speed.hetzner.com/";
    if let Err(err) = check_server_connection(&client, server_url).await {
        app_handle.emit("download_message", DownloadMessage {
            message: format!("Erro ao conectar ao servidor: {}", err),
        }).map_err(|e| e.to_string())?;
        return Err(format!("Erro ao conectar ao servidor: {}", err));
    }

    app_handle.emit("download_message", DownloadMessage {
        message: "Conexão estabelecida com sucesso. Iniciando download...".to_string(),
    }).map_err(|e| e.to_string())?;

    
    tokio::spawn(async move {
        // Executando downloads sequencialmente
        for (current_file, entry) in patches.into_iter().enumerate() {
            let current_file = current_file + 1;
            if let Err(err) = download_file(&app_handle_clone, &client_clone, entry, &download_dir_clone, current_file, total_files).await {
                app_handle_clone.emit("download_message", DownloadMessage {
                    message: format!("Erro ao baixar arquivo: {}", err),
                }).map_err(|_| ()).unwrap();
            }
        }

        app_handle_clone.emit("download_message", DownloadMessage {
            message: "Todos os downloads foram concluídos.".to_string(),
        }).map_err(|_| ()).unwrap();
    });

    Ok(())
}

recebo erro

error[E0425]: cannot find value `app_handle_clone` in this scope
   --> src\download.rs:137:46
    |
137 |             if let Err(err) = download_file(&app_handle_clone, &client_clone, entry, &download_dir_clone, current_file, total_files).await {
    |                                              ^^^^^^^^^^^^^^^^ not found in this scope

error[E0425]: cannot find value `client_clone` in this scope
   --> src\download.rs:137:65
    |
137 |             if let Err(err) = download_file(&app_handle_clone, &client_clone, entry, &download_dir_clone, current_file, total_files).await {
    |                                                                 ^^^^^^^^^^^^ not found in this scope

error[E0425]: cannot find value `download_dir_clone` in this scope
   --> src\download.rs:137:87
    |
137 |             if let Err(err) = download_file(&app_handle_clone, &client_clone, entry, &download_dir_clone, current_file, total_files).await {
    |                                                                                       ^^^^^^^^^^^^^^^^^^ help: a local variable with a similar name exists: `download_dir`

error[E0425]: cannot find value `app_handle_clone` in this scope
   --> src\download.rs:138:17
    |
138 |                 app_handle_clone.emit("download_message", DownloadMessage {
    |                 ^^^^^^^^^^^^^^^^ not found in this scope

error[E0425]: cannot find value `app_handle_clone` in this scope
   --> src\download.rs:144:9
    |
144 |         app_handle_clone.emit("download_message", DownloadMessage {
    |         ^^^^^^^^^^^^^^^^ not found in this scope

warning: unused import: `tokio::task`
   --> src\download.rs:101:5
    |
101 | use tokio::task;
    |     ^^^^^^^^^^^
    |
    = note: `#[warn(unused_imports)]` on by default

For more information about this error, try `rustc --explain E0425`.
warning: `RagnaTales` (lib) generated 1 warning
error: could not compile `RagnaTales` (lib) due to 5 previous errors; 1 warning emitted