@@ -5,17 +5,27 @@ use darling::{
55use itertools:: Itertools ;
66use k8s_version:: Version ;
77
8+ pub trait CommonOptions {
9+ fn allow_unsorted ( & self ) -> Flag ;
10+ }
11+
812#[ derive( Debug , FromMeta ) ]
913#[ darling( and_then = CommonRootArguments :: validate) ]
10- pub ( crate ) struct CommonRootArguments {
14+ pub ( crate ) struct CommonRootArguments < T >
15+ where
16+ T : CommonOptions + Default ,
17+ {
1118 #[ darling( default ) ]
12- pub ( crate ) options : RootOptions ,
19+ pub ( crate ) options : T ,
1320
1421 #[ darling( multiple, rename = "version" ) ]
1522 pub ( crate ) versions : SpannedValue < Vec < VersionArguments > > ,
1623}
1724
18- impl CommonRootArguments {
25+ impl < T > CommonRootArguments < T >
26+ where
27+ T : CommonOptions + Default ,
28+ {
1929 fn validate ( mut self ) -> Result < Self > {
2030 let mut errors = Error :: accumulator ( ) ;
2131
@@ -32,7 +42,7 @@ impl CommonRootArguments {
3242 // (if allow_unsorted is set).
3343 self . versions . sort_by ( |lhs, rhs| lhs. name . cmp ( & rhs. name ) ) ;
3444
35- if !self . options . allow_unsorted . is_present ( ) && !is_sorted {
45+ if !self . options . allow_unsorted ( ) . is_present ( ) && !is_sorted {
3646 let versions = self . versions . iter ( ) . map ( |v| v. name ) . join ( ", " ) ;
3747
3848 errors. push ( Error :: custom ( format ! (
@@ -59,12 +69,6 @@ impl CommonRootArguments {
5969 }
6070}
6171
62- #[ derive( Clone , Debug , Default , FromMeta ) ]
63- pub ( crate ) struct RootOptions {
64- pub ( crate ) allow_unsorted : Flag ,
65- pub ( crate ) skip : Option < SkipArguments > ,
66- }
67-
6872/// This struct contains supported version arguments.
6973///
7074/// Supported arguments are:
0 commit comments