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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//! Reporting functions.

/// Report an object and either its associated name, or a human readable string if supplied.
#[macro_export]
macro_rules! report {
    ($expression: expr) => {
        println!("{:>32} : {}", stringify!($expression), $expression);
    };
    ($expression: expr, $desc: expr) => {
        println!("{:>32} : {}", $desc, $expression);
    };
    ($expression: expr, $desc: expr, $units: expr) => {
        println!("{:>32} : {} [{}]", $desc, $expression, $units);
    };
}

/// Report an iterable object and either its associated name, or a human readable string if supplied.
#[macro_export]
macro_rules! reports {
    ($expression: expr) => {
        print!("{:>32} :", stringify!($expression));
        for item in $expression {
            print!(" {}", item);
        }
        println!();
    };
    ($expression: expr, $desc: expr) => {
        print!("{:>32} :", $desc);
        for item in $expression {
            print!(" {}", item);
        }
        println!();
    };
    ($expression: expr, $desc: expr, $units: expr) => {
        print!("{:>32} :", $desc);
        for item in $expression {
            print!(" {}", item);
        }
        println!(" [{}]", $units);
    };
}

/// Report an object and either its associated name, or a human readable string if supplied.
#[macro_export]
macro_rules! fmt_report {
    ($fmt: expr, $expression: expr) => {
        writeln!(fmt, "{:>32} : {}", stringify!($expression), $expression)?;
    };
    ($fmt: expr, $expression: expr, $desc: expr) => {
        writeln!(fmt, "{:>32} : {}", $desc, $expression)?;
    };
    ($fmt: expr, $expression: expr, $desc: expr, $units: expr) => {
        writeln!(fmt, "{:>32} : {} [{}]", $desc, $expression, $units)?;
    };
}

/// Report an iterable object and either its associated name, or a human readable string if supplied.
#[macro_export]
macro_rules! fmt_reports {
    ($fmt: expr, $expression: expr) => {
        write!(fmt, "{:>32} :", stringify!($expression))?;
        for item in $expression {
            write!(fmt, " {}", item)?;
        }
        writeln!(fmt)?;
    };
    ($fmt: expr, $expression: expr, $desc: expr) => {
        write!(fmt, "{:>32} :", $desc)?;
        for item in $expression {
            write!(fmt, " {}", item)?;
        }
        writeln!(fmt)?;
    };
    ($fmt: expr, $expression: expr, $desc: expr, $units: expr) => {
        write!(fmt, "{:>32} :", $desc)?;
        for item in $expression {
            write!(fmt, " {}", item)?;
        }
        writeln!(fmt, " [{}]", $units)?;
    };
}