1#![deny(
7 missing_copy_implementations,
8 missing_debug_implementations,
9 missing_docs,
10 trivial_casts,
11 trivial_numeric_casts,
12 unsafe_code,
13 unstable_features,
14 unused_import_braces,
15 unused_qualifications
16)]
17
18use std::fmt;
19
20pub type Result<T> = std::result::Result<T, NotFourError>;
22
23#[derive(Debug, Clone, Copy)]
25pub enum NotFourError {
26 Close,
28
29 NotClose,
31}
32
33impl std::fmt::Display for NotFourError {
34 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
35 match self {
36 NotFourError::Close => write!(f, "it's pretty close to four"),
37 NotFourError::NotClose => write!(f, "it's definitely not four"),
38 }
39 }
40}
41
42impl std::error::Error for NotFourError {}
43
44pub fn do_work(input: usize) -> Result<&'static str> {
51 match input {
52 n if n == four() => Ok("it's four"),
53 3..=5 => Err(NotFourError::Close),
54 _ => Err(NotFourError::NotClose),
55 }
56}
57
58fn four() -> usize {
59 2 + 2
60}
61
62#[cfg(test)]
63mod tests {
64 use super::*;
65
66 #[test]
67 fn it_works_private() {
68 assert_eq!(four(), 4);
69 }
70}