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
use std::error::Error;
use std::fmt;
#[derive(Debug)]
pub enum StatsError {
BadParams,
ArgMustBePositive(&'static str),
ArgNotNegative(&'static str),
ArgIntervalIncl(&'static str, f64, f64),
ArgIntervalExcl(&'static str, f64, f64),
ArgIntervalExclMin(&'static str, f64, f64),
ArgIntervalExclMax(&'static str, f64, f64),
ArgGt(&'static str, f64),
ArgGte(&'static str, f64),
ArgLt(&'static str, f64),
ArgLte(&'static str, f64),
ContainersMustBeSameLength,
}
impl Error for StatsError {
fn description(&self) -> &str {
"Error performing statistical calculation"
}
}
impl fmt::Display for StatsError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
StatsError::BadParams => write!(f, "Bad distribution parameters"),
StatsError::ArgMustBePositive(s) => write!(f, "Argument {} must be positive", s),
StatsError::ArgNotNegative(s) => write!(f, "Argument {} must be non-negative", s),
StatsError::ArgIntervalIncl(s, min, max) => {
write!(f, "Argument {} not within interval [{}, {}]", s, min, max)
}
StatsError::ArgIntervalExcl(s, min, max) => {
write!(f, "Argument {} not within interval ({}, {})", s, min, max)
}
StatsError::ArgIntervalExclMin(s, min, max) => {
write!(f, "Argument {} not within interval ({}, {}]", s, min, max)
}
StatsError::ArgIntervalExclMax(s, min, max) => {
write!(f, "Argument {} not within interval [{}, {})", s, min, max)
}
StatsError::ArgGt(s, val) => write!(f, "Argument {} must be greater than {}", s, val),
StatsError::ArgGte(s, val) => {
write!(f, "Argument {} must be greater than or equal to {}", s, val)
}
StatsError::ArgLt(s, val) => write!(f, "Argument {} must be less than {}", s, val),
StatsError::ArgLte(s, val) => {
write!(f, "Argument {} must be less than or equal to {}", s, val)
}
StatsError::ContainersMustBeSameLength => {
write!(f, "Expected containers of same length")
}
}
}
}