use parquet2::{deserialize::FixedLenBinaryPageState, error::Result, page::DataPage}; use super::dictionary::FixedLenByteArrayPageDict; use super::utils::deserialize_optional; pub fn page_to_vec( page: &DataPage, dict: Option<&FixedLenByteArrayPageDict>, ) -> Result>>> { assert_eq!(page.descriptor.max_rep_level, 0); let state = FixedLenBinaryPageState::try_new(page, dict)?; match state { FixedLenBinaryPageState::Optional(validity, values) => { deserialize_optional(validity, values.map(|x| Ok(x.to_vec()))) } FixedLenBinaryPageState::Required(values) => { Ok(values.map(|x| x.to_vec()).map(Some).collect()) } FixedLenBinaryPageState::RequiredDictionary(dict) => dict .indexes .map(|x| x.and_then(|x| dict.dict.value(x as usize).map(|x| x.to_vec()).map(Some))) .collect(), FixedLenBinaryPageState::OptionalDictionary(validity, dict) => { let values = dict .indexes .map(|x| x.and_then(|x| dict.dict.value(x as usize).map(|x| x.to_vec()))); deserialize_optional(validity, values) } } }