#[cfg(target_arch = "wasm32")]
pub use crate::web::{DirectoryHandle, FileHandle, WritableFileStream};
#[cfg(not(target_arch = "wasm32"))]
pub use crate::native::{DirectoryHandle, FileHandle, WritableFileStream};
pub type Error = <DirectoryHandle as crate::DirectoryHandle>::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[cfg(target_arch = "wasm32")]
pub async fn app_specific_dir() -> Result<DirectoryHandle> {
use wasm_bindgen_futures::JsFuture;
use web_sys::FileSystemDirectoryHandle;
let window = web_sys::window().ok_or("No window object")?;
let navigator = window.navigator();
let root_directory_handle =
FileSystemDirectoryHandle::from(JsFuture::from(navigator.storage().get_directory()).await?);
Ok(DirectoryHandle::from(root_directory_handle))
}
#[cfg(not(target_arch = "wasm32"))]
pub async fn app_specific_dir() -> Result<DirectoryHandle> {
let data_dir = dirs::data_dir().ok_or_else(|| {
std::io::Error::new(
std::io::ErrorKind::NotFound,
"Could not find user data directory",
)
})?;
std::fs::create_dir_all(&data_dir)?;
Ok(DirectoryHandle::from(data_dir))
}