shex_ast/
node.rs

1use iri_s::IriS;
2use rbe::Value;
3use serde::Serialize;
4use srdf::literal::Literal;
5use srdf::numeric_literal::NumericLiteral;
6use srdf::Object;
7use std::fmt::Display;
8
9impl Value for Node {}
10
11#[derive(PartialEq, Eq, Hash, Debug, Default, Clone)]
12pub struct Node {
13    node: Object,
14}
15
16impl Node {
17    /// Creates a node from an [`ÌriS`]
18    pub fn iri(iri: IriS) -> Node {
19        Node {
20            node: Object::iri(iri),
21        }
22    }
23
24    /// Returns the length of the RDF Node
25    pub fn length(&self) -> usize {
26        self.node.length()
27    }
28
29    /// Returns the numeric value of a node if it is a numeric literal
30    pub fn numeric_value(&self) -> Option<NumericLiteral> {
31        self.node.numeric_value()
32    }
33
34    pub fn as_object(&self) -> &Object {
35        &self.node
36    }
37
38    pub fn literal(lit: Literal) -> Node {
39        Node {
40            node: Object::literal(lit),
41        }
42    }
43}
44
45impl Display for Node {
46    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47        write!(f, "{}", self.node)
48    }
49}
50
51impl From<Object> for Node {
52    fn from(node: Object) -> Self {
53        Node { node }
54    }
55}
56
57impl From<IriS> for Node {
58    fn from(iri: IriS) -> Self {
59        Node { node: iri.into() }
60    }
61}
62
63impl Serialize for Node {
64    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
65    where
66        S: serde::Serializer,
67    {
68        self.node.serialize(serializer)
69    }
70}