Skip to main content

fedimint_cursed_redb/
error.rs

1use fedimint_core::db::DatabaseError;
2#[cfg(not(target_family = "wasm"))]
3use fedimint_db_locked::DbLockError;
4
5/// Why [`MemAndRedb::new`](crate::MemAndRedb::new) could not open a database.
6///
7/// The first three variants exist on native targets only.
8#[derive(Debug, thiserror::Error)]
9#[non_exhaustive]
10pub enum MemAndRedbOpenError {
11    /// The database path has no parent directory to create.
12    #[cfg(not(target_family = "wasm"))]
13    #[error("db path must have a base dir")]
14    NoBaseDir,
15
16    /// The parent directory of the database could not be created.
17    #[cfg(not(target_family = "wasm"))]
18    #[error(transparent)]
19    CreateDir(#[from] std::io::Error),
20
21    /// The lock file next to the database could not be opened or locked.
22    #[cfg(not(target_family = "wasm"))]
23    #[error(transparent)]
24    Lock(#[from] DbLockError),
25
26    /// A database in the redb v2 file format could not be opened to migrate
27    /// it.
28    #[error("Failed to open redb v2 database for migration")]
29    OpenV2(#[source] Box<dyn std::error::Error + Send + Sync>),
30
31    /// A database in the redb v2 file format could not be upgraded to v3.
32    #[error("Failed to upgrade redb database to v3 format")]
33    UpgradeV2(#[source] Box<dyn std::error::Error + Send + Sync>),
34
35    /// The database could not be opened after its migration to the v3 format.
36    #[error("Failed to open redb database after v2->v3 migration")]
37    OpenMigrated(#[source] Box<dyn std::error::Error + Send + Sync>),
38
39    /// The database could not be created or opened.
40    #[error("Failed to create/open redb database")]
41    Open(#[source] Box<dyn std::error::Error + Send + Sync>),
42
43    /// The content of the database could not be loaded into memory.
44    #[error(transparent)]
45    Load(#[from] DatabaseError),
46}