pub trait Testable { fn name(&self) -> String; fn run(&self) -> Option; // None will be success, Some is the error message } pub fn runner(tests: &[&dyn Testable]) { for t in tests { print!("{}........{}", t.name(), t.run().unwrap_or_else(|| "SUCCESS".to_string())); } }