serde_arrow/internal/
array_builder.rs1use serde::Serialize;
2
3use marrow::array::Array;
4
5use crate::internal::{
6 error::Result, schema::SerdeArrowSchema, serialization::OuterSequenceBuilder,
7};
8
9#[cfg_attr(has_arrow, doc = r"- [`ArrayBuilder::from_arrow`]")]
16#[cfg_attr(has_arrow2, doc = r"- [`ArrayBuilder::from_arrow2`]")]
17#[cfg_attr(has_arrow, doc = r"- [`ArrayBuilder::to_record_batch`]")]
21#[cfg_attr(has_arrow, doc = r"- [`ArrayBuilder::to_arrow`]")]
22#[cfg_attr(has_arrow2, doc = r"- [`ArrayBuilder::to_arrow2`]")]
23pub struct ArrayBuilder {
52 pub(crate) builder: OuterSequenceBuilder,
53 #[allow(unused)]
54 pub(crate) schema: SerdeArrowSchema,
55}
56
57impl ArrayBuilder {
58 pub fn new(schema: SerdeArrowSchema) -> Result<Self> {
60 Ok(Self {
61 builder: OuterSequenceBuilder::new(&schema)?,
62 schema,
63 })
64 }
65}
66
67impl std::fmt::Debug for ArrayBuilder {
68 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
69 write!(f, "ArrayBuilder {{ .. }}")
70 }
71}
72
73impl ArrayBuilder {
74 pub fn push<T: Serialize>(&mut self, item: T) -> Result<()> {
77 self.builder.push(item)
78 }
79
80 pub fn extend<T: Serialize>(&mut self, items: T) -> Result<()> {
83 self.builder.extend(items)
84 }
85
86 pub(crate) fn build_arrays(&mut self) -> Result<Vec<Array>> {
87 let mut arrays = Vec::new();
88 for field in self.builder.take_records()? {
89 arrays.push(field.into_array()?);
90 }
91 Ok(arrays)
92 }
93}
94
95impl std::convert::AsRef<ArrayBuilder> for ArrayBuilder {
96 fn as_ref(&self) -> &ArrayBuilder {
97 self
98 }
99}
100
101impl std::convert::AsMut<ArrayBuilder> for ArrayBuilder {
102 fn as_mut(&mut self) -> &mut ArrayBuilder {
103 self
104 }
105}
106
107#[allow(unused)]
108const _: () = {
109 trait AssertSendSync: Send + Sync {}
110 impl AssertSendSync for ArrayBuilder {}
111};