Path: blob/main/crates/polars-parquet/src/parquet/write/indexes/write.rs
6940 views
use std::io::Write;12#[cfg(feature = "async")]3use futures::AsyncWrite;4use polars_parquet_format::thrift::protocol::TCompactOutputProtocol;5#[cfg(feature = "async")]6use polars_parquet_format::thrift::protocol::TCompactOutputStreamProtocol;78use super::serialize::{serialize_column_index, serialize_offset_index};9use crate::parquet::error::ParquetResult;10use crate::parquet::write::page::PageWriteSpec;1112pub fn write_column_index<W: Write>(writer: &mut W, pages: &[PageWriteSpec]) -> ParquetResult<u64> {13let index = serialize_column_index(pages)?;14let mut protocol = TCompactOutputProtocol::new(writer);15Ok(index.write_to_out_protocol(&mut protocol)? as u64)16}1718#[cfg(feature = "async")]19#[cfg_attr(docsrs, doc(cfg(feature = "async")))]20pub async fn write_column_index_async<W: AsyncWrite + Unpin + Send>(21writer: &mut W,22pages: &[PageWriteSpec],23) -> ParquetResult<u64> {24let index = serialize_column_index(pages)?;25let mut protocol = TCompactOutputStreamProtocol::new(writer);26Ok(index.write_to_out_stream_protocol(&mut protocol).await? as u64)27}2829pub fn write_offset_index<W: Write>(writer: &mut W, pages: &[PageWriteSpec]) -> ParquetResult<u64> {30let index = serialize_offset_index(pages)?;31let mut protocol = TCompactOutputProtocol::new(&mut *writer);32Ok(index.write_to_out_protocol(&mut protocol)? as u64)33}3435#[cfg(feature = "async")]36#[cfg_attr(docsrs, doc(cfg(feature = "async")))]37pub async fn write_offset_index_async<W: AsyncWrite + Unpin + Send>(38writer: &mut W,39pages: &[PageWriteSpec],40) -> ParquetResult<u64> {41let index = serialize_offset_index(pages)?;42let mut protocol = TCompactOutputStreamProtocol::new(&mut *writer);43Ok(index.write_to_out_stream_protocol(&mut protocol).await? as u64)44}454647