1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
pub trait TypeAppParam {
type Param;
}
pub trait WithTypeArg<T: ?Sized> {
type Type: TypeApp<Self, T>;
}
pub trait TypeApp<TCon, T>:
is_type::Is<Type = <TCon as WithTypeArg<T>>::Type> + TypeAppParam
where
TCon: WithTypeArg<T> + ?Sized,
T: ?Sized,
{
}
pub struct Ref {}
pub struct Val {}
pub trait TypeAppMaybeRef<TCon, T, RefT>
where
TCon: WithTypeArg<T> + ?Sized,
T: ?Sized,
RefT: ?Sized,
{
}
impl<TCon, T, TCollection> TypeAppMaybeRef<TCon, T, Val> for TCollection
where
TCollection: TypeApp<TCon, T>,
TCon: WithTypeArg<T> + ?Sized,
T: ?Sized,
{
}
impl<TCon, T, TCollection> TypeAppMaybeRef<TCon, T, Ref> for &TCollection
where
TCollection: TypeApp<TCon, T>,
TCon: WithTypeArg<T> + ?Sized,
T: ?Sized,
{
}