xet_core_structures/
error.rs1use thiserror::Error;
2use tracing::warn;
3
4use crate::merklehash::{DataHashError, MerkleHash};
5
6#[non_exhaustive]
7#[derive(Error, Debug)]
8pub enum CoreError {
9 #[error("I/O error: {0}")]
11 Io(#[from] std::io::Error),
12
13 #[error("Internal error: {0}")]
14 InternalError(String),
15
16 #[error("{0}")]
17 Other(String),
18
19 #[error("Too many collisions for truncated hash: {0}")]
21 TruncatedHashCollision(u64),
22
23 #[error("Shard version error: {0}")]
24 ShardVersion(String),
25
26 #[error("Bad filename: {0}")]
27 BadFilename(String),
28
29 #[error("Shard not found: {0}")]
30 ShardNotFound(MerkleHash),
31
32 #[error("File not found: {0}")]
33 FileNotFound(MerkleHash),
34
35 #[error("Query failed: {0}")]
36 QueryFailed(String),
37
38 #[error("Smudge query policy error: {0}")]
39 SmudgeQueryPolicy(String),
40
41 #[error("Invalid shard: {0}")]
42 InvalidShard(String),
43
44 #[error("Invalid range")]
46 InvalidRange,
47
48 #[error("Invalid arguments")]
49 InvalidArguments,
50
51 #[error("Malformed data: {0}")]
52 MalformedData(String),
53
54 #[error("Hash mismatch")]
55 HashMismatch,
56
57 #[error("Compression error: {0}")]
58 CompressionError(#[from] lz4_flex::frame::Error),
59
60 #[error("Hash parsing error: {0}")]
61 HashParsing(#[from] DataHashError),
62
63 #[error("Chunk header parse error")]
64 ChunkHeaderParse,
65
66 #[error("Runtime error: {0}")]
68 RuntimeError(#[from] xet_runtime::RuntimeError),
69
70 #[error("Task lock error: {0}")]
71 TaskRuntime(#[from] xet_runtime::utils::RwTaskLockError),
72
73 #[error("Task join error: {0}")]
74 TaskJoin(#[from] tokio::task::JoinError),
75}
76
77pub type Result<T> = std::result::Result<T, CoreError>;
78
79impl PartialEq for CoreError {
80 fn eq(&self, other: &CoreError) -> bool {
81 std::mem::discriminant(self) == std::mem::discriminant(other)
82 }
83}
84
85impl CoreError {
86 pub fn other(inner: impl ToString) -> Self {
87 Self::Other(inner.to_string())
88 }
89
90 pub fn invalid_shard(inner: impl ToString) -> Self {
91 Self::InvalidShard(inner.to_string())
92 }
93}
94
95pub trait Validate<T> {
97 fn ok_for_format_error(self) -> Result<Option<T>>;
98}
99
100impl<T> Validate<T> for Result<T> {
101 fn ok_for_format_error(self) -> Result<Option<T>> {
102 match self {
103 Ok(v) => Ok(Some(v)),
104 Err(CoreError::MalformedData(e)) => {
105 warn!("XORB Validation: {e}");
106 Ok(None)
107 },
108 Err(e) => Err(e),
109 }
110 }
111}