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 pub fn iri(iri: IriS) -> Node {
19 Node {
20 node: Object::iri(iri),
21 }
22 }
23
24 pub fn length(&self) -> usize {
26 self.node.length()
27 }
28
29 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}