in guard/src/commands/validate.rs [444:494]
fn report(self) -> crate::rules::Result<()> {
let stack = self.root_context.stack();
let top = stack.first().unwrap();
let mut output = Box::new(std::io::stdout()) as Box<dyn std::io::Write>;
if self.verbose && self.print_json {
let serialized_user = serde_json::to_string_pretty(&top.children).unwrap();
println!("{}", serialized_user);
}
else {
let longest = top.children.iter()
.max_by(|f, s| {
(*f).context.len().cmp(&(*s).context.len())
})
.map(|elem| elem.context.len())
.unwrap_or(20);
let (failed, rest): (Vec<&StatusContext>, Vec<&StatusContext>) =
top.children.iter().partition(|ctx|
match (*ctx).status {
Some(Status::FAIL) => true,
_ => false
});
for each_reporter in self.reporters {
each_reporter.report(
&mut output,
top.status.clone(),
&failed,
&rest,
longest
)?;
}
if self.show_clause_failures {
println!("{}", "Clause Failure Summary".bold());
for each in failed {
print_failing_clause(self.rules_file_name, each, longest);
}
}
if self.verbose {
println!("Evaluation Tree");
for each in &top.children {
print_context(each, 1);
}
}
}
Ok(())
}