rdf_fusion_encoding/plain_term/encoders/
default.rs1use crate::encoding::TermEncoder;
2use crate::plain_term::{PlainTermArrayElementBuilder, PlainTermEncoding};
3use crate::{EncodingArray, TermEncoding};
4use rdf_fusion_model::DFResult;
5use rdf_fusion_model::{TermRef, ThinResult};
6
7#[derive(Debug)]
8pub struct DefaultPlainTermEncoder;
9
10impl TermEncoder<PlainTermEncoding> for DefaultPlainTermEncoder {
11 type Term<'data> = TermRef<'data>;
12
13 fn encode_terms<'data>(
14 terms: impl IntoIterator<Item = ThinResult<Self::Term<'data>>>,
15 ) -> DFResult<<PlainTermEncoding as TermEncoding>::Array> {
16 let mut value_builder = PlainTermArrayElementBuilder::default();
17 for value in terms {
18 match value {
19 Ok(TermRef::NamedNode(value)) => value_builder.append_named_node(value),
20 Ok(TermRef::BlankNode(value)) => value_builder.append_blank_node(value),
21 Ok(TermRef::Literal(value)) => value_builder.append_literal(value),
22 Err(_) => value_builder.append_null(),
23 }
24 }
25 Ok(value_builder.finish())
26 }
27
28 fn encode_term(
29 term: ThinResult<Self::Term<'_>>,
30 ) -> DFResult<<PlainTermEncoding as TermEncoding>::Scalar> {
31 Self::encode_terms([term])?.try_as_scalar(0)
32 }
33}