@@ -95,7 +95,11 @@ pub struct ModuleSkipArguments {
9595
9696/// This struct contains crate overrides to be passed to `#[kube]`.
9797#[ derive( Clone , Debug , FromMeta ) ]
98+ #[ darling( and_then = "CrateArguments::dynamic_default" ) ]
9899pub struct CrateArguments {
100+ #[ darling( default = default_kube) ]
101+ pub kube : Override < Path > ,
102+
99103 #[ darling( default = default_kube_core) ]
100104 pub kube_core : Override < Path > ,
101105
@@ -124,6 +128,7 @@ pub struct CrateArguments {
124128impl Default for CrateArguments {
125129 fn default ( ) -> Self {
126130 Self {
131+ kube : default_kube ( ) ,
127132 kube_core : default_kube_core ( ) ,
128133 kube_client : default_kube_client ( ) ,
129134 k8s_openapi : default_k8s_openapi ( ) ,
@@ -136,6 +141,30 @@ impl Default for CrateArguments {
136141 }
137142}
138143
144+ impl CrateArguments {
145+ fn dynamic_default ( mut self ) -> Result < Self > {
146+ // Adjust the kube_core and kube_client paths automatically if only the kube path is
147+ // overridden.
148+ if let Override :: Explicit ( kube_path) = & self . kube {
149+ if self . kube_core . is_explicit ( ) || self . kube_client . is_explicit ( ) {
150+ return Err (
151+ Error :: custom ( "the `kube` crate override is mutually exclusive with `kube_core` and `kube_client`" )
152+ . with_span ( & kube_path)
153+ ) ;
154+ }
155+
156+ self . kube_core = Override :: Explicit ( parse_quote ! { #kube_path:: core } ) ;
157+ self . kube_client = Override :: Explicit ( parse_quote ! { #kube_path:: client } ) ;
158+ }
159+
160+ Ok ( self )
161+ }
162+ }
163+
164+ fn default_kube ( ) -> Override < Path > {
165+ Override :: Default ( parse_quote ! { :: kube } )
166+ }
167+
139168fn default_kube_core ( ) -> Override < Path > {
140169 Override :: Default ( parse_quote ! { :: kube:: core } )
141170}
@@ -262,3 +291,12 @@ impl<T> Deref for Override<T> {
262291 }
263292 }
264293}
294+
295+ impl < T > Override < T > {
296+ pub fn is_explicit ( & self ) -> bool {
297+ match self {
298+ Override :: Default ( _) => false ,
299+ Override :: Explicit ( _) => true ,
300+ }
301+ }
302+ }
0 commit comments