Skip to content

Commit

Permalink
Allow empty Response
Browse files Browse the repository at this point in the history
Signed-off-by: Mikail Bagishov <bagishov.mikail@yandex.ru>
  • Loading branch information
MikailBag committed Aug 31, 2022
1 parent 8925358 commit 3d41e45
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
4 changes: 2 additions & 2 deletions kube-core/src/conversion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ impl ConversionHandler {
Ok(c) => converted_objects.push(c),
Err(error) => {
let msg = format!("Conversion of object {} failed: {}", idx, error);
return ConversionResponse::error(req, &msg, "ConversionFailed").into_review();
return ConversionResponse::for_request(req).error(&msg, "ConversionFailed").into_review();
}
}
}
ConversionResponse::success(req, converted_objects).into_review()
ConversionResponse::for_request(req).success(converted_objects).into_review()
}
}

Expand Down
40 changes: 26 additions & 14 deletions kube-core/src/conversion/low_level.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,27 +90,33 @@ pub struct ConversionResponse {
}

impl ConversionResponse {
/// Creates a new response, matching provided request.
/// Returned response is empty: you should call `success` or `error`
/// to get a complete `ConversionResponse`.
pub fn for_request(request: ConversionRequest) -> Self {
ConversionResponse { types: request.types, uid: request.uid, result: Status {
status: None,
code: 0,
message: String::new(),
reason: String::new(),
details: None
}, converted_objects: None }
}

/// Creates successful conversion response.
/// `converted_objects` must specify objects in the exact same order as on input.
pub fn success(request: ConversionRequest, converted_objects: Vec<serde_json::Value>) -> Self {
ConversionResponse {
types: request.types,
uid: request.uid,
result: Status::success(),
converted_objects: Some(converted_objects),
}
pub fn success(mut self, converted_objects: Vec<serde_json::Value>) -> Self {
self.result = Status::success();
self.converted_objects = Some(converted_objects);
self
}

/// Creates failed conversion response (discouraged).
/// `request_uid` must be equal to the `.uid` field in the request.
/// `message` and `reason` will be returned to the apiserver.
pub fn error(request: ConversionRequest, message: &str, reason: &str) -> Self {
ConversionResponse {
types: request.types,
uid: request.uid,
result: Status::failure(message, reason),
converted_objects: None,
}
pub fn error(mut self, message: &str, reason: &str) -> Self {
self.result = Status::failure(message, reason);
self
}

/// Creates failed conversion response, not matched with any request.
Expand Down Expand Up @@ -141,6 +147,12 @@ impl ConversionResponse {
}
}

impl From<ConversionRequest> for ConversionResponse {
fn from(request: ConversionRequest) -> Self {
ConversionResponse::for_request(request)
}
}

impl From<ConversionResponse> for ConversionReview {
fn from(response: ConversionResponse) -> Self {
response.into_review()
Expand Down

0 comments on commit 3d41e45

Please sign in to comment.