in focus/internals/src/lib/model/selection/selection.rs [64:118]
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "--- Projects ---")?;
let sorted_projects = {
let mut projects: Vec<_> = self
.projects
.iter()
.filter(|&project| !project.mandatory)
.collect();
projects.sort_unstable_by_key(|&project| project.name.as_str());
projects
};
if sorted_projects.is_empty() {
writeln!(f, "None selected.")?;
} else {
let longest_project_name = sorted_projects
.iter()
.fold(0_usize, |highest, project| project.name.len().max(highest));
for project in sorted_projects.iter() {
let mut padded_project_name = String::from(&project.name);
padded_project_name.extend(
" ".chars()
.cycle()
.take(longest_project_name - project.name.len()),
);
writeln!(
f,
"{} {} ({} {})",
padded_project_name,
project.description,
project.targets.len(),
if project.targets.len() == 1 {
"target"
} else {
"targets"
}
)?;
}
}
writeln!(f)?;
writeln!(f, "--- Targets ---")?;
let sorted_targets =
BTreeSet::<String>::from_iter(self.targets.iter().map(|target| target.to_string()));
if sorted_targets.is_empty() {
writeln!(f, "None selected.")?;
} else {
for target in sorted_targets.iter() {
writeln!(f, "{}", target)?;
}
}
Ok(())
}