Skip to content

Commit 527a7a7

Browse files
committed
Add try_downcast_array helper
1 parent c16b929 commit 527a7a7

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

crates/utils/re_arrow_util/src/arrays.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ pub trait ArrowArrayDowncastRef<'a>: 'a {
2020
/// Similar to `downcast_array_ref`, but returns an error in case the downcast
2121
/// returns `None`.
2222
fn try_downcast_array_ref<T: Array + 'static>(self) -> Result<&'a T, ArrowError>;
23+
24+
/// Similar to `downcast_array_ref`, but returns an error in case the downcast
25+
/// returns `None`.
26+
fn try_downcast_array<T: Array + Clone + 'static>(self) -> Result<T, ArrowError>;
2327
}
2428

2529
impl<'a> ArrowArrayDowncastRef<'a> for &'a dyn Array {
@@ -36,6 +40,12 @@ impl<'a> ArrowArrayDowncastRef<'a> for &'a dyn Array {
3640
))
3741
})
3842
}
43+
44+
/// Similar to `downcast_array_ref`, but returns an error in case the downcast
45+
/// returns `None`.
46+
fn try_downcast_array<T: Array + Clone + 'static>(self) -> Result<T, ArrowError> {
47+
Ok(self.try_downcast_array_ref::<T>()?.clone())
48+
}
3949
}
4050

4151
impl<'a> ArrowArrayDowncastRef<'a> for &'a ArrayRef {
@@ -52,6 +62,12 @@ impl<'a> ArrowArrayDowncastRef<'a> for &'a ArrayRef {
5262
))
5363
})
5464
}
65+
66+
/// Similar to `downcast_array_ref`, but returns an error in case the downcast
67+
/// returns `None`.
68+
fn try_downcast_array<T: Array + Clone + 'static>(self) -> Result<T, ArrowError> {
69+
Ok(self.try_downcast_array_ref::<T>()?.clone())
70+
}
5571
}
5672

5773
// ---------------------------------------------------------------------------------

0 commit comments

Comments
 (0)