scratch-tech-explorations/build.rs
2023-03-24 14:17:53 -07:00

45 lines
1.5 KiB
Rust

use std::{path::Path, fs::{self, DirEntry}, io, ffi::OsStr};
fn main() {
copy_fonts();
}
fn copy_files<P: AsRef<Path>, Q: AsRef<Path>, R>(from_dir: P, to_dir: Q, predicate: R) -> io::Result<()>
where R: Fn(&DirEntry) -> bool
{
let dir_entries = fs::read_dir(from_dir.as_ref())?;
for dir_entry in dir_entries.flatten() {
let src_path = dir_entry.path();
if let Some(file_name) = src_path.file_name() {
if predicate(&dir_entry) {
let dest_path = Path::new(to_dir.as_ref()).join(file_name);
eprintln!("copy_files copying {0} to {1}", src_path.display(), dest_path.display());
fs::copy(src_path, dest_path)?;
}
}
}
Ok(())
}
fn copy_fonts() {
let font_extensions = vec![
OsStr::new("ttf"),
OsStr::new("otf"),
];
let src_path = Path::new("node_modules/scratch-render-fonts/src");
let dst_path = Path::new("assets/fonts");
println!("cargo:rerun-if-changed={:?}/*.ttf", src_path);
fs::create_dir_all(dst_path).expect("failed to create fonts directory");
copy_files(src_path, dst_path, |dir_entry| {
let src_path = dir_entry.path();
eprintln!("copy_fonts checking {0}", src_path.display());
if !src_path.is_file() {
return false;
}
match src_path.extension() {
Some(ext) => font_extensions.contains(&ext),
None => false
}
}).expect("failed to copy fonts");
}