1use crate::*;
2
3#[derive(Debug)]
7pub enum ChunkStrategyError {
8 MissingFileId,
10 InvalidChunkIndex,
12 MissingChunkIndex,
14 InvalidTotalChunks,
16 MissingTotalChunks,
18 MissingFileName,
20 EmptyChunkData,
22 IndexOutOfBounds(usize, usize),
24 Merge,
26 CreateDirectory(String),
28 CreateChunkFile(String),
30 WriteChunk(String),
32 CreateOutputFile(String),
34 ReadChunk(String),
36 WriteOutput(String),
38}
39
40impl fmt::Display for ChunkStrategyError {
42 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43 let message = match self {
44 ChunkStrategyError::MissingFileId => "Missing X-File-Id header",
45 ChunkStrategyError::InvalidChunkIndex => "Invalid X-Chunk-Index header",
46 ChunkStrategyError::MissingChunkIndex => "Missing X-Chunk-Index header",
47 ChunkStrategyError::InvalidTotalChunks => "Invalid X-Total-Chunks header",
48 ChunkStrategyError::MissingTotalChunks => "Missing X-Total-Chunks header",
49 ChunkStrategyError::MissingFileName => "Missing X-File-Name header",
50 ChunkStrategyError::EmptyChunkData => "Empty chunk data",
51 ChunkStrategyError::CreateDirectory(msg) => {
52 &format!("Failed to create directory: {msg}")
53 }
54 ChunkStrategyError::CreateChunkFile(msg) => {
55 &format!("Failed to create chunk file: {msg}")
56 }
57 ChunkStrategyError::WriteChunk(msg) => &format!("Failed to write chunk: {msg}"),
58 ChunkStrategyError::CreateOutputFile(msg) => {
59 &format!("Failed to create output file: {msg}")
60 }
61 ChunkStrategyError::ReadChunk(msg) => &format!("Failed to read chunk: {msg}"),
62 ChunkStrategyError::WriteOutput(msg) => {
63 &format!("Failed to write to output file: {msg}")
64 }
65 ChunkStrategyError::Merge => "Failed to complete the file merge operation",
66 ChunkStrategyError::IndexOutOfBounds(chunk_index, total_chunks) => {
67 &format!("Index {chunk_index} out of bounds(total: {total_chunks})")
68 }
69 };
70 write!(f, "{message}")
71 }
72}
73
74impl std::error::Error for ChunkStrategyError {}
76
77impl From<ChunkStrategyError> for Vec<u8> {
81 fn from(error: ChunkStrategyError) -> Self {
82 error.to_string().into_bytes()
83 }
84}