use problemo::{common::*, *};
fn read_files<ProblemReceiverT>(
paths: &[&str],
problems: &mut ProblemReceiverT,
) -> Result<Vec<String>, Problem>
where
ProblemReceiverT: ProblemReceiver,
{
let mut strings = Vec::default();
for path in paths {
if let Some(string) = std::fs::read_to_string(path)
.via(LowLevelError)
.give_ok(problems)?
{
strings.push(string);
}
}
Ok(strings)
}
fn fake_main() -> Result<(), Problem> {
let strings = read_files(&["non-existing1.txt", "non-existing2.txt"], &mut NoProblem).unwrap();
println!("NoProblem: number of strings: {}", strings.len());
let mut problems = Problems::default();
let strings = read_files(&["non-existing3.txt", "non-existing4.txt"], &mut problems)?;
println!("\nProblems: number of strings: {}", strings.len());
println!("\nCheck:");
problems = problems.check()?;
let strings = read_files(&["non-existing5.txt", "non-existing6.txt"], &mut FailFast)?;
println!("FailFast: number of strings: {}", strings.len());
problems.check()?;
Ok(())
}
fn main() {
if let Err(problem) = fake_main() {
for problem in problem.into_problems() {
println!("• {}", problem);
}
}
}