From fd4aba8eae69e0afb8b02e9025a8ced2ecbd0db7 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Wed, 24 Jun 2020 11:29:18 +0100 Subject: [PATCH] vmm: api: Implement support for GET handlers EndpointHandler This can be used for simple API requests which return data but do not require any input. Signed-off-by: Rob Bradford --- vmm/src/api/http.rs | 46 ++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/vmm/src/api/http.rs b/vmm/src/api/http.rs index 0f6aebd38..5e59b3525 100644 --- a/vmm/src/api/http.rs +++ b/vmm/src/api/http.rs @@ -124,24 +124,27 @@ pub trait EndpointHandler: Sync + Send { api_notifier: EventFd, api_sender: Sender, ) -> Response { - match req.method() { - Method::Put => match self.put_handler(api_notifier, api_sender, &req.body) { - Ok(response_body) => { - if let Some(body) = response_body { - let mut response = Response::new(Version::Http11, StatusCode::OK); - response.set_body(body); - response - } else { - Response::new(Version::Http11, StatusCode::NoContent) - } + let res = match req.method() { + Method::Put => self.put_handler(api_notifier, api_sender, &req.body), + Method::Get => self.get_handler(api_notifier, api_sender, &req.body), + _ => return Response::new(Version::Http11, StatusCode::BadRequest), + }; + + match res { + Ok(response_body) => { + if let Some(body) = response_body { + let mut response = Response::new(Version::Http11, StatusCode::OK); + response.set_body(body); + response + } else { + Response::new(Version::Http11, StatusCode::NoContent) } - Err(e @ HttpError::BadRequest) => error_response(e, StatusCode::BadRequest), - Err(e @ HttpError::SerdeJsonDeserialize(_)) => { - error_response(e, StatusCode::BadRequest) - } - Err(e) => error_response(e, StatusCode::InternalServerError), - }, - _ => Response::new(Version::Http11, StatusCode::BadRequest), + } + Err(e @ HttpError::BadRequest) => error_response(e, StatusCode::BadRequest), + Err(e @ HttpError::SerdeJsonDeserialize(_)) => { + error_response(e, StatusCode::BadRequest) + } + Err(e) => error_response(e, StatusCode::InternalServerError), } } @@ -153,6 +156,15 @@ pub trait EndpointHandler: Sync + Send { ) -> std::result::Result, HttpError> { Err(HttpError::BadRequest) } + + fn get_handler( + &self, + _api_notifier: EventFd, + _api_sender: Sender, + _body: &Option, + ) -> std::result::Result, HttpError> { + Err(HttpError::BadRequest) + } } /// An HTTP routes structure.