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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#[macro_export]
macro_rules! morq {
(expect( $VALUE:expr ) . $($rest:tt)*) => {
morq!(Unknown, false, $VALUE, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, be . $($rest:tt)*) => {
morq!($ACTIVATOR, $NOT, $VALUE, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, to . $($rest:tt)*) => {
morq!($ACTIVATOR, $NOT, $VALUE, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, have . $($rest:tt)*) => {
morq!($ACTIVATOR, $NOT, $VALUE, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, not . $($rest:tt)*) => {
morq!($ACTIVATOR, !$NOT, $VALUE, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, true ( ) $($rest:tt)*) => {
morq!(Equal, $NOT, $VALUE, true, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, false ( ) $($rest:tt)*) => {
morq!(Equal, $NOT, $VALUE, false, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, ok ( ) $($rest:tt)*) => {
morq!(ResultCheck, $NOT, $VALUE.into_iter(), 0, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, err ( ) $($rest:tt)*) => {
morq!(ResultCheck, !$NOT, $VALUE.into_iter(), 0, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, equal ( $TARGET:expr ) $($rest:tt)*) => {
morq!(Equal, $NOT, $VALUE, $TARGET, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, close ( $TARGET:expr ) $($rest:tt)*) => {
morq!(Close, $NOT, $VALUE, $TARGET, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, empty ( ) $($rest:tt)*) => {
morq!(Empty, $NOT, $VALUE, 0, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, lengthOf ( $TARGET:expr ) $($rest:tt)*) => {
morq!(LengthOf, $NOT, $VALUE, $TARGET, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, contain ( $TARGET:expr ) $($rest:tt)*) => {
morq!(Contain, $NOT, $VALUE, $TARGET, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, a ( $TARGET:ty ) $($rest:tt)*) => {
morq!(TypeMatch, $NOT, $VALUE, $TARGET, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, an ( $TARGET:ty ) $($rest:tt)*) => {
morq!(TypeMatch, $NOT, $VALUE, $TARGET, $($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, $TARGET:ty, ; $($rest:tt)*) => {
evaluate(&$ACTIVATOR::new(), $VALUE, ::std::any::TypeId::of::<$TARGET>(), $NOT);
morq!($($rest)*);
};
($ACTIVATOR:ident, $NOT:expr, $VALUE:expr, $TARGET:expr, ; $($rest:tt)*) => {
evaluate(&$ACTIVATOR::new(), $VALUE, $TARGET, $NOT);
morq!($($rest)*);
};
() => ();
}