paiagram/rw_data/
write.rs

1#[cfg(not(target_arch = "wasm32"))]
2pub async fn write_file(data: Vec<u8>, filename: String) -> Result<(), std::io::Error> {
3    let file = rfd::AsyncFileDialog::new()
4        .set_file_name(&filename)
5        .save_file()
6        .await;
7    if let Some(file) = file {
8        file.write(&data).await?;
9        bevy::log::info!("File saved to {:?}", file.path());
10    }
11    Ok(())
12}
13
14#[cfg(target_arch = "wasm32")]
15use wasm_bindgen::prelude::wasm_bindgen;
16
17#[cfg(target_arch = "wasm32")]
18#[wasm_bindgen(inline_js = r#"
19export function download_text_file(data, filename) {
20    const blob = new Blob([data], { type: 'text/plain' });
21    const url = URL.createObjectURL(blob);
22    const a = document.createElement('a');
23    a.href = url;
24    a.download = filename;
25    a.click();
26    URL.revokeObjectURL(url);
27}
28"#)]
29extern "C" {
30    fn download_text_file(data: &[u8], filename: &str);
31}
32
33/// let the browser download a text file
34#[cfg(target_arch = "wasm32")]
35pub async fn write_file(data: Vec<u8>, filename: String) -> Result<(), String> {
36    download_text_file(&data, &filename);
37    Ok(())
38}