1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum WpArrowError {
6 UnsupportedDataType(String),
8 InvalidArrayInnerType(String),
10 EmptyFieldName,
12 MissingRequiredField { field_name: String },
14 ArrowBuildError(String),
16 ValueConversionError {
18 field_name: String,
19 expected: String,
20 actual: String,
21 },
22 SchemaMismatch { expected: usize, actual: usize },
24 TimestampOverflow { field_name: String },
26 ParseError { field_name: String, detail: String },
28 IpcEncodeError(String),
30 IpcDecodeError(String),
32}
33
34impl fmt::Display for WpArrowError {
35 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36 match self {
37 WpArrowError::UnsupportedDataType(t) => {
38 write!(f, "unsupported WPL data type: {t}")
39 }
40 WpArrowError::InvalidArrayInnerType(t) => {
41 write!(f, "invalid array inner type: {t}")
42 }
43 WpArrowError::EmptyFieldName => {
44 write!(f, "field name must not be empty")
45 }
46 WpArrowError::MissingRequiredField { field_name } => {
47 write!(f, "missing required field: {field_name}")
48 }
49 WpArrowError::ArrowBuildError(msg) => {
50 write!(f, "arrow build error: {msg}")
51 }
52 WpArrowError::ValueConversionError {
53 field_name,
54 expected,
55 actual,
56 } => {
57 write!(
58 f,
59 "value conversion error for field '{field_name}': expected {expected}, got {actual}"
60 )
61 }
62 WpArrowError::SchemaMismatch { expected, actual } => {
63 write!(
64 f,
65 "schema mismatch: expected {expected} columns, got {actual}"
66 )
67 }
68 WpArrowError::TimestampOverflow { field_name } => {
69 write!(
70 f,
71 "timestamp overflow for field '{field_name}': value out of i64 nanosecond range"
72 )
73 }
74 WpArrowError::ParseError { field_name, detail } => {
75 write!(f, "parse error for field '{field_name}': {detail}")
76 }
77 WpArrowError::IpcEncodeError(msg) => {
78 write!(f, "IPC encode error: {msg}")
79 }
80 WpArrowError::IpcDecodeError(msg) => {
81 write!(f, "IPC decode error: {msg}")
82 }
83 }
84 }
85}
86
87impl std::error::Error for WpArrowError {}