sophia_api/term/
_native_iri.rs1use 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}