1use crate::{chunkset::ChunkSet, consts};
2
3#[derive(PartialEq)]
5pub enum DecdsError {
6 EmptyDataForBlob,
8 InvalidStartBound,
10 InvalidEndBound(usize),
12
13 BlobHeaderSerializationFailed(String),
15 BlobHeaderDeserializationFailed(String),
17
18 ProofCarryingChunkSerializationFailed(String),
20 ProofCarryingChunkDeserializationFailed(String),
22
23 ChunksetReadyToRepair(usize),
25 ChunksetNotYetReadyToRepair(usize),
27 ChunksetAlreadyRepaired(usize),
29 ChunksetRepairingFailed(usize, String),
31
32 InvalidErasureCodedShareId(usize),
34 InvalidChunksetId(usize, usize),
36 InvalidChunksetSize(usize),
38 InvalidChunkMetadata(usize),
40 InvalidProofInChunk(usize),
42 ChunkDecodingFailed(usize, String),
44
45 NoLeafNodesToBuildMerkleTreeOn,
47 InvalidLeafNodeIndex(usize, usize),
49}
50
51impl std::fmt::Display for DecdsError {
52 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
53 match self {
54 DecdsError::EmptyDataForBlob => write!(f, "empty data for blob"),
55 DecdsError::InvalidStartBound => write!(f, "invalid start bound"),
56 DecdsError::InvalidEndBound(end) => write!(f, "invalid end bound: {}", end),
57
58 DecdsError::BlobHeaderSerializationFailed(err) => write!(f, "failed to serialize blob header: {}", err),
59 DecdsError::BlobHeaderDeserializationFailed(err) => write!(f, "failed to deserialize blob header: {}", err),
60
61 DecdsError::ProofCarryingChunkSerializationFailed(err) => write!(f, "failed to serialize proof carrying chunk: {}", err),
62 DecdsError::ProofCarryingChunkDeserializationFailed(err) => write!(f, "failed to deserialize proof carrying chunk: {}", err),
63
64 DecdsError::ChunksetReadyToRepair(id) => write!(f, "chunkset {} is ready to repair", id),
65 DecdsError::ChunksetNotYetReadyToRepair(id) => write!(f, "chunkset {} is not ready to repair", id),
66 DecdsError::ChunksetAlreadyRepaired(id) => write!(f, "chunkset {} is already repaired", id),
67 DecdsError::ChunksetRepairingFailed(id, err) => write!(f, "chunkset {} repairing failed: {}", id, err),
68
69 DecdsError::InvalidErasureCodedShareId(id) => write!(
70 f,
71 "invalid erasure coded share id: {} (num_shares: {})",
72 id,
73 consts::DECDS_NUM_ERASURE_CODED_SHARES
74 ),
75 DecdsError::InvalidChunksetId(id, num_chunksets) => write!(f, "invalid chunkset id: {} (num_chunksets: {})", id, num_chunksets),
76 DecdsError::InvalidChunksetSize(size) => write!(f, "invalid chunkset size: {}B, expected: {}B", size, ChunkSet::BYTE_LENGTH),
77 DecdsError::InvalidChunkMetadata(chunkset_id) => write!(f, "invalid chunk for chunkset {}", chunkset_id),
78 DecdsError::InvalidProofInChunk(chunkset_id) => write!(f, "invalid proof carrying chunk for chunkset {}", chunkset_id),
79 DecdsError::ChunkDecodingFailed(chunkset_id, err) => write!(f, "decoding chunk for chunkset {} failed: {}", chunkset_id, err),
80
81 DecdsError::NoLeafNodesToBuildMerkleTreeOn => write!(f, "no leaf nodes to build merkle tree on"),
82 DecdsError::InvalidLeafNodeIndex(leaf_index, num_leaves) => write!(f, "invalid leaf node index: {} (num_leaves: {})", leaf_index, num_leaves),
83 }
84 }
85}
86
87impl std::fmt::Debug for DecdsError {
88 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
89 write!(f, "{}", self)
90 }
91}
92
93impl std::error::Error for DecdsError {}