rdf_fusion_encoding/plain_term/
builder.rs1use crate::plain_term::{PlainTermArray, PlainTermEncoding};
2use datafusion::arrow::array::{Array, StringArray, StructArray};
3use std::sync::Arc;
4
5pub struct PlainTermArrayBuilder {
7 term_types: Arc<dyn Array>,
8 values: Arc<dyn Array>,
9 data_types: Option<Arc<dyn Array>>,
10 language_tags: Option<Arc<dyn Array>>,
11}
12
13impl PlainTermArrayBuilder {
14 pub fn new(term_types: Arc<dyn Array>, values: Arc<dyn Array>) -> Self {
15 Self {
16 term_types,
17 values,
18 data_types: None,
19 language_tags: None,
20 }
21 }
22
23 pub fn with_data_types(mut self, data_types: Arc<dyn Array>) -> Self {
24 self.data_types = Some(data_types);
25 self
26 }
27
28 pub fn with_language_tags(mut self, language_tags: Arc<dyn Array>) -> Self {
29 self.language_tags = Some(language_tags);
30 self
31 }
32
33 pub fn finish(self) -> PlainTermArray {
34 let len = self.term_types.len();
35 let nulls = self.term_types.nulls().cloned();
36 let struct_array = StructArray::new(
37 PlainTermEncoding::fields(),
38 vec![
39 self.term_types,
40 self.values,
41 self.data_types
42 .unwrap_or_else(|| Arc::new(StringArray::new_null(len))),
43 self.language_tags
44 .unwrap_or_else(|| Arc::new(StringArray::new_null(len))),
45 ],
46 nulls,
47 );
48 PlainTermArray::new_unchecked(Arc::new(struct_array))
49 }
50}