@@ -6,7 +6,7 @@ use crate::{Result, Error};
6
6
///
7
7
/// Used to construct requests from url conventions.
8
8
/// When data is PUT/POST/PATCH'd this struct requires raw bytes.
9
- #[ derive( Clone ) ]
9
+ #[ derive( Clone , Debug ) ]
10
10
pub struct Api {
11
11
/// API Resource name
12
12
pub resource : String ,
@@ -16,6 +16,8 @@ pub struct Api {
16
16
pub namespace : Option < String > ,
17
17
/// API version of the resource
18
18
pub version : String ,
19
+ /// Subresource version of scale (takes precedence)
20
+ pub scale_version : String ,
19
21
/// Name of the api prefix (api or apis typically)
20
22
pub prefix : String ,
21
23
@@ -28,18 +30,12 @@ impl Default for Api {
28
30
namespace : None ,
29
31
group : "" . into ( ) ,
30
32
version : "v1" . into ( ) ,
33
+ scale_version : "v1beta2" . into ( ) , // not stable yet
31
34
prefix : "apis" . into ( ) , // seems most common
32
35
}
33
36
}
34
37
}
35
38
36
- impl Debug for Api {
37
- fn fmt ( & self , f : & mut std:: fmt:: Formatter ) -> std:: fmt:: Result {
38
- write ! ( f, "Api {{ {} {} {} {} {:?} }}" , self . resource, self . version,
39
- self . group, self . prefix, self . namespace)
40
- }
41
- }
42
-
43
39
#[ allow( non_snake_case) ]
44
40
impl Api {
45
41
pub fn within ( mut self , ns : & str ) -> Self {
@@ -142,14 +138,30 @@ impl Api {
142
138
143
139
// -------------------------------------------------------
144
140
141
+ // TODO: set these..
142
+ enum SubResource {
143
+ Scale ,
144
+ Status ,
145
+ }
146
+ impl SubResource {
147
+ fn version ( & self ) -> String {
148
+ match self {
149
+ SubResource :: Scale => "v1beta2" . into ( ) ,
150
+ SubResource :: Status => "v1beta2" . into ( ) ,
151
+ }
152
+ }
153
+ }
145
154
146
- impl ToString for Api
147
- {
148
- fn to_string ( & self ) -> String {
155
+ impl Api {
156
+ fn make_url ( & self , sub : Option < SubResource > ) -> String {
149
157
let pref = if self . prefix == "" { "" . into ( ) } else { format ! ( "{}/" , self . prefix) } ;
150
158
let g = if self . group == "" { "" . into ( ) } else { format ! ( "{}/" , self . group) } ;
151
- let v = if self . version == "" { "" . into ( ) } else { format ! ( "{}/" , self . version) } ;
159
+ let v = match sub {
160
+ Some ( s) => format ! ( "{}/" , s. version( ) ) ,
161
+ None => format ! ( "{}/" , self . version)
162
+ } ;
152
163
let n = if let Some ( ns) = & self . namespace { format ! ( "namespaces/{}/" , ns) } else { "" . into ( ) } ;
164
+
153
165
format ! ( "/{prefix}{group}{version}{namespaces}{resource}" ,
154
166
prefix = pref,
155
167
group = g,
@@ -181,7 +193,7 @@ pub struct PostParams {
181
193
impl Api {
182
194
/// Create a list request to fully re-fetch the state
183
195
pub fn list ( & self , par : & GetParams ) -> Result < http:: Request < Vec < u8 > > > {
184
- let mut qp = url:: form_urlencoded:: Serializer :: new ( self . to_string ( ) + "?" ) ;
196
+ let mut qp = url:: form_urlencoded:: Serializer :: new ( self . make_url ( None ) + "?" ) ;
185
197
186
198
if let Some ( fields) = & par. field_selector {
187
199
qp. append_pair ( "fieldSelector" , & fields) ;
@@ -200,7 +212,7 @@ impl Api {
200
212
201
213
/// Create a minimial list request to seed an initial resourceVersion
202
214
pub ( crate ) fn list_zero_resource_entries ( & self , par : & GetParams ) -> Result < http:: Request < Vec < u8 > > > {
203
- let mut qp = url:: form_urlencoded:: Serializer :: new ( self . to_string ( ) + "?" ) ;
215
+ let mut qp = url:: form_urlencoded:: Serializer :: new ( self . make_url ( None ) + "?" ) ;
204
216
qp. append_pair ( "limit" , "1" ) ; // can't have 0..
205
217
if par. include_uninitialized {
206
218
qp. append_pair ( "includeUninitialized" , "true" ) ;
@@ -213,7 +225,7 @@ impl Api {
213
225
214
226
/// Create watch request for a Api at a given version
215
227
pub ( crate ) fn watch ( & self , par : & GetParams , ver : & str ) -> Result < http:: Request < Vec < u8 > > > {
216
- let mut qp = url:: form_urlencoded:: Serializer :: new ( self . to_string ( ) + "?" ) ;
228
+ let mut qp = url:: form_urlencoded:: Serializer :: new ( self . make_url ( None ) + "?" ) ;
217
229
218
230
qp. append_pair ( "watch" , "true" ) ;
219
231
qp. append_pair ( "resourceVersion" , ver) ;
@@ -236,14 +248,14 @@ impl Api {
236
248
237
249
/// Get a single instance
238
250
pub fn get ( & self , name : & str ) -> Result < http:: Request < Vec < u8 > > > {
239
- let mut qp = url:: form_urlencoded:: Serializer :: new ( self . to_string ( ) + "/" + name) ;
251
+ let mut qp = url:: form_urlencoded:: Serializer :: new ( self . make_url ( None ) + "/" + name) ;
240
252
let urlstr = qp. finish ( ) ;
241
253
let mut req = http:: Request :: get ( urlstr) ;
242
254
req. body ( vec ! [ ] ) . map_err ( Error :: from)
243
255
}
244
256
245
257
pub fn create ( & self , pp : & PostParams , data : Vec < u8 > ) -> Result < http:: Request < Vec < u8 > > > {
246
- let mut qp = url:: form_urlencoded:: Serializer :: new ( self . to_string ( ) + "?" ) ;
258
+ let mut qp = url:: form_urlencoded:: Serializer :: new ( self . make_url ( None ) + "?" ) ;
247
259
if pp. dry_run {
248
260
qp. append_pair ( "dryRun" , "true" ) ;
249
261
}
@@ -252,7 +264,7 @@ impl Api {
252
264
req. body ( data) . map_err ( Error :: from)
253
265
}
254
266
pub fn replace ( & self , name : & str , pp : & PostParams , data : Vec < u8 > ) -> Result < http:: Request < Vec < u8 > > > {
255
- let base_url = self . to_string ( ) + "/" + name + "?" ;
267
+ let base_url = self . make_url ( None ) + "/" + name + "?" ;
256
268
let mut qp = url:: form_urlencoded:: Serializer :: new ( base_url) ;
257
269
if pp. dry_run {
258
270
qp. append_pair ( "dryRun" , "true" ) ;
@@ -282,7 +294,7 @@ impl Api {
282
294
//}
283
295
284
296
pub fn patch_status ( & self , name : & str , pp : & PostParams , patch : Vec < u8 > ) -> Result < http:: Request < Vec < u8 > > > {
285
- let base_url = self . to_string ( ) + "/" + name + "/status" ;
297
+ let base_url = self . make_url ( Some ( SubResource :: Status ) ) + "/" + name + "/status" ;
286
298
let mut qp = url:: form_urlencoded:: Serializer :: new ( base_url) ;
287
299
if pp. dry_run {
288
300
qp. append_pair ( "dryRun" , "true" ) ;
@@ -293,7 +305,7 @@ impl Api {
293
305
}
294
306
295
307
pub fn replace_status ( & self , name : & str , pp : & PostParams , data : Vec < u8 > ) -> Result < http:: Request < Vec < u8 > > > {
296
- let base_url = self . to_string ( ) + "/" + name + "/status" ;
308
+ let base_url = self . make_url ( Some ( SubResource :: Status ) ) + "/" + name + "/status" ;
297
309
let mut qp = url:: form_urlencoded:: Serializer :: new ( base_url) ;
298
310
if pp. dry_run {
299
311
qp. append_pair ( "dryRun" , "true" ) ;
@@ -348,7 +360,7 @@ fn patch_status_path(){
348
360
let r = Api :: v1Node ( ) ;
349
361
let pp = PostParams :: default ( ) ;
350
362
let req = r. patch_status ( "mynode" , & pp, vec ! [ ] ) . unwrap ( ) ;
351
- assert_eq ! ( req. uri( ) , "/api/v1 /nodes/mynode/status" ) ;
363
+ assert_eq ! ( req. uri( ) , "/api/v1beta2 /nodes/mynode/status" ) ;
352
364
assert_eq ! ( req. method( ) , "PATCH" ) ;
353
365
}
354
366
#[ test]
0 commit comments