laminar_core/
serialization.rs1use arrow_array::RecordBatch;
7use arrow_ipc::reader::StreamReader;
8use arrow_ipc::writer::StreamWriter;
9
10pub fn serialize_batch_stream(batch: &RecordBatch) -> Result<Vec<u8>, arrow_schema::ArrowError> {
16 let mut buf = Vec::new();
17 {
18 let mut writer = StreamWriter::try_new(&mut buf, &batch.schema())?;
19 writer.write(batch)?;
20 writer.finish()?;
21 }
22 Ok(buf)
23}
24
25pub fn deserialize_batch_stream(bytes: &[u8]) -> Result<RecordBatch, arrow_schema::ArrowError> {
31 let cursor = std::io::Cursor::new(bytes);
32 let mut reader = StreamReader::try_new(cursor, None)?;
33 reader.next().ok_or_else(|| {
34 arrow_schema::ArrowError::IpcError("no record batch in IPC stream".to_string())
35 })?
36}