1use std::fmt;
4
5pub type Result<T> = std::result::Result<T, ArrowError>;
7
8#[derive(Debug)]
10pub enum ArrowError {
11 InvalidSchema {
13 message: String
15 },
16
17 SchemaMismatch {
19 expected: String,
21 actual: String,
23 },
24
25 InvalidField {
27 name: String,
29 message: String,
31 },
32
33 InvalidDataType {
35 type_name: String,
37 message: String,
39 },
40
41 ArrayLengthMismatch {
43 expected: usize,
45 actual: usize,
47 },
48
49 OutOfBounds {
51 index: usize,
53 length: usize,
55 },
56
57 InvalidQuaternion {
59 message: String
61 },
62
63 InvalidTensor {
65 message: String
67 },
68
69 ComputationError {
71 message: String
73 },
74
75 InvalidData(String),
77
78 Internal {
80 message: String
82 },
83}
84
85impl fmt::Display for ArrowError {
86 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
87 match self {
88 ArrowError::InvalidSchema { message } => {
89 write!(f, "Invalid schema: {}", message)
90 }
91 ArrowError::SchemaMismatch { expected, actual } => {
92 write!(f, "Schema mismatch: expected {}, got {}", expected, actual)
93 }
94 ArrowError::InvalidField { name, message } => {
95 write!(f, "Invalid field '{}': {}", name, message)
96 }
97 ArrowError::InvalidDataType { type_name, message } => {
98 write!(f, "Invalid data type '{}': {}", type_name, message)
99 }
100 ArrowError::ArrayLengthMismatch { expected, actual } => {
101 write!(f, "Array length mismatch: expected {}, got {}", expected, actual)
102 }
103 ArrowError::OutOfBounds { index, length } => {
104 write!(f, "Index {} out of bounds for array of length {}", index, length)
105 }
106 ArrowError::InvalidQuaternion { message } => {
107 write!(f, "Invalid quaternion: {}", message)
108 }
109 ArrowError::InvalidTensor { message } => {
110 write!(f, "Invalid tensor: {}", message)
111 }
112 ArrowError::ComputationError { message } => {
113 write!(f, "Computation error: {}", message)
114 }
115 ArrowError::InvalidData(message) => {
116 write!(f, "Invalid data: {}", message)
117 }
118 ArrowError::Internal { message } => {
119 write!(f, "Internal error: {}", message)
120 }
121 }
122 }
123}
124
125impl std::error::Error for ArrowError {}
126
127#[cfg(test)]
128mod tests {
129 use super::*;
130
131 #[test]
132 fn test_error_display() {
133 let err = ArrowError::InvalidSchema {
134 message: "empty schema".to_string(),
135 };
136 assert!(err.to_string().contains("Invalid schema"));
137 }
138
139 #[test]
140 fn test_schema_mismatch() {
141 let err = ArrowError::SchemaMismatch {
142 expected: "Int64".to_string(),
143 actual: "Float64".to_string(),
144 };
145 assert!(err.to_string().contains("mismatch"));
146 }
147
148 #[test]
149 fn test_out_of_bounds() {
150 let err = ArrowError::OutOfBounds {
151 index: 10,
152 length: 5,
153 };
154 assert!(err.to_string().contains("out of bounds"));
155 }
156}
157
158
159
160
161