1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
use crate::error::Error;
/// The different types of errors that reading from IPC can cause
#[derive(Debug)]
#[non_exhaustive]
pub enum OutOfSpecKind {
/// The IPC file does not start with [b'A', b'R', b'R', b'O', b'W', b'1']
InvalidHeader,
/// The IPC file does not end with [b'A', b'R', b'R', b'O', b'W', b'1']
InvalidFooter,
/// The first 4 bytes of the last 10 bytes is < 0
NegativeFooterLength,
/// The footer is an invalid flatbuffer
InvalidFlatbufferFooter(arrow_format::ipc::planus::Error),
/// The file's footer does not contain record batches
MissingRecordBatches,
/// The footer's record batches is an invalid flatbuffer
InvalidFlatbufferRecordBatches(arrow_format::ipc::planus::Error),
/// The file's footer does not contain a schema
MissingSchema,
/// The footer's schema is an invalid flatbuffer
InvalidFlatbufferSchema(arrow_format::ipc::planus::Error),
/// The file's schema does not contain fields
MissingFields,
/// The footer's dictionaries is an invalid flatbuffer
InvalidFlatbufferDictionaries(arrow_format::ipc::planus::Error),
/// The block is an invalid flatbuffer
InvalidFlatbufferBlock(arrow_format::ipc::planus::Error),
/// The dictionary message is an invalid flatbuffer
InvalidFlatbufferMessage(arrow_format::ipc::planus::Error),
/// The message does not contain a header
MissingMessageHeader,
/// The message's header is an invalid flatbuffer
InvalidFlatbufferHeader(arrow_format::ipc::planus::Error),
/// Relative positions in the file is < 0
UnexpectedNegativeInteger,
/// dictionaries can only contain dictionary messages; record batches can only contain records
UnexpectedMessageType,
/// RecordBatch messages do not contain buffers
MissingMessageBuffers,
/// The message's buffers is an invalid flatbuffer
InvalidFlatbufferBuffers(arrow_format::ipc::planus::Error),
/// RecordBatch messages does not contain nodes
MissingMessageNodes,
/// The message's nodes is an invalid flatbuffer
InvalidFlatbufferNodes(arrow_format::ipc::planus::Error),
/// The message's body length is an invalid flatbuffer
InvalidFlatbufferBodyLength(arrow_format::ipc::planus::Error),
/// The message does not contain data
MissingData,
/// The message's data is an invalid flatbuffer
InvalidFlatbufferData(arrow_format::ipc::planus::Error),
/// The version is an invalid flatbuffer
InvalidFlatbufferVersion(arrow_format::ipc::planus::Error),
/// The compression is an invalid flatbuffer
InvalidFlatbufferCompression(arrow_format::ipc::planus::Error),
/// The record contains a number of buffers that does not match the required number by the data type
ExpectedBuffer,
/// A buffer's size is smaller than the required for the number of elements
InvalidBuffer {
/// Declared number of elements in the buffer
length: usize,
/// The name of the `NativeType`
type_name: &'static str,
/// Bytes required for the `length` and `type`
required_number_of_bytes: usize,
/// The size of the IPC buffer
buffer_length: usize,
},
/// A buffer's size is larger than the file size
InvalidBuffersLength {
/// number of bytes of all buffers in the record
buffers_size: u64,
/// the size of the file
file_size: u64,
},
/// A bitmap's size is smaller than the required for the number of elements
InvalidBitmap {
/// Declared length of the bitmap
length: usize,
/// Number of bits on the IPC buffer
number_of_bits: usize,
},
/// The dictionary is_delta is an invalid flatbuffer
InvalidFlatbufferIsDelta(arrow_format::ipc::planus::Error),
/// The dictionary id is an invalid flatbuffer
InvalidFlatbufferId(arrow_format::ipc::planus::Error),
/// Invalid dictionary id
InvalidId {
/// The requested dictionary id
requested_id: i64,
},
/// Field id is not a dictionary
InvalidIdDataType {
/// The requested dictionary id
requested_id: i64,
},
/// FixedSizeBinaryArray has invalid datatype.
InvalidDataType,
}
impl From<OutOfSpecKind> for Error {
fn from(kind: OutOfSpecKind) -> Self {
Error::OutOfSpec(format!("{kind:?}"))
}
}
impl From<arrow_format::ipc::planus::Error> for Error {
fn from(error: arrow_format::ipc::planus::Error) -> Self {
Error::OutOfSpec(error.to_string())
}
}