mod primitive;
use std::collections::VecDeque;
pub use primitive::*;
mod boolean;
pub use boolean::*;
mod utf8;
pub use utf8::*;
mod binary;
pub use binary::*;
mod fixed_size_binary;
pub use fixed_size_binary::*;
mod list;
pub use list::*;
mod fixed_size_list;
pub use fixed_size_list::*;
mod struct_;
pub use struct_::*;
mod null;
pub use null::*;
mod dictionary;
pub use dictionary::*;
mod union;
pub use union::*;
mod binview;
mod map;
pub use binview::*;
pub use map::*;
use polars_error::{PolarsResult, *};
use super::{Compression, IpcBuffer, Node, OutOfSpecKind};
use crate::datatypes::ArrowDataType;
fn try_get_field_node<'a>(
field_nodes: &mut VecDeque<Node<'a>>,
dtype: &ArrowDataType,
) -> PolarsResult<Node<'a>> {
field_nodes.pop_front().ok_or_else(|| {
polars_err!(ComputeError: "IPC: unable to fetch the field for {:?}\n\nThe file or stream is corrupted.", dtype)
})
}
fn try_get_array_length(field_node: Node, limit: Option<usize>) -> PolarsResult<usize> {
let length: usize = field_node
.length()
.try_into()
.map_err(|_| polars_err!(oos = OutOfSpecKind::NegativeFooterLength))?;
Ok(limit.map(|limit| limit.min(length)).unwrap_or(length))
}