rdf_types/term/
maybe_blank.rs1use crate::{Id, Term};
2
3pub trait MaybeBlankId {
5 type BlankId;
7}
8
9impl<I, B> MaybeBlankId for Id<I, B> {
10 type BlankId = B;
11}
12
13impl<I: MaybeBlankId, L> MaybeBlankId for Term<I, L> {
14 type BlankId = I::BlankId;
15}
16
17pub trait TryAsBlankId: MaybeBlankId {
20 fn try_as_blank(&self) -> Option<&Self::BlankId>;
22
23 fn is_blank(&self) -> bool {
24 self.try_as_blank().is_some()
25 }
26}
27
28impl<I, B> TryAsBlankId for Id<I, B> {
29 fn try_as_blank(&self) -> Option<&Self::BlankId> {
30 self.as_blank()
31 }
32}
33
34impl<I: TryAsBlankId, L> TryAsBlankId for Term<I, L> {
35 fn try_as_blank(&self) -> Option<&Self::BlankId> {
36 self.as_blank()
37 }
38}
39
40pub trait TryIntoBlankId: MaybeBlankId + Sized {
42 fn try_into_blank(self) -> Result<Self::BlankId, Self>;
43}
44
45impl<I, B> TryIntoBlankId for Id<I, B> {
46 fn try_into_blank(self) -> Result<Self::BlankId, Self> {
47 self.try_into_blank().map_err(Self::Iri)
48 }
49}
50
51impl<I: TryIntoBlankId, L> TryIntoBlankId for Term<I, L> {
52 fn try_into_blank(self) -> Result<Self::BlankId, Self> {
53 self.try_into_blank()
54 }
55}
56
57pub trait FromBlankId: MaybeBlankId {
59 fn from_blank(b: Self::BlankId) -> Self;
61}
62
63impl<I, B> FromBlankId for Id<I, B> {
64 fn from_blank(b: Self::BlankId) -> Self {
65 Self::Blank(b)
66 }
67}
68
69impl<I: FromBlankId, L> FromBlankId for Term<I, L> {
70 fn from_blank(b: Self::BlankId) -> Self {
71 Self::Id(I::from_blank(b))
72 }
73}