Skip to content

Commit dceedc2

Browse files
committed
core/vector: Improve error handling in vector_types.rs
1 parent 5d662e7 commit dceedc2

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

core/vector/vector_types.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,9 @@ impl<'a> Vector<'a> {
128128
) -> Result<Self> {
129129
let owned_slice = owned.as_deref();
130130
let refer_slice = refer.as_ref().map(|&x| x);
131-
let data = owned_slice.unwrap_or_else(|| refer_slice.unwrap());
131+
let data = owned_slice.or(refer_slice).ok_or_else(|| {
132+
LimboError::InternalError("Vector must have either owned or refer data".to_string())
133+
})?;
132134
match vector_type {
133135
VectorType::Float32Dense => {
134136
if data.len() % 4 != 0 {
@@ -167,7 +169,12 @@ impl<'a> Vector<'a> {
167169
}
168170
let original_len = data.len();
169171
let dims_bytes = &data[original_len - 4..];
170-
let dims = u32::from_le_bytes(dims_bytes.try_into().unwrap()) as usize;
172+
let dims = u32::from_le_bytes([
173+
dims_bytes[0],
174+
dims_bytes[1],
175+
dims_bytes[2],
176+
dims_bytes[3],
177+
]) as usize;
171178
let owned = owned.map(|mut x| {
172179
x.truncate(original_len - 4);
173180
x
@@ -187,17 +194,25 @@ impl<'a> Vector<'a> {
187194
pub fn bin_len(&self) -> usize {
188195
let owned = self.owned.as_ref().map(|x| x.len());
189196
let refer = self.refer.as_ref().map(|x| x.len());
190-
owned.unwrap_or_else(|| refer.unwrap())
197+
owned
198+
.or(refer)
199+
.expect("Vector invariant: exactly one of owned or refer must be Some")
191200
}
192201

193202
pub fn bin_data(&'a self) -> &'a [u8] {
194203
let owned = self.owned.as_deref();
195204
let refer = self.refer.as_ref().map(|&x| x);
196-
owned.unwrap_or_else(|| refer.unwrap())
205+
owned
206+
.or(refer)
207+
.expect("Vector invariant: exactly one of owned or refer must be Some")
197208
}
198209

199210
pub fn bin_eject(self) -> Vec<u8> {
200-
self.owned.unwrap_or_else(|| self.refer.unwrap().to_vec())
211+
self.owned.unwrap_or_else(|| {
212+
self.refer
213+
.expect("Vector invariant: exactly one of owned or refer must be Some")
214+
.to_vec()
215+
})
201216
}
202217

203218
/// # Safety

0 commit comments

Comments
 (0)