snops_checkpoint/
errors.rs

1use std::{io, path::PathBuf};
2
3use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum ManagerLoadError {
7    #[error("invalid storage path: {0}")]
8    InvalidStoragePath(PathBuf),
9    #[error("error globbing storage path: {0}")]
10    GlobError(#[from] glob::PatternError),
11}
12
13#[derive(Debug, Error)]
14#[cfg(feature = "write")]
15pub enum ManagerCullError {
16    #[error("error opening storage: {0}")]
17    StorageOpenError(#[source] anyhow::Error),
18    #[error("error reading ledger: {0}")]
19    ReadLedger(#[source] anyhow::Error),
20}
21
22#[derive(Debug, Error)]
23#[cfg(feature = "write")]
24pub enum ManagerPollError {
25    #[error("error reading checkpoint header: {0}")]
26    Header(#[from] CheckpointHeaderError),
27    #[error("error reading checkpoint: {0}")]
28    Read(#[from] CheckpointReadError),
29    #[error("error inserting checkpoint: {0}")]
30    Insert(#[from] ManagerInsertError),
31}
32
33#[derive(Debug, Error)]
34#[cfg(feature = "write")]
35pub enum ManagerInsertError {
36    #[error("invalid storage path: {0}")]
37    InvalidStoragePath(PathBuf),
38    #[error("error opening file: {0}")]
39    FileError(#[source] io::Error),
40    #[error("error modifying file times: {0}")]
41    ModifyError(#[source] io::Error),
42    #[error("error writing file: {0}")]
43    WriteError(#[source] io::Error),
44}
45
46#[derive(Debug, Error)]
47#[cfg(feature = "write")]
48pub enum CheckpointReadError {
49    #[error("error reading checkpoint header: {0}")]
50    Header(#[from] CheckpointHeaderError),
51    #[error("error reading checkpoint content: {0}")]
52    Content(#[from] CheckpointContentError),
53}
54
55#[derive(Debug, Error)]
56#[cfg(feature = "write")]
57pub enum CheckpointCheckError {
58    #[error("error opening storage: {0}")]
59    StorageOpenError(#[source] anyhow::Error),
60    #[error("block hash not found at height {0}")]
61    BlockNotFound(u32),
62    #[error("error reading ledger: {0}")]
63    ReadLedger(#[source] anyhow::Error),
64    #[error("checkpoint height ({0}) is greater than ledger height ({1})")]
65    HeightMismatch(u32, u32),
66    #[error("checkpoint hash ({1}) does not match ledger hash ({2}) at height {0}")]
67    HashMismatch(u32, String, String),
68}
69
70#[derive(Debug, Error)]
71#[cfg(feature = "write")]
72pub enum CheckpointRewindError {
73    #[error("error opening storage: {0}")]
74    OpenLedger(#[source] anyhow::Error),
75    #[error("error reading ledger: {0}")]
76    ReadLedger(#[source] anyhow::Error),
77    #[error("error checking checkpoint: {0}")]
78    Check(#[from] CheckpointCheckError),
79    #[error("error removing documents: {0}")]
80    RemoveDocument(#[source] anyhow::Error),
81    #[error("no commiteee found for height {0}. ledger likely corrupted")]
82    MissingCommittee(u32),
83}
84
85#[derive(Debug, Error)]
86pub enum CheckpointHeaderError {
87    #[error("error opening file: {0}")]
88    FileError(#[source] io::Error),
89    #[error("error reading bytes: {0}")]
90    ReadError(#[source] io::Error),
91    #[error("no block found at height {0}")]
92    BlockNotFound(u32),
93    #[error("no genesis block hash found in storage")]
94    HashlessGenesis,
95    #[error("no block header found for block hash {1} at height {0}")]
96    BlockMissingHeader(u32, String),
97
98    #[error("error opening storage: {0}")]
99    #[cfg(feature = "write")]
100    OpenLedger(#[source] anyhow::Error),
101    #[error("error reading ledger: {0}")]
102    #[cfg(feature = "write")]
103    ReadLedger(#[source] anyhow::Error),
104}
105
106#[derive(Debug, Error)]
107#[cfg(feature = "write")]
108pub enum CheckpointContentError {
109    #[error("error opening storage: {0}")]
110    OpenLedger(#[source] anyhow::Error),
111    #[error("error reading ledger: {0}")]
112    ReadLedger(#[source] anyhow::Error),
113    #[error("no block found at height {0}")]
114    BlockNotFound(u32),
115    #[error("no genesis block hash found in storage")]
116    HashlessGenesis,
117    #[error("no block header found for block hash {1} at height {0}")]
118    BlockMissingHeader(u32, String),
119}