polars_io/ipc/
pl_ipc_metadata.rs1use polars_utils::IdxSize;
2
3pub static POLARS_IPC_METADATA_KEY: &str = "__POLARS_IPC_METADATA";
4
5#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct PlIpcMetadata {
8 pub record_batch_cum_len: Vec<IdxSize>,
10}
11
12impl PlIpcMetadata {
13 pub fn from_ipc_footer(metadata: &polars_arrow::io::ipc::read::FileMetadata) -> Option<Self> {
18 #[cfg(feature = "serde")]
19 {
20 let raw = metadata
21 .custom_metadata
22 .as_ref()?
23 .get(POLARS_IPC_METADATA_KEY)?;
24 serde_json::from_str::<Self>(raw)
25 .ok()
26 .filter(|md| md.record_batch_cum_len.len() == metadata.blocks.len())
28 }
29 #[cfg(not(feature = "serde"))]
30 {
31 let _ = metadata;
32 None
33 }
34 }
35
36 pub fn num_rows(&self) -> Option<IdxSize> {
38 self.record_batch_cum_len.last().copied()
39 }
40}