macro_rules! downcast_integer {
($($data_type:expr),+ => ($m:path $(, $args:tt)*), $($p:pat => $fallback:expr $(,)*)*) => { ... };
}
Expand description
Given one or more expressions evaluating to an integer DataType
invokes the provided macro
m
with the corresponding integer ArrowPrimitiveType
, followed by any additional arguments
macro_rules! dictionary_key_size_helper {
($t:ty, $o:ty) => {
std::mem::size_of::<<$t as ArrowPrimitiveType>::Native>() as $o
};
}
fn dictionary_key_size(t: &DataType) -> u8 {
match t {
DataType::Dictionary(k, _) => downcast_integer! {
k.as_ref() => (dictionary_key_size_helper, u8),
_ => unreachable!(),
},
_ => u8::MAX,
}
}
assert_eq!(dictionary_key_size(&DataType::Dictionary(Box::new(DataType::Int32), Box::new(DataType::Utf8))), 4);
assert_eq!(dictionary_key_size(&DataType::Dictionary(Box::new(DataType::Int64), Box::new(DataType::Utf8))), 8);
assert_eq!(dictionary_key_size(&DataType::Dictionary(Box::new(DataType::UInt16), Box::new(DataType::Utf8))), 2);