sophia_api/term/
_native_iri.rs

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