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