aboutsummaryrefslogtreecommitdiff
path: root/lockchain-core/src/errors/vault.rs
blob: 37d866217a76d1a86b748a5bfc0e0bbab037a454 (plain)
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
//! Vault workflow and I/O errors

use std::error::Error as StdError;
use std::fmt::{Display, Formatter, Result};

#[derive(Debug, Serialize, Deserialize)]
pub enum Error {
    /// Indicates that **mandatory** fields in the
    /// vault generator haven't been set – vault
    /// constructor was never called.
    IncompleteGenerator,
    /// A vault already exists with that path-id
    AlreadyExists,
    /// The provided path is invalid
    InvalidPath,
    /// The provided name is invalid
    /// 
    /// This usually means the backing storage doesn't support some
    /// character in the name which can sometimes occur if the name
    /// contains special unicode characters that a filesystem doesn't
    /// recognise as valid characters.
    InvalidName,
    /// The combination of selected components threw a runtime incompatibility error
    InvalidCompoents {
        /// Optionally the type that is incompatible (if it can be determined)
        tt: Option<String>,
    },
    /// Vault failed it's checksum self-test
    /// 
    /// This is problematic because it also means the vault was unable to correct
    /// any errors. Either the backing storage has some serious issues or maybe
    /// an external sync process that lockchain can't detect is still working.
    FailedSelfTest,
    /// Failed to initialise lockchain vault handler
    FailedInitalise,
    /// Failed to create a vault for an unknown reason
    FailedCreation,
    /// Failed to load a vault for an unknown reason
    FailedLoading,
    /// Failed to close the vault properly.
    /// 
    /// This could be because the backing storage is no longer available
    /// or permisions to write have been revoked.
    FailedClosing,
    /// Make sure we don't break user code with new options
    #[doc(hidden)]
    __NonExhaustive,
}

impl StdError for Error {}

impl Display for Error {
    fn fmt(&self, f: &mut Formatter) -> Result {
        write!(
            f,
            "{}",
            match self {
                _ => "Unknown failure",
            }
        )
    }
}