use std::path::{Path, PathBuf};
pub fn board_file(configured: Option<&Path>, entry: &Path) -> Option<PathBuf> {
if let Some(path) = configured {
return Some(path.to_path_buf());
}
let dir = match entry.is_dir() {
true => entry,
false => entry.parent()?,
};
let dir = match dir.as_os_str().is_empty() {
true => Path::new("."),
false => dir,
};
only_board(dir).or_else(|| only_board(&dir.join("kicad")))
}
fn only_board(dir: &Path) -> Option<PathBuf> {
let mut boards = std::fs::read_dir(dir)
.ok()?
.flatten()
.map(|entry| entry.path())
.filter(|path| path.extension().is_some_and(|e| e == "kicad_pcb"));
let first = boards.next()?;
boards.next().is_none().then_some(first)
}