sophia_api/term/
_native_iri.rs

1use super::*;
2use mownstr::MownStr;
3use sophia_iri::{Iri, IriRef};
4use std::borrow::Borrow;
5
6impl<T> Term for Iri<T>
7where
8    T: Borrow<str>,
9{
10    type BorrowTerm<'x> = &'x Self where T: 'x;
11
12    fn kind(&self) -> TermKind {
13        TermKind::Iri
14    }
15    fn iri(&self) -> Option<IriRef<MownStr<'_>>> {
16        Some(IriRef::new_unchecked(MownStr::from_ref(self.as_str())))
17    }
18    fn borrow_term(&self) -> Self::BorrowTerm<'_> {
19        self
20    }
21}
22
23impl<T> Term for IriRef<T>
24where
25    T: Borrow<str>,
26{
27    type BorrowTerm<'x> = &'x Self where T: 'x;
28
29    fn kind(&self) -> TermKind {
30        TermKind::Iri
31    }
32    fn iri(&self) -> Option<IriRef<MownStr<'_>>> {
33        Some(IriRef::new_unchecked(MownStr::from_ref(self.as_str())))
34    }
35    fn borrow_term(&self) -> Self::BorrowTerm<'_> {
36        self
37    }
38}
39
40#[cfg(test)]
41mod test {
42    use super::*;
43
44    #[test]
45    fn iri_as_term() {
46        let iri_str = "https://example.org/";
47        let iri = Iri::new_unchecked(iri_str);
48        assert_eq!(iri.kind(), TermKind::Iri);
49        assert_eq!(iri.lexical_form(), None);
50        assert_eq!(iri.iri().unwrap().as_str(), iri_str);
51        assert_eq!(iri.borrow_term(), &iri);
52    }
53
54    #[test]
55    fn iriref_as_term() {
56        let iri_str = "#me";
57        let iriref = IriRef::new_unchecked(iri_str);
58        assert_eq!(iriref.kind(), TermKind::Iri);
59        assert_eq!(iriref.lexical_form(), None);
60        assert_eq!(iriref.iri().unwrap().as_str(), iri_str);
61        assert_eq!(iriref.borrow_term(), &iriref);
62    }
63}