use crate::basic::{Encoding, PageType};
use crate::errors::Result;
use crate::format::{
Encoding as TEncoding, PageEncodingStats as TPageEncodingStats, PageType as TPageType,
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct PageEncodingStats {
pub page_type: PageType,
pub encoding: Encoding,
pub count: i32,
}
pub fn try_from_thrift(thrift_encoding_stats: &TPageEncodingStats) -> Result<PageEncodingStats> {
let page_type = PageType::try_from(thrift_encoding_stats.page_type)?;
let encoding = Encoding::try_from(thrift_encoding_stats.encoding)?;
let count = thrift_encoding_stats.count;
Ok(PageEncodingStats {
page_type,
encoding,
count,
})
}
pub fn to_thrift(encoding_stats: &PageEncodingStats) -> TPageEncodingStats {
let page_type = TPageType::from(encoding_stats.page_type);
let encoding = TEncoding::from(encoding_stats.encoding);
let count = encoding_stats.count;
TPageEncodingStats {
page_type,
encoding,
count,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_page_encoding_stats_from_thrift() {
let stats = PageEncodingStats {
page_type: PageType::DATA_PAGE,
encoding: Encoding::PLAIN,
count: 1,
};
assert_eq!(try_from_thrift(&to_thrift(&stats)).unwrap(), stats);
}
}