use anyhow::{Result, anyhow};
use endbasic_repl::demos::DemoDriveFactory;
use endbasic_std::storage::{DirectoryDriveFactory, Storage};
use std::io;
pub(crate) fn get_local_drive_spec(flag: Option<String>) -> Result<String> {
let dir = flag.or_else(|| {
dirs::document_dir().map(|d| format!("file://{}", d.join("endbasic").display())).or_else(
|| {
dirs::home_dir()
.map(|h| format!("file://{}", h.join("Documents/endbasic").display()))
},
)
});
match dir {
Some(dir) => Ok(dir),
None => Err(anyhow!("Cannot compute default path to the Documents folder")),
}
}
pub(crate) fn setup_storage(storage: &mut Storage, local_drive_spec: &str) -> io::Result<()> {
storage.register_scheme("demos", Box::from(DemoDriveFactory::default()));
storage.mount("demos", "demos://").expect("Demos drive shouldn't fail to mount");
storage.register_scheme("file", Box::from(DirectoryDriveFactory::default()));
storage.mount("local", local_drive_spec)?;
storage.cd("local:").expect("Local drive was just registered");
Ok(())
}