kimberlite_store/
error.rs1use std::io;
4
5use crate::Key;
6use crate::types::{PageId, TableId};
7
8#[derive(thiserror::Error, Debug)]
10pub enum StoreError {
11 #[error("filesystem error: {0}")]
13 Io(#[from] io::Error),
14
15 #[error(
17 "page {page_id} corrupted: CRC mismatch (expected {expected:#010x}, got {actual:#010x})"
18 )]
19 PageCorrupted {
20 page_id: PageId,
21 expected: u32,
22 actual: u32,
23 },
24
25 #[error("key too long: {len} bytes exceeds maximum {max}")]
27 KeyTooLong { len: usize, max: usize },
28
29 #[error("value too large: {len} bytes exceeds maximum {max}")]
31 ValueTooLarge { len: usize, max: usize },
32
33 #[error("invalid page magic: expected {expected:#010x}, got {actual:#010x}")]
35 InvalidPageMagic { expected: u32, actual: u32 },
36
37 #[error("unsupported page version: {0}")]
39 UnsupportedPageVersion(u8),
40
41 #[error("invalid superblock magic")]
43 InvalidSuperblockMagic,
44
45 #[error("superblock corrupted: CRC mismatch")]
47 SuperblockCorrupted,
48
49 #[error("non-sequential batch: expected position {expected}, got {actual}")]
51 NonSequentialBatch { expected: u64, actual: u64 },
52
53 #[error("table {0:?} not found")]
55 TableNotFound(TableId),
56
57 #[error("page overflow: need {needed} bytes, have {available}")]
59 PageOverflow { needed: usize, available: usize },
60
61 #[error("B+tree invariant violation: {0}")]
63 BTreeInvariant(String),
64
65 #[error("duplicate key in batch: {0:?}")]
67 DuplicateKey(Key),
68
69 #[error("page {0} not found")]
71 PageNotFound(PageId),
72
73 #[error("store is read-only")]
75 ReadOnly,
76}