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 #[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}