libsql_wal/
error.rs

1pub type Result<T, E = Error> = std::result::Result<T, E>;
2
3#[derive(Debug, thiserror::Error)]
4pub enum Error {
5    #[error("io error: {0}")]
6    Io(#[from] std::io::Error),
7    #[error("error building wal index: {0}")]
8    IndexError(#[from] fst::Error),
9    /// The segment has changed since the connection last read, and it's now trying to upgrade
10    #[error("busy snapshot")]
11    BusySnapshot,
12    #[error("invalid segment header checksum")]
13    InvalidHeaderChecksum,
14    #[error("invalid segment header magic")]
15    InvalidHeaderMagic,
16    #[error("invalid segment header version")]
17    InvalidHeaderVersion,
18    #[error("Invalid page size, only 4095 is supported")]
19    InvalidPageSize,
20    #[error("Registry is shutting down")]
21    ShuttingDown,
22
23    #[error("invalid db footer magic")]
24    InvalidFooterMagic,
25    #[error("invalid db footer version")]
26    InvalidFooterVersion,
27
28    #[error("storage error: {0}")]
29    Storage(#[from] Box<crate::storage::Error>),
30    #[error("wal is being deleted")]
31    DeletingWal,
32}
33
34impl Into<libsql_sys::ffi::Error> for Error {
35    fn into(self) -> libsql_sys::ffi::Error {
36        let code = match self {
37            Error::BusySnapshot => libsql_sys::ffi::SQLITE_BUSY_SNAPSHOT,
38            Error::InvalidHeaderChecksum => libsql_sys::ffi::SQLITE_CORRUPT,
39            e => {
40                tracing::error!("wal error: {e}");
41                libsql_sys::ffi::SQLITE_IOERR_WRITE
42            }
43        };
44
45        libsql_sys::ffi::Error::new(code)
46    }
47}