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}