pub trait ArrayBuilder: Any + Send {
    fn len(&self) -> usize;
    fn is_empty(&self) -> bool;
    fn finish(&mut self) -> ArrayRef;
    fn finish_cloned(&self) -> ArrayRef;
    fn as_any(&self) -> &dyn Any;
    fn as_any_mut(&mut self) -> &mut dyn Any;
    fn into_box_any(self: Box<Self>) -> Box<dyn Any>;
}
Expand description

Trait for dealing with different array builders at runtime

Example

// Create

let mut data_builders: Vec<Box<dyn ArrayBuilder>> = vec![
    Box::new(Float64Builder::new()),
    Box::new(Int64Builder::new()),
    Box::new(StringBuilder::new()),
];

// Fill
data_builders[0]
    .as_any_mut()
    .downcast_mut::<Float64Builder>()
    .unwrap()
    .append_value(3.14);
data_builders[1]
    .as_any_mut()
    .downcast_mut::<Int64Builder>()
    .unwrap()
    .append_value(-1);
data_builders[2]
    .as_any_mut()
    .downcast_mut::<StringBuilder>()
    .unwrap()
    .append_value("🍎");

// Finish
let array_refs: Vec<ArrayRef> = data_builders
    .iter_mut()
    .map(|builder| builder.finish())
    .collect();
assert_eq!(array_refs[0].len(), 1);
assert_eq!(array_refs[1].is_null(0), false);
assert_eq!(
    array_refs[2]
        .as_any()
        .downcast_ref::<StringArray>()
        .unwrap()
        .value(0),
    "🍎"
);

Required Methods§

Returns the number of array slots in the builder

Returns whether number of array slots is zero

Builds the array

Builds the array without resetting the underlying builder.

Returns the builder as a non-mutable Any reference.

This is most useful when one wants to call non-mutable APIs on a specific builder type. In this case, one can first cast this into a Any, and then use downcast_ref to get a reference on the specific builder.

Returns the builder as a mutable Any reference.

This is most useful when one wants to call mutable APIs on a specific builder type. In this case, one can first cast this into a Any, and then use downcast_mut to get a reference on the specific builder.

Returns the boxed builder as a box of Any.

Implementors§