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 <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2020-06-24 11:29:18 +01:00 committed by Samuel Ortiz
parent 80be393b16
commit fd4aba8eae

View File

@ -124,24 +124,27 @@ pub trait EndpointHandler: Sync + Send {
api_notifier: EventFd, api_notifier: EventFd,
api_sender: Sender<ApiRequest>, api_sender: Sender<ApiRequest>,
) -> Response { ) -> Response {
match req.method() { let res = match req.method() {
Method::Put => match self.put_handler(api_notifier, api_sender, &req.body) { Method::Put => self.put_handler(api_notifier, api_sender, &req.body),
Ok(response_body) => { Method::Get => self.get_handler(api_notifier, api_sender, &req.body),
if let Some(body) = response_body { _ => return Response::new(Version::Http11, StatusCode::BadRequest),
let mut response = Response::new(Version::Http11, StatusCode::OK); };
response.set_body(body);
response match res {
} else { Ok(response_body) => {
Response::new(Version::Http11, StatusCode::NoContent) 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(_)) => { Err(e @ HttpError::BadRequest) => error_response(e, StatusCode::BadRequest),
error_response(e, StatusCode::BadRequest) Err(e @ HttpError::SerdeJsonDeserialize(_)) => {
} error_response(e, StatusCode::BadRequest)
Err(e) => error_response(e, StatusCode::InternalServerError), }
}, Err(e) => error_response(e, StatusCode::InternalServerError),
_ => Response::new(Version::Http11, StatusCode::BadRequest),
} }
} }
@ -153,6 +156,15 @@ pub trait EndpointHandler: Sync + Send {
) -> std::result::Result<Option<Body>, HttpError> { ) -> std::result::Result<Option<Body>, HttpError> {
Err(HttpError::BadRequest) Err(HttpError::BadRequest)
} }
fn get_handler(
&self,
_api_notifier: EventFd,
_api_sender: Sender<ApiRequest>,
_body: &Option<Body>,
) -> std::result::Result<Option<Body>, HttpError> {
Err(HttpError::BadRequest)
}
} }
/// An HTTP routes structure. /// An HTTP routes structure.