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
//! Custom Error Types for errors that may occur when handling todos (or lists).

/// Custom Result Type for tdo.
///
/// This abbreviation is introduced since many functions throughout the crate return
/// this type of result, which bundles all possible errors of the `tdo_core` crate.
pub type TdoResult<T> = Result<T>;


/// Errors that can arise when working with todo lists.
pub mod todo_error {
    error_chain! {
        errors {
            /// The requested item is not in the list.
            NotInList {
                description("Todo is not in this list")
            }
            /// The requested todo list does not exist.
            NoSuchList {
                description("No such list")
            }
            /// The default list is tried to be removed.
            CanNotRemoveDefault {
                description("The default list can no be removed")
            }
            /// A list with the same name already exists.
            NameAlreadyExists {
                description("There already exists a list with this name")
            }
            /// A todo with the same ID already exists.
            IDAlreadyExists {
                description("There already exists a todo with this ID")
            }
        }
    }
}

/// The Errors that may occur while interacting with the file system.
pub mod storage_error {
    error_chain! {
        errors {
            /// The accessed file is corrupted. This is most likely
            /// because someone edited the JSON file manually.
            FileCorrupted {
                description("File is corrupted")
            }
            /// The data could not be written to the file.
            SaveFailure {
                description("File could not be saved")
            }
            /// The requested file could not be found.
            FileNotFound {
                description("File was not found")
            }
            /// The conversion of an older format failed.
            UnableToConvert {
                description("File could not be converted automatically")
            }
        }
    }
}

error_chain! {
    links {
        TodoError(todo_error::Error, todo_error::ErrorKind) #[doc = "An error within the tdo data structures occured."];
        StorageError(storage_error::Error, storage_error::ErrorKind) #[doc = "A storage-related error occured while interacting with the file system."];
    }
}