1use sealed::Sealed;
2
3pub trait TypeMarker: Sealed {}
5
6impl TypeMarker for () {}
7impl Sealed for () {}
8
9macro_rules! gen_markers {
10 {
11 $(
12 $(#[$meta:meta])*
13 $($descriptive_words:literal)? $marker:ident
14 )*
15 } => {
16 $(
17 $(
18 #[doc = concat!(
19 "Marker for ",
20 $descriptive_words,
21 " types"
22 )]
23 #[doc = ""]
24 )?
25 $(#[$meta])*
26 pub struct $marker {
27 __private: ()
28 }
29
30 impl TypeMarker for $marker {}
31 impl Sealed for $marker {}
32 )*
33 }
34}
35
36gen_markers! {
37 "any"
38 AnyMarker
39
40 "bigint"
41 BigIntMarker
42
43 "boolean"
44 BooleanMarker
45
46 "number"
47 NumberMarker
48
49 "object"
50 ObjectMarker
51
52 "string"
53 StringMarker
54
55 "symbol"
56 SymbolMarker
57
58 "undefined"
59 UndefinedMarker
60
61 "null"
62 NullMarker
63}
64
65mod sealed {
66 pub trait Sealed {}
67}