rdf_fusion_encoding/plain_term/decoders/
graph_name.rs1use crate::TermEncoding;
2use crate::encoding::TermDecoder;
3use crate::plain_term::PlainTermEncoding;
4use crate::plain_term::decoders::DefaultPlainTermDecoder;
5use rdf_fusion_model::{GraphNameRef, TermRef, ThinResult};
6
7#[derive(Debug)]
8pub struct GraphNameRefPlainTermDecoder;
9
10impl TermDecoder<PlainTermEncoding> for GraphNameRefPlainTermDecoder {
12 type Term<'data> = GraphNameRef<'data>;
13
14 fn decode_terms(
15 array: &<PlainTermEncoding as TermEncoding>::Array,
16 ) -> impl Iterator<Item = ThinResult<Self::Term<'_>>> {
17 DefaultPlainTermDecoder::decode_terms(array).map(map_term_ref_to_graph_name_ref)
18 }
19
20 fn decode_term(
21 scalar: &<PlainTermEncoding as TermEncoding>::Scalar,
22 ) -> ThinResult<Self::Term<'_>> {
23 let term = DefaultPlainTermDecoder::decode_term(scalar);
24 map_term_ref_to_graph_name_ref(term)
25 }
26}
27
28fn map_term_ref_to_graph_name_ref(
29 term: ThinResult<TermRef<'_>>,
30) -> ThinResult<GraphNameRef<'_>> {
31 match term {
32 Ok(TermRef::NamedNode(nn)) => Ok(GraphNameRef::NamedNode(nn)),
33 Ok(TermRef::BlankNode(bnode)) => Ok(GraphNameRef::BlankNode(bnode)),
34 Ok(TermRef::Literal(_)) => panic!("Literal when extracting graph name"),
35 Err(_) => Ok(GraphNameRef::DefaultGraph),
36 }
37}