use std::path::{Path, PathBuf}; use xshell::{Shell, cmd}; pub(crate) fn list_rust_files(dir: &Path) -> Vec { let mut res = list_files(dir); res.retain(|it| { it.file_name().unwrap_or_default().to_str().unwrap_or_default().ends_with(".rs") }); res } pub(crate) fn list_files(dir: &Path) -> Vec { let mut res = Vec::new(); let mut work = vec![dir.to_path_buf()]; while let Some(dir) = work.pop() { for entry in dir.read_dir().unwrap() { let entry = entry.unwrap(); let file_type = entry.file_type().unwrap(); let path = entry.path(); let is_hidden = path.file_name().unwrap_or_default().to_str().unwrap_or_default().starts_with('.'); if !is_hidden { if file_type.is_dir() { work.push(path); } else if file_type.is_file() { res.push(path); } } } } res } pub(crate) fn detect_target(sh: &Shell) -> String { match std::env::var("RA_TARGET") { Ok(target) => target, _ => match cmd!(sh, "rustc --print=host-tuple").read() { Ok(target) => target, Err(e) => panic!("Failed to detect target: {e}\nPlease set RA_TARGET explicitly"), }, } }