@@ -8,9 +8,12 @@ use super::VersionError;
88
99#[ derive( Copy ,  Clone ,  Debug ) ]  
1010pub  enum  PartialVersion  { 
11-     A ( u32 ,  u32 ,  u32 ) , 
12-     B ( u32 ,  u32 ) , 
13-     C ( u32 ) , 
11+     /// Major, Minor, Patch. 
12+      Mmp ( u32 ,  u32 ,  u32 ) , 
13+     /// Major, Minor. 
14+      Mm ( u32 ,  u32 ) , 
15+     /// Major. 
16+      M ( u32 ) , 
1417} 
1518
1619impl  PartialVersion  { 
@@ -23,10 +26,10 @@ impl PartialVersion {
2326     #[ allow( dead_code) ]  
2427    pub  fn  sort_key ( & self )  -> ( u32 ,  Option < u32 > ,  Option < u32 > )  { 
2528        use  PartialVersion :: * ; 
26-         match  self  { 
27-             A ( a,  b,  c)  => ( * a,  Some ( * b) ,  Some ( * c) ) , 
28-             B ( a,  b)  => ( * a,  Some ( * b) ,  None ) , 
29-             C ( a)  => ( * a,  None ,  None ) , 
29+         match  * self  { 
30+             Mmp ( a,  b,  c)  => ( a,  Some ( b) ,  Some ( c) ) , 
31+             Mm ( a,  b)  => ( a,  Some ( b) ,  None ) , 
32+             M ( a)  => ( a,  None ,  None ) , 
3033        } 
3134    } 
3235} 
@@ -41,25 +44,25 @@ impl PartialOrd for PartialVersion {
4144    fn  partial_cmp ( & self ,  other :  & Self )  -> Option < std:: cmp:: Ordering >  { 
4245        use  PartialVersion :: * ; 
4346        match  ( * self ,  * other)  { 
44-             ( A ( x1,  x2,  x3) ,  A ( y1,  y2,  y3) )  => ( x1,  x2,  x3) . partial_cmp ( & ( y1,  y2,  y3) ) , 
45-             ( A ( x1,  x2,  x3) ,  B ( y1,  y2) )  => ( x1,  x2,  x3) . partial_cmp ( & ( y1,  y2,  0 ) ) , 
46-             ( A ( x1,  x2,  x3) ,  C ( y1) )  => ( x1,  x2,  x3) . partial_cmp ( & ( y1,  0 ,  0 ) ) , 
47-             ( B ( x1,  x2) ,  A ( y1,  y2,  y3) )  => ( x1,  x2,  0 ) . partial_cmp ( & ( y1,  y2,  y3) ) , 
48-             ( B ( x1,  x2) ,  B ( y1,  y2) )  => ( x1,  x2) . partial_cmp ( & ( y1,  y2) ) , 
49-             ( B ( x1,  x2) ,  C ( y1) )  => ( x1,  x2) . partial_cmp ( & ( y1,  0 ) ) , 
50-             ( C ( x1) ,  A ( y1,  y2,  y3) )  => ( x1,  0 ,  0 ) . partial_cmp ( & ( y1,  y2,  y3) ) , 
51-             ( C ( x1) ,  B ( y1,  y2) )  => ( x1,  0 ) . partial_cmp ( & ( y1,  y2) ) , 
52-             ( C ( x1) ,  C ( y1) )  => x1. partial_cmp ( & y1) , 
47+             ( Mmp ( x1,  x2,  x3) ,  Mmp ( y1,  y2,  y3) )  => ( x1,  x2,  x3) . partial_cmp ( & ( y1,  y2,  y3) ) , 
48+             ( Mmp ( x1,  x2,  x3) ,  Mm ( y1,  y2) )  => ( x1,  x2,  x3) . partial_cmp ( & ( y1,  y2,  0 ) ) , 
49+             ( Mmp ( x1,  x2,  x3) ,  M ( y1) )  => ( x1,  x2,  x3) . partial_cmp ( & ( y1,  0 ,  0 ) ) , 
50+             ( Mm ( x1,  x2) ,  Mmp ( y1,  y2,  y3) )  => ( x1,  x2,  0 ) . partial_cmp ( & ( y1,  y2,  y3) ) , 
51+             ( Mm ( x1,  x2) ,  Mm ( y1,  y2) )  => ( x1,  x2) . partial_cmp ( & ( y1,  y2) ) , 
52+             ( Mm ( x1,  x2) ,  M ( y1) )  => ( x1,  x2) . partial_cmp ( & ( y1,  0 ) ) , 
53+             ( M ( x1) ,  Mmp ( y1,  y2,  y3) )  => ( x1,  0 ,  0 ) . partial_cmp ( & ( y1,  y2,  y3) ) , 
54+             ( M ( x1) ,  Mm ( y1,  y2) )  => ( x1,  0 ) . partial_cmp ( & ( y1,  y2) ) , 
55+             ( M ( x1) ,  M ( y1) )  => x1. partial_cmp ( & y1) , 
5356        } 
5457    } 
5558} 
5659
5760impl  fmt:: Display  for  PartialVersion  { 
5861    fn  fmt ( & self ,  fmt :  & mut  fmt:: Formatter )  -> fmt:: Result  { 
5962        match  self  { 
60-             Self :: A ( a,  b,  c)  => fmt. pad ( & format ! ( "{}.{}.{}" ,  a,  b,  c) ) , 
61-             Self :: B ( a,  b)  => fmt. pad ( & format ! ( "{}.{}" ,  a,  b) ) , 
62-             Self :: C ( a)  => fmt. pad ( & format ! ( "{}" ,  a) ) , 
63+             Self :: Mmp ( a,  b,  c)  => fmt. pad ( & format ! ( "{}.{}.{}" ,  a,  b,  c) ) , 
64+             Self :: Mm ( a,  b)  => fmt. pad ( & format ! ( "{}.{}" ,  a,  b) ) , 
65+             Self :: M ( a)  => fmt. pad ( & format ! ( "{}" ,  a) ) , 
6366        } 
6467    } 
6568} 
@@ -75,9 +78,9 @@ impl FromStr for PartialVersion {
7578                caps. get ( 2 ) . and_then ( |n| n. as_str ( ) . parse :: < u32 > ( ) . ok ( ) ) , 
7679                caps. get ( 3 ) . and_then ( |n| n. as_str ( ) . parse :: < u32 > ( ) . ok ( ) ) , 
7780            )  { 
78-                 ( Some ( a) ,  Some ( b) ,  Some ( c) )  => Ok ( Self :: A ( a,  b,  c) ) , 
79-                 ( Some ( a) ,  Some ( b) ,  _)  => Ok ( Self :: B ( a,  b) ) , 
80-                 ( Some ( a) ,  _,  _)  => Ok ( Self :: C ( a) ) , 
81+                 ( Some ( a) ,  Some ( b) ,  Some ( c) )  => Ok ( Self :: Mmp ( a,  b,  c) ) , 
82+                 ( Some ( a) ,  Some ( b) ,  _)  => Ok ( Self :: Mm ( a,  b) ) , 
83+                 ( Some ( a) ,  _,  _)  => Ok ( Self :: M ( a) ) , 
8184                _ => Err ( VersionError :: BadlyFormed ) , 
8285            } , 
8386            None  => Err ( VersionError :: Missing ) , 
@@ -95,12 +98,12 @@ mod tests {
9598
9699    #[ test]  
97100    fn  parses_version_below_10 ( )  { 
98-         assert_eq ! ( Ok ( A ( 9 ,  6 ,  17 ) ) ,  "9.6.17" . parse( ) ) ; 
101+         assert_eq ! ( Ok ( Mmp ( 9 ,  6 ,  17 ) ) ,  "9.6.17" . parse( ) ) ; 
99102    } 
100103
101104    #[ test]  
102105    fn  parses_version_above_10 ( )  { 
103-         assert_eq ! ( Ok ( B ( 12 ,  2 ) ) ,  "12.2" . parse( ) ) ; 
106+         assert_eq ! ( Ok ( Mm ( 12 ,  2 ) ) ,  "12.2" . parse( ) ) ; 
104107    } 
105108
106109    #[ test]  
@@ -116,26 +119,26 @@ mod tests {
116119
117120    #[ test]  
118121    fn  displays_version_below_10 ( )  { 
119-         assert_eq ! ( "9.6.17" ,  format!( "{}" ,  A ( 9 ,  6 ,  17 ) ) ) ; 
122+         assert_eq ! ( "9.6.17" ,  format!( "{}" ,  Mmp ( 9 ,  6 ,  17 ) ) ) ; 
120123    } 
121124
122125    #[ test]  
123126    fn  displays_version_above_10 ( )  { 
124-         assert_eq ! ( "12.2" ,  format!( "{}" ,  B ( 12 ,  2 ) ) ) ; 
127+         assert_eq ! ( "12.2" ,  format!( "{}" ,  Mm ( 12 ,  2 ) ) ) ; 
125128    } 
126129
127130    #[ test]  
128131    fn  partial_ord_works_as_expected ( )  { 
129132        let  mut  versions = vec ! [ 
130-             A ( 9 ,  10 ,  11 ) , 
131-             A ( 9 ,  10 ,  12 ) , 
132-             B ( 8 ,  11 ) , 
133-             B ( 9 ,  11 ) , 
134-             B ( 9 ,  12 ) , 
135-             B ( 10 ,  11 ) , 
136-             C ( 8 ) , 
137-             C ( 9 ) , 
138-             C ( 11 ) , 
133+             Mmp ( 9 ,  10 ,  11 ) , 
134+             Mmp ( 9 ,  10 ,  12 ) , 
135+             Mm ( 8 ,  11 ) , 
136+             Mm ( 9 ,  11 ) , 
137+             Mm ( 9 ,  12 ) , 
138+             Mm ( 10 ,  11 ) , 
139+             M ( 8 ) , 
140+             M ( 9 ) , 
141+             M ( 11 ) , 
139142        ] ; 
140143        let  mut  rng = thread_rng ( ) ; 
141144        for  _ in  0 ..1000  { 
@@ -144,15 +147,15 @@ mod tests {
144147            assert_eq ! ( 
145148                versions, 
146149                vec![ 
147-                     C ( 8 ) , 
148-                     B ( 8 ,  11 ) , 
149-                     C ( 9 ) , 
150-                     A ( 9 ,  10 ,  11 ) , 
151-                     A ( 9 ,  10 ,  12 ) , 
152-                     B ( 9 ,  11 ) , 
153-                     B ( 9 ,  12 ) , 
154-                     B ( 10 ,  11 ) , 
155-                     C ( 11 ) , 
150+                     M ( 8 ) , 
151+                     Mm ( 8 ,  11 ) , 
152+                     M ( 9 ) , 
153+                     Mmp ( 9 ,  10 ,  11 ) , 
154+                     Mmp ( 9 ,  10 ,  12 ) , 
155+                     Mm ( 9 ,  11 ) , 
156+                     Mm ( 9 ,  12 ) , 
157+                     Mm ( 10 ,  11 ) , 
158+                     M ( 11 ) , 
156159                ] 
157160            ) ; 
158161        } 
@@ -161,17 +164,17 @@ mod tests {
161164    #[ test]  
162165    fn  sort_key_works_as_expected ( )  { 
163166        let  mut  versions = vec ! [ 
164-             A ( 9 ,  0 ,  0 ) , 
165-             A ( 9 ,  10 ,  11 ) , 
166-             A ( 9 ,  10 ,  12 ) , 
167-             B ( 9 ,  0 ) , 
168-             B ( 8 ,  11 ) , 
169-             B ( 9 ,  11 ) , 
170-             B ( 9 ,  12 ) , 
171-             B ( 10 ,  11 ) , 
172-             C ( 8 ) , 
173-             C ( 9 ) , 
174-             C ( 11 ) , 
167+             Mmp ( 9 ,  0 ,  0 ) , 
168+             Mmp ( 9 ,  10 ,  11 ) , 
169+             Mmp ( 9 ,  10 ,  12 ) , 
170+             Mm ( 9 ,  0 ) , 
171+             Mm ( 8 ,  11 ) , 
172+             Mm ( 9 ,  11 ) , 
173+             Mm ( 9 ,  12 ) , 
174+             Mm ( 10 ,  11 ) , 
175+             M ( 8 ) , 
176+             M ( 9 ) , 
177+             M ( 11 ) , 
175178        ] ; 
176179        let  mut  rng = thread_rng ( ) ; 
177180        for  _ in  0 ..1000  { 
@@ -180,17 +183,17 @@ mod tests {
180183            assert_eq ! ( 
181184                versions, 
182185                vec![ 
183-                     C ( 8 ) , 
184-                     B ( 8 ,  11 ) , 
185-                     C ( 9 ) , 
186-                     B ( 9 ,  0 ) , 
187-                     A ( 9 ,  0 ,  0 ) , 
188-                     A ( 9 ,  10 ,  11 ) , 
189-                     A ( 9 ,  10 ,  12 ) , 
190-                     B ( 9 ,  11 ) , 
191-                     B ( 9 ,  12 ) , 
192-                     B ( 10 ,  11 ) , 
193-                     C ( 11 ) , 
186+                     M ( 8 ) , 
187+                     Mm ( 8 ,  11 ) , 
188+                     M ( 9 ) , 
189+                     Mm ( 9 ,  0 ) , 
190+                     Mmp ( 9 ,  0 ,  0 ) , 
191+                     Mmp ( 9 ,  10 ,  11 ) , 
192+                     Mmp ( 9 ,  10 ,  12 ) , 
193+                     Mm ( 9 ,  11 ) , 
194+                     Mm ( 9 ,  12 ) , 
195+                     Mm ( 10 ,  11 ) , 
196+                     M ( 11 ) , 
194197                ] 
195198            ) ; 
196199        } 
0 commit comments