11use std:: { cmp:: Ordering , fmt:: Display , str:: FromStr } ;
22
3- #[ cfg( feature = "darling" ) ]
4- use darling:: FromMeta ;
53use snafu:: { ResultExt , Snafu } ;
64
75use crate :: { Group , ParseGroupError , ParseVersionError , Version } ;
86
97#[ cfg( feature = "serde" ) ]
108mod serde;
119
10+ #[ cfg( feature = "darling" ) ]
11+ mod darling;
12+
1213/// Error variants which can be encountered when creating a new [`ApiVersion`]
1314/// from unparsed input.
1415#[ derive( Debug , PartialEq , Snafu ) ]
@@ -45,13 +46,13 @@ impl FromStr for ApiVersion {
4546 fn from_str ( input : & str ) -> Result < Self , Self :: Err > {
4647 let ( group, version) = if let Some ( ( group, version) ) = input. split_once ( '/' ) {
4748 let group = Group :: from_str ( group) . context ( ParseGroupSnafu ) ?;
49+ let version = Version :: from_str ( version) . context ( ParseVersionSnafu ) ?;
4850
49- (
50- Some ( group) ,
51- Version :: from_str ( version) . context ( ParseVersionSnafu ) ?,
52- )
51+ ( Some ( group) , version)
5352 } else {
54- ( None , Version :: from_str ( input) . context ( ParseVersionSnafu ) ?)
53+ let version = Version :: from_str ( input) . context ( ParseVersionSnafu ) ?;
54+
55+ ( None , version)
5556 } ;
5657
5758 Ok ( Self { group, version } )
@@ -77,13 +78,6 @@ impl Display for ApiVersion {
7778 }
7879}
7980
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-
8781impl ApiVersion {
8882 /// Create a new Kubernetes API version.
8983 pub fn new ( group : Option < Group > , version : Version ) -> Self {
@@ -104,19 +98,11 @@ impl ApiVersion {
10498
10599#[ cfg( test) ]
106100mod test {
107- #[ cfg( feature = "darling" ) ]
108- use quote:: quote;
109101 use rstest:: rstest;
110102
111103 use super :: * ;
112104 use crate :: Level ;
113105
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-
120106 #[ rstest]
121107 #[ case( "extensions/v1beta1" , ApiVersion { group: Some ( "extensions" . parse( ) . unwrap( ) ) , version: Version { major: 1 , level: Some ( Level :: Beta ( 1 ) ) } } ) ]
122108 #[ case( "v1beta1" , ApiVersion { group: None , version: Version { major: 1 , level: Some ( Level :: Beta ( 1 ) ) } } ) ]
@@ -145,15 +131,4 @@ mod test {
145131 fn partial_ord ( #[ case] input : Version , #[ case] other : Version , #[ case] expected : Ordering ) {
146132 assert_eq ! ( input. partial_cmp( & other) , Some ( expected) ) ;
147133 }
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- }
159134}
0 commit comments