flams_backend_types/
sparql.rs1#[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::*;