use std::fmt::Write;
pub trait Describe {
fn describe(&self) -> String;
fn describe_short(&self) -> String;
}
pub fn describe_list_short<T: Describe>(header: &str, items: &[T]) -> String {
let mut description = String::new();
writeln!(description, "[ {} ]", header).expect("Could not construct a description string");
for (i, item) in items.iter().enumerate() {
writeln!(description, "{:2}: {}", i, item.describe_short())
.expect("Could not construct a description string");
}
description
}
pub fn describe_list<T: Describe>(header: &str, items: &[T]) -> String {
let mut description = String::new();
writeln!(description, "[ {} ]", header).expect("Could not construct a description string");
for (i, item) in items.iter().enumerate() {
writeln!(description, "{:2}: {}", i, item.describe())
.expect("Could not construct a description string");
}
description
}
pub fn unwrap_name(name: &Option<String>) -> String {
name.clone().unwrap_or("(No name)".to_string())
}