Skip to main content

flams_backend_types/
sparql.rs

1#[cfg(feature="rdf")]
2mod spql {
3    pub use ulo::sparql::*;
4}
5
6#[cfg(not(feature="rdf"))]
7mod spql {
8    #[derive(Debug, Clone)]
9    #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10    #[cfg_attr(feature = "serde", serde(untagged))]
11    pub enum SparqlResult {
12        Boolean {
13            head: SparqlResultsHead,
14            boolean: bool,
15        },
16        Bindings {
17            head: SparqlResultsHead,
18            results: SparqlResultBindings,
19        },
20    }
21
22    impl From<bool> for SparqlResult {
23        #[inline]
24        fn from(value: bool) -> Self {
25            Self::Boolean {
26                head: SparqlResultsHead::default(),
27                boolean: value,
28            }
29        }
30    }
31
32    #[derive(Debug, Clone, Default)]
33    #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
34    pub struct SparqlResultsHead {
35        #[cfg_attr(feature = "serde", serde(default))]
36        pub vars: Vec<String>,
37        #[cfg_attr(feature = "serde", serde(default))]
38        pub link: Vec<String>,
39        #[cfg_attr(feature = "serde", serde(default))]
40        pub version: Option<String>,
41    }
42
43    #[derive(Debug, Clone, Default)]
44    #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
45    pub struct SparqlResultBindings {
46        bindings: Vec<rustc_hash::FxHashMap<String, SparqlResultTerm>>,
47    }
48
49    #[derive(Debug, Clone)]
50    #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
51    #[cfg_attr(feature = "serde", serde(tag = "type"))]
52    pub enum SparqlResultTerm {
53        #[cfg_attr(feature = "serde", serde(rename = "uri"))]
54        Iri { value: String },
55        #[cfg_attr(feature = "serde", serde(rename = "literal"))]
56        Literal {
57            value: String,
58            #[cfg_attr(feature = "serde", serde(rename = "xml:lang", default))]
59            lang: Option<String>,
60            #[cfg_attr(feature = "serde", serde(rename = "its:dir", default))]
61            base_direction: Option<String>,
62            #[cfg_attr(feature = "serde", serde(default))]
63            datatype: Option<String>,
64        },
65        #[cfg_attr(feature = "serde", serde(rename = "bnode"))]
66        BlankNode { value: String },
67        #[cfg_attr(feature = "serde", serde(rename = "triple"))]
68        Triple { value: Box<SparqlResultTriple> },
69    }
70
71    #[derive(Debug, Clone)]
72    #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
73    pub struct SparqlResultTriple {
74        pub subject: SparqlResultTerm,
75        pub predicate: SparqlResultTerm,
76        pub object: SparqlResultTerm,
77    }
78}
79pub use spql::*;