use rust_embed::RustEmbed;
#[derive(RustEmbed)]
#[folder = "lib"]
pub struct Lib;
pub fn get_user_stdlib_path() -> std::path::PathBuf {
let mut path = dirs::config_dir().expect("config directory");
path.push("microcad");
path.push("lib");
path
}
pub fn extract(overwrite: bool) -> std::io::Result<()> {
let dst = get_user_stdlib_path();
if dst.exists() {
if overwrite {
println!("Overwriting existing µcad standard library in {:?}", dst);
} else {
println!(
"Found µcad standard library already in {:?} (use -f to force overwrite)",
dst
);
return Ok(());
}
}
println!("Installing µcad standard library into {:?}...", dst);
std::fs::create_dir_all(&dst)?;
Lib::iter().try_for_each(|file| {
let file_path = dst.join(file.as_ref());
if let Some(parent) = file_path.parent() {
std::fs::create_dir_all(parent)?;
}
std::fs::write(
file_path,
Lib::get(file.as_ref())
.expect("embedded folder 'lib' not found")
.data,
)
})?;
println!("Successfully installed µcad standard library.");
Ok(())
}