srdf/
async_srdf.rs

1use std::{collections::HashSet, fmt::Display};
2
3use async_trait::async_trait;
4use std::hash::Hash;
5
6#[async_trait]
7pub trait AsyncSRDF {
8    type Subject: Display + Sync + Send;
9    type IRI: Display + Hash + Eq + Sync + Send;
10    type BNode: Display + Sync + Send;
11    type Literal: Display + Sync + Send;
12    type Term: Display + Sync + Send;
13    type Err: Display;
14
15    async fn get_predicates_subject(
16        &self,
17        subject: &Self::Subject,
18    ) -> Result<HashSet<Self::IRI>, Self::Err>;
19
20    async fn get_objects_for_subject_predicate(
21        &self,
22        subject: &Self::Subject,
23        pred: &Self::IRI,
24    ) -> Result<HashSet<Self::Term>, Self::Err>;
25
26    async fn get_subjects_for_object_predicate(
27        &self,
28        object: &Self::Term,
29        pred: &Self::IRI,
30    ) -> Result<HashSet<Self::Subject>, Self::Err>;
31}
32
33#[cfg(test)]
34mod tests {
35    use iri_s::*;
36    use std::str::FromStr;
37
38    #[test]
39    fn check_2_iris() {
40        let iri1: IriS = IriS::from_str("http://example.org/iri").unwrap();
41        let iri2 = IriS::from_str("http://example.org/iri").unwrap();
42        assert_eq!(iri1, iri2);
43    }
44}