1
1
use std:: { cmp:: Ordering , fmt:: Display , str:: FromStr } ;
2
2
3
- #[ cfg( feature = "darling" ) ]
4
- use darling:: FromMeta ;
5
3
use snafu:: { ResultExt , Snafu } ;
6
4
7
5
use crate :: { Group , ParseGroupError , ParseVersionError , Version } ;
8
6
9
7
#[ cfg( feature = "serde" ) ]
10
8
mod serde;
11
9
10
+ #[ cfg( feature = "darling" ) ]
11
+ mod darling;
12
+
12
13
/// Error variants which can be encountered when creating a new [`ApiVersion`]
13
14
/// from unparsed input.
14
15
#[ derive( Debug , PartialEq , Snafu ) ]
@@ -45,13 +46,13 @@ impl FromStr for ApiVersion {
45
46
fn from_str ( input : & str ) -> Result < Self , Self :: Err > {
46
47
let ( group, version) = if let Some ( ( group, version) ) = input. split_once ( '/' ) {
47
48
let group = Group :: from_str ( group) . context ( ParseGroupSnafu ) ?;
49
+ let version = Version :: from_str ( version) . context ( ParseVersionSnafu ) ?;
48
50
49
- (
50
- Some ( group) ,
51
- Version :: from_str ( version) . context ( ParseVersionSnafu ) ?,
52
- )
51
+ ( Some ( group) , version)
53
52
} else {
54
- ( None , Version :: from_str ( input) . context ( ParseVersionSnafu ) ?)
53
+ let version = Version :: from_str ( input) . context ( ParseVersionSnafu ) ?;
54
+
55
+ ( None , version)
55
56
} ;
56
57
57
58
Ok ( Self { group, version } )
@@ -77,13 +78,6 @@ impl Display for ApiVersion {
77
78
}
78
79
}
79
80
80
- #[ cfg( feature = "darling" ) ]
81
- impl FromMeta for ApiVersion {
82
- fn from_string ( value : & str ) -> darling:: Result < Self > {
83
- Self :: from_str ( value) . map_err ( darling:: Error :: custom)
84
- }
85
- }
86
-
87
81
impl ApiVersion {
88
82
/// Create a new Kubernetes API version.
89
83
pub fn new ( group : Option < Group > , version : Version ) -> Self {
@@ -104,19 +98,11 @@ impl ApiVersion {
104
98
105
99
#[ cfg( test) ]
106
100
mod test {
107
- #[ cfg( feature = "darling" ) ]
108
- use quote:: quote;
109
101
use rstest:: rstest;
110
102
111
103
use super :: * ;
112
104
use crate :: Level ;
113
105
114
- #[ cfg( feature = "darling" ) ]
115
- fn parse_meta ( tokens : proc_macro2:: TokenStream ) -> :: std:: result:: Result < syn:: Meta , String > {
116
- let attribute: syn:: Attribute = syn:: parse_quote!( #[ #tokens] ) ;
117
- Ok ( attribute. meta )
118
- }
119
-
120
106
#[ rstest]
121
107
#[ case( "extensions/v1beta1" , ApiVersion { group: Some ( "extensions" . parse( ) . unwrap( ) ) , version: Version { major: 1 , level: Some ( Level :: Beta ( 1 ) ) } } ) ]
122
108
#[ case( "v1beta1" , ApiVersion { group: None , version: Version { major: 1 , level: Some ( Level :: Beta ( 1 ) ) } } ) ]
@@ -145,15 +131,4 @@ mod test {
145
131
fn partial_ord ( #[ case] input : Version , #[ case] other : Version , #[ case] expected : Ordering ) {
146
132
assert_eq ! ( input. partial_cmp( & other) , Some ( expected) ) ;
147
133
}
148
-
149
- #[ cfg( feature = "darling" ) ]
150
- #[ rstest]
151
- #[ case( quote!( ignore = "extensions/v1beta1" ) , ApiVersion { group: Some ( "extensions" . parse( ) . unwrap( ) ) , version: Version { major: 1 , level: Some ( Level :: Beta ( 1 ) ) } } ) ]
152
- #[ case( quote!( ignore = "v1beta1" ) , ApiVersion { group: None , version: Version { major: 1 , level: Some ( Level :: Beta ( 1 ) ) } } ) ]
153
- #[ case( quote!( ignore = "v1" ) , ApiVersion { group: None , version: Version { major: 1 , level: None } } ) ]
154
- fn from_meta ( #[ case] input : proc_macro2:: TokenStream , #[ case] expected : ApiVersion ) {
155
- let meta = parse_meta ( input) . expect ( "valid attribute tokens" ) ;
156
- let api_version = ApiVersion :: from_meta ( & meta) . expect ( "version must parse from attribute" ) ;
157
- assert_eq ! ( api_version, expected) ;
158
- }
159
134
}
0 commit comments