typewit/base_type_wit/
meta_base_type_wit.rs1use crate::{MakeTypeWitness, TypeWitnessTypeArg, TypeEq, TypeNe, TypeCmp};
2
3use core::fmt::{self, Debug};
4
5#[cfg_attr(feature = "docsrs", doc(cfg(feature = "rust_1_61")))]
8pub enum MetaBaseTypeWit<L: ?Sized, R: ?Sized, W> {
9 Eq(TypeEq<W, TypeEq<L, R>>),
11 Ne(TypeEq<W, TypeNe<L, R>>),
13 Cmp(TypeEq<W, TypeCmp<L, R>>),
15}
16
17impl<L: ?Sized, R: ?Sized, W> MetaBaseTypeWit<L, R, W> {
18 pub const fn to_cmp(self, witness: W) -> TypeCmp<L, R> {
20 match self {
21 Self::Cmp(te) => te.to_right(witness),
22 Self::Eq(te) => TypeCmp::Eq(te.to_right(witness)),
23 Self::Ne(te) => TypeCmp::Ne(te.to_right(witness)),
24 }
25 }
26}
27
28
29impl<L: ?Sized, R: ?Sized, W> Copy for MetaBaseTypeWit<L, R, W> {}
30
31impl<L: ?Sized, R: ?Sized, W> Clone for MetaBaseTypeWit<L, R, W> {
32 fn clone(&self) -> Self {
33 *self
34 }
35}
36
37impl<L: ?Sized, R: ?Sized, W> Debug for MetaBaseTypeWit<L, R, W> {
38 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
39 let isa = match self {
40 Self::Eq{..} => "TypeEq",
41 Self::Ne{..} => "TypeNe",
42 Self::Cmp{..} => "TypeCmp",
43 };
44
45 f.write_str(isa)
46 }
47}
48
49
50impl<L: ?Sized, R: ?Sized, W> TypeWitnessTypeArg for MetaBaseTypeWit<L, R, W> {
51 type Arg = W;
52}
53
54impl<L: ?Sized, R: ?Sized> MakeTypeWitness for MetaBaseTypeWit<L, R, TypeCmp<L, R>> {
55 const MAKE: Self = Self::Cmp(TypeEq::NEW);
56}
57
58impl<L: ?Sized, R: ?Sized> MakeTypeWitness for MetaBaseTypeWit<L, R, TypeEq<L, R>> {
59 const MAKE: Self = Self::Eq(TypeEq::NEW);
60}
61
62impl<L: ?Sized, R: ?Sized> MakeTypeWitness for MetaBaseTypeWit<L, R, TypeNe<L, R>> {
63 const MAKE: Self = Self::Ne(TypeEq::NEW);
64}