@@ -45,15 +45,54 @@ pub(crate) fn generate_kubernetes_conversion(
45
45
#[ automatically_derived]
46
46
impl #enum_ident {
47
47
pub fn convert( review: kube:: core:: conversion:: ConversionReview ) -> kube:: core:: conversion:: ConversionResponse {
48
- Self :: try_convert( review) . expect( "Self::try_convert failed" )
48
+ // Intentionally not using `snafu::ResultExt` here to keep the number of dependencies minimal
49
+ use kube:: core:: conversion:: { ConversionRequest , ConversionResponse } ;
50
+ use kube:: core:: response:: StatusSummary ;
51
+ use stackable_versioned:: ConversionError ;
52
+
53
+ let request = match ConversionRequest :: from_review( review) {
54
+ Ok ( request) => request,
55
+ Err ( err) => {
56
+ return ConversionResponse :: invalid(
57
+ kube:: client:: Status {
58
+ status: Some ( StatusSummary :: Failure ) ,
59
+ code: 400 ,
60
+ message: format!( "The ConversionReview send did not include any request: {err}" ) ,
61
+ reason: "ConversionReview request missing" . to_string( ) ,
62
+ details: None ,
63
+ } ,
64
+ ) ;
65
+ }
66
+ } ;
67
+
68
+ let converted = Self :: try_convert( & request) ;
69
+
70
+ let conversion_response = ConversionResponse :: for_request( request) ;
71
+ match converted {
72
+ Ok ( converted) => {
73
+ conversion_response. success( converted)
74
+ } ,
75
+ Err ( err) => {
76
+ let error_message = err. as_human_readable_error_message( ) ;
77
+
78
+ conversion_response. failure(
79
+ kube:: client:: Status {
80
+ status: Some ( StatusSummary :: Success ) ,
81
+ code: err. http_return_code( ) ,
82
+ message: error_message. clone( ) ,
83
+ reason: error_message,
84
+ details: None ,
85
+ } ,
86
+ )
87
+ }
88
+ }
49
89
}
50
90
51
- fn try_convert( review: kube:: core:: conversion:: ConversionReview ) -> Result <kube:: core:: conversion:: ConversionResponse , stackable_versioned:: ConversionError > {
52
- // Intentionally not using `snafu::ResultExt` here to keep the number of dependencies minimal
91
+ fn try_convert( request: & kube:: core:: conversion:: ConversionRequest ) -> Result <Vec <serde_json:: Value >, stackable_versioned:: ConversionError > {
53
92
use stackable_versioned:: ConversionError ;
54
93
55
- let request = kube :: core :: conversion :: ConversionRequest :: from_review ( review )
56
- . map_err ( |err| ConversionError :: ConvertReviewToRequest { source : err } ) ? ;
94
+ // FIXME: Check that request.types.{kind,api_version} match the expected values
95
+
57
96
let desired_object_version = <Self as std:: str :: FromStr >:: from_str( & request. desired_api_version)
58
97
. map_err( |err| ConversionError :: ParseDesiredResourceVersion {
59
98
source: err,
@@ -83,8 +122,7 @@ pub(crate) fn generate_kubernetes_conversion(
83
122
}
84
123
}
85
124
86
- let response = kube:: core:: conversion:: ConversionResponse :: for_request( request) ;
87
- Ok ( response. success( converted) )
125
+ Ok ( converted)
88
126
}
89
127
}
90
128
} )
0 commit comments