1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use std::fmt::{
Formatter,
Result as FmtResult,
};
pub trait Error
{
fn from(&self, f: &mut Formatter) -> FmtResult;
fn requirement(&self, f: &mut Formatter) -> FmtResult;
fn result(&self, f: &mut Formatter) -> FmtResult;
fn causes(&self, f: &mut Formatter, depth: usize) -> FmtResult;
fn print(&self, f: &mut Formatter, depth: usize) -> FmtResult
{
self.print_full(f, depth)
}
fn print_full(&self, f: &mut Formatter, depth: usize) -> FmtResult
{
for _ in 0..depth
{
write!(f, "\t")?;
}
write!(f, "at position ")?;
self.from(f)?;
write!(f, " required ")?;
self.requirement(f)?;
write!(f, " but ")?;
self.result(f)?;
write!(f, ".\n")?;
self.causes(f, depth + 1)
}
}