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
72
73
74
//! General constants used throughout `cuprate-blockchain`.

//---------------------------------------------------------------------------------------------------- Import
use cfg_if::cfg_if;

//---------------------------------------------------------------------------------------------------- Error Messages
/// Corrupt database error message.
///
/// The error message shown to end-users in panic
/// messages if we think the database is corrupted.
///
/// This is meant to be user-friendly.
pub const DATABASE_CORRUPT_MSG: &str = r"Cuprate has encountered a fatal error. The database may be corrupted.

TODO: instructions on:
1. What to do
2. How to fix (re-sync, recover, etc)
3. General advice for preventing corruption
4. etc";

//---------------------------------------------------------------------------------------------------- Misc
/// Static string of the `crate` being used as the database backend.
///
/// | Backend | Value |
/// |---------|-------|
/// | `heed`  | `"heed"`
/// | `redb`  | `"redb"`
pub const DATABASE_BACKEND: &str = {
    cfg_if! {
        if #[cfg(all(feature = "redb", not(feature = "heed")))] {
            "redb"
        } else {
            "heed"
        }
    }
};

/// Cuprate's database filename.
///
/// Used in [`Config::db_file`](crate::config::Config::db_file).
///
/// | Backend | Value |
/// |---------|-------|
/// | `heed`  | `"data.mdb"`
/// | `redb`  | `"data.redb"`
pub const DATABASE_DATA_FILENAME: &str = {
    cfg_if! {
        if #[cfg(all(feature = "redb", not(feature = "heed")))] {
            "data.redb"
        } else {
            "data.mdb"
        }
    }
};

/// Cuprate's database lock filename.
///
/// | Backend | Value |
/// |---------|-------|
/// | `heed`  | `Some("lock.mdb")`
/// | `redb`  | `None` (redb doesn't use a file lock)
pub const DATABASE_LOCK_FILENAME: Option<&str> = {
    cfg_if! {
        if #[cfg(all(feature = "redb", not(feature = "heed")))] {
            None
        } else {
            Some("lock.mdb")
        }
    }
};

//---------------------------------------------------------------------------------------------------- Tests
#[cfg(test)]
mod test {}