hyphae/traits/
foreign_key.rs1pub trait IdFor<T> {
3 type MapKey;
4
5 fn map_key(&self) -> Self::MapKey;
6}
7
8impl<T, I> IdFor<T> for Option<I>
9where
10 I: IdFor<T>,
11{
12 type MapKey = Option<I::MapKey>;
13
14 fn map_key(&self) -> Self::MapKey {
15 self.as_ref().map(IdFor::map_key)
16 }
17}
18
19pub trait IdType {
21 type Parent;
22}
23
24impl<I> IdType for Option<I>
25where
26 I: IdType,
27{
28 type Parent = I::Parent;
29}
30
31pub trait HasForeignKey<T> {
35 type ForeignKey: IdFor<T> + IdType<Parent = T>;
36
37 fn fk(&self) -> Self::ForeignKey;
38}
39
40pub trait JoinKeyFrom<R> {
42 fn join_key_from(value: &R) -> Self;
43}
44
45impl<T: Clone> JoinKeyFrom<T> for T {
46 fn join_key_from(value: &T) -> Self {
47 value.clone()
48 }
49}
50
51impl<T: Clone> JoinKeyFrom<T> for Option<T> {
52 fn join_key_from(value: &T) -> Self {
53 Some(value.clone())
54 }
55}