rdf_fusion_encoding/object_id/
builder.rs1use crate::TermEncoding;
2use crate::object_id::{ObjectIdArray, ObjectIdEncoding};
3use datafusion::arrow::array::UInt32Builder;
4use rdf_fusion_model::ObjectId;
5use std::sync::Arc;
6
7pub struct ObjectIdArrayBuilder {
10 encoding: ObjectIdEncoding,
12 builder: UInt32Builder,
14}
15
16impl ObjectIdArrayBuilder {
17 pub fn new(encoding: ObjectIdEncoding) -> Self {
19 let builder = UInt32Builder::new();
20 Self { encoding, builder }
21 }
22
23 pub fn append_null(&mut self) {
25 self.builder.append_null()
26 }
27
28 pub fn append_object_id(&mut self, term: ObjectId) {
30 self.builder.append_value(term.0)
31 }
32
33 pub fn append_object_id_opt(&mut self, term: Option<ObjectId>) {
35 self.builder.append_option(term.map(|t| t.0))
36 }
37
38 #[allow(clippy::expect_used, reason = "Programming error")]
39 pub fn finish(mut self) -> ObjectIdArray {
40 let encoding = self.encoding;
41 let array = Arc::new(self.builder.finish());
42 encoding.try_new_array(array).expect("Builder fixed")
43 }
44}