nectar_primitives/file/
error.rs1use crate::ChunkAddress;
4use thiserror::Error;
5
6#[derive(Error, Debug)]
8pub enum FileError {
9 #[error("write past span length: wrote {written} bytes, span is {span}")]
11 WritePastSpan {
12 span: u64,
14 written: u64,
16 },
17
18 #[error("chunk too large: max {max}, got {actual}")]
20 ChunkTooLarge {
21 max: usize,
23 actual: usize,
25 },
26
27 #[error("store error: {0}")]
29 Store(Box<dyn std::error::Error + Send + Sync>),
30
31 #[error("getter error: {0}")]
33 Getter(Box<dyn std::error::Error + Send + Sync>),
34
35 #[error("invalid reference at level {level}")]
37 InvalidReference {
38 level: usize,
40 },
41
42 #[error("chunk not found: {0}")]
44 ChunkNotFound(ChunkAddress),
45
46 #[error("span mismatch: expected {expected}, got {actual}")]
48 SpanMismatch {
49 expected: u64,
51 actual: u64,
53 },
54
55 #[error("chunk error: {0}")]
57 Chunk(#[from] crate::chunk::error::ChunkError),
58
59 #[error("encryption error: {0}")]
61 Encryption(#[from] crate::chunk::encryption::EncryptionError),
62
63 #[error("invalid entry reference length: {len} (expected 32 or 64)")]
65 InvalidEntryRef {
66 len: usize,
68 },
69
70 #[error("expected content chunk, got {type_name}")]
72 InvalidChunkType {
73 type_name: &'static str,
75 },
76}
77
78impl FileError {
79 pub fn store<E: std::error::Error + Send + Sync + 'static>(err: E) -> Self {
81 Self::Store(Box::new(err))
82 }
83
84 pub fn getter<E: std::error::Error + Send + Sync + 'static>(err: E) -> Self {
86 Self::Getter(Box::new(err))
87 }
88}
89
90pub type Result<T> = std::result::Result<T, FileError>;