@@ -42,135 +42,67 @@ fn matches_impl(cmp: &Comparator, ver: &Version) -> bool {
42
42
}
43
43
44
44
fn matches_exact ( cmp : & Comparator , ver : & Version ) -> bool {
45
- if ver. major != cmp. major {
46
- return false ;
47
- }
48
-
49
- if let Some ( minor) = cmp. minor {
50
- if ver. minor != minor {
51
- return false ;
52
- }
53
- }
54
-
55
- if let Some ( patch) = cmp. patch {
56
- if ver. patch != patch {
57
- return false ;
58
- }
59
- }
60
-
61
- ver. pre == cmp. pre
45
+ ver. major == cmp. major
46
+ && cmp. minor . map_or ( true , |minor| ver. minor == minor)
47
+ && cmp. patch . map_or ( true , |patch| ver. patch == patch)
48
+ && ver. pre == cmp. pre
62
49
}
63
50
64
51
fn matches_greater ( cmp : & Comparator , ver : & Version ) -> bool {
65
52
if ver. major != cmp. major {
66
- return ver. major > cmp. major ;
53
+ ver. major > cmp. major
54
+ } else if let Some ( minor) = cmp. minor . filter ( |& minor| ver. minor != minor) {
55
+ ver. minor > minor
56
+ } else if let Some ( patch) = cmp. patch . filter ( |& patch| ver. patch != patch) {
57
+ ver. patch > patch
58
+ } else {
59
+ ver. pre > cmp. pre
67
60
}
68
-
69
- match cmp. minor {
70
- None => return false ,
71
- Some ( minor) => {
72
- if ver. minor != minor {
73
- return ver. minor > minor;
74
- }
75
- }
76
- }
77
-
78
- match cmp. patch {
79
- None => return false ,
80
- Some ( patch) => {
81
- if ver. patch != patch {
82
- return ver. patch > patch;
83
- }
84
- }
85
- }
86
-
87
- ver. pre > cmp. pre
88
61
}
89
62
90
63
fn matches_less ( cmp : & Comparator , ver : & Version ) -> bool {
91
64
if ver. major != cmp. major {
92
- return ver. major < cmp. major ;
65
+ ver. major < cmp. major
66
+ } else if let Some ( minor) = cmp. minor . filter ( |& minor| ver. minor != minor) {
67
+ ver. minor < minor
68
+ } else if let Some ( patch) = cmp. patch . filter ( |& patch| ver. patch != patch) {
69
+ ver. patch < patch
70
+ } else {
71
+ ver. pre < cmp. pre
93
72
}
94
-
95
- match cmp. minor {
96
- None => return false ,
97
- Some ( minor) => {
98
- if ver. minor != minor {
99
- return ver. minor < minor;
100
- }
101
- }
102
- }
103
-
104
- match cmp. patch {
105
- None => return false ,
106
- Some ( patch) => {
107
- if ver. patch != patch {
108
- return ver. patch < patch;
109
- }
110
- }
111
- }
112
-
113
- ver. pre < cmp. pre
114
73
}
115
74
116
75
fn matches_tilde ( cmp : & Comparator , ver : & Version ) -> bool {
117
- if ver. major != cmp. major {
118
- return false ;
119
- }
120
-
121
- if let Some ( minor) = cmp. minor {
122
- if ver. minor != minor {
123
- return false ;
124
- }
125
- }
126
-
127
- if let Some ( patch) = cmp. patch {
128
- if ver. patch != patch {
129
- return ver. patch > patch;
130
- }
76
+ if !ver. pre . is_empty ( ) || !cmp. pre . is_empty ( ) {
77
+ matches_exact ( cmp, ver)
78
+ } else if ver. major != cmp. major {
79
+ false
80
+ } else if cmp. minor . map_or ( false , |minor| ver. minor != minor) {
81
+ false
82
+ } else if let Some ( patch) = cmp. patch . filter ( |& patch| ver. patch != patch) {
83
+ ver. patch > patch
84
+ } else {
85
+ true
131
86
}
132
-
133
- ver. pre >= cmp. pre
134
87
}
135
88
136
89
fn matches_caret ( cmp : & Comparator , ver : & Version ) -> bool {
137
- if ver. major != cmp. major {
138
- return false ;
139
- }
140
-
141
- let minor = match cmp. minor {
142
- None => return true ,
143
- Some ( minor) => minor,
144
- } ;
145
-
146
- let patch = match cmp. patch {
147
- None => {
148
- if cmp. major > 0 {
149
- return ver. minor >= minor;
150
- } else {
151
- return ver. minor == minor;
152
- }
90
+ if !ver. pre . is_empty ( ) || !cmp. pre . is_empty ( ) {
91
+ matches_exact ( cmp, ver)
92
+ } else if ver. major != cmp. major {
93
+ false
94
+ } else if let Some ( minor) = cmp. minor . filter ( |& minor| ver. minor != minor) {
95
+ // if major is 0 than minor is considered as major
96
+ if cmp. major == 0 {
97
+ false
98
+ } else {
99
+ ver. minor > minor
153
100
}
154
- Some ( patch) => patch,
155
- } ;
156
-
157
- if cmp. major > 0 {
158
- if ver. minor != minor {
159
- return ver. minor > minor;
160
- } else if ver. patch != patch {
161
- return ver. patch > patch;
162
- }
163
- } else if minor > 0 {
164
- if ver. minor != minor {
165
- return false ;
166
- } else if ver. patch != patch {
167
- return ver. patch > patch;
168
- }
169
- } else if ver. minor != minor || ver. patch != patch {
170
- return false ;
101
+ } else if let Some ( patch) = cmp. patch . filter ( |& patch| ver. patch != patch) {
102
+ ver. patch > patch
103
+ } else {
104
+ true
171
105
}
172
-
173
- ver. pre >= cmp. pre
174
106
}
175
107
176
108
fn pre_is_compatible ( cmp : & Comparator , ver : & Version ) -> bool {
0 commit comments