summaryrefslogtreecommitdiffstats
path: root/rust/src/api_server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src/api_server.rs')
-rw-r--r--rust/src/api_server.rs123
1 files changed, 56 insertions, 67 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs
index 42c69c00..488dfc9b 100644
--- a/rust/src/api_server.rs
+++ b/rust/src/api_server.rs
@@ -24,26 +24,21 @@ use futures::{self, Future};
use uuid;
// Helper for calling through to handlers
-macro_rules! wrap_get_id_handler {
- ($get_fn:ident, $handler:ident, $resp:ident, $idtype:ident) => {
+macro_rules! wrap_entity_handlers {
+ ($get_fn:ident, $get_handler:ident, $get_resp:ident) => {
fn $get_fn(
&self,
- id: $idtype,
+ id: String,
_context: &Context,
- ) -> Box<Future<Item = $resp, Error = ApiError> + Send> {
- match self.$handler(id) {
+ ) -> Box<Future<Item = $get_resp, Error = ApiError> + Send> {
+ let ret = match self.$get_handler(id) {
Ok(Some(entity)) =>
- Box::new(futures::done(Ok($resp::FoundEntity(entity)))),
+ $get_resp::FoundEntity(entity),
Ok(None) =>
- Box::new(futures::done(Ok($resp::NotFound(
- ErrorResponse { message: "No such entity".to_string() }),
- ))),
- Err(e) =>
- // TODO: dig in to error type here
- Box::new(futures::done(Ok($resp::BadRequest(
- ErrorResponse { message: e.to_string() },
- )))),
- }
+ $get_resp::NotFound(ErrorResponse { message: "No such entity".to_string() }),
+ Err(e) => $get_resp::BadRequest(ErrorResponse { message: e.to_string() }),
+ };
+ Box::new(futures::done(Ok(ret)))
}
}
}
@@ -54,19 +49,16 @@ macro_rules! wrap_lookup_handler {
$idname: $idtype,
_context: &Context,
) -> Box<Future<Item = $resp, Error = ApiError> + Send> {
- match self.$handler($idname) {
+ let ret = match self.$handler($idname) {
Ok(Some(entity)) =>
- Box::new(futures::done(Ok($resp::FoundEntity(entity)))),
+ $resp::FoundEntity(entity),
Ok(None) =>
- Box::new(futures::done(Ok($resp::NotFound(
- ErrorResponse { message: "No such entity".to_string() }),
- ))),
+ $resp::NotFound(ErrorResponse { message: "No such entity".to_string() }),
Err(e) =>
// TODO: dig in to error type here
- Box::new(futures::done(Ok($resp::BadRequest(
- ErrorResponse { message: e.to_string() },
- )))),
- }
+ $resp::BadRequest(ErrorResponse { message: e.to_string() }),
+ };
+ Box::new(futures::done(Ok(ret)))
}
}
}
@@ -573,32 +565,19 @@ impl Server {
}
impl Api for Server {
- wrap_get_id_handler!(
+ wrap_entity_handlers!(
container_id_get,
container_id_get_handler,
- ContainerIdGetResponse,
- String
+ ContainerIdGetResponse
);
- wrap_get_id_handler!(
+ wrap_entity_handlers!(
creator_id_get,
creator_id_get_handler,
- CreatorIdGetResponse,
- String
- );
- wrap_get_id_handler!(file_id_get, file_id_get_handler, FileIdGetResponse, String);
- wrap_get_id_handler!(work_id_get, work_id_get_handler, WorkIdGetResponse, String);
- wrap_get_id_handler!(
- release_id_get,
- release_id_get_handler,
- ReleaseIdGetResponse,
- String
- );
- wrap_get_id_handler!(
- editgroup_id_get,
- editgroup_id_get_handler,
- EditgroupIdGetResponse,
- i64
+ CreatorIdGetResponse
);
+ wrap_entity_handlers!(file_id_get, file_id_get_handler, FileIdGetResponse);
+ wrap_entity_handlers!(work_id_get, work_id_get_handler, WorkIdGetResponse);
+ wrap_entity_handlers!(release_id_get, release_id_get_handler, ReleaseIdGetResponse);
wrap_lookup_handler!(
container_lookup_get,
@@ -949,11 +928,27 @@ impl Api for Server {
accept_editgroup(id as i64, &conn).expect("failed to accept editgroup");
- Box::new(futures::done(Ok(
- EditgroupIdAcceptPostResponse::MergedSuccessfully(Success {
- message: "horray!".to_string(),
- }),
- )))
+ let ret = EditgroupIdAcceptPostResponse::MergedSuccessfully(Success { message: "horray!".to_string()});
+ Box::new(futures::done(Ok(ret)))
+ }
+
+ fn editgroup_id_get(
+ &self,
+ id: i64,
+ _context: &Context,
+ ) -> Box<Future<Item = EditgroupIdGetResponse, Error = ApiError> + Send> {
+ let ret = match self.editgroup_id_get_handler(id) {
+ Ok(Some(entity)) =>
+ EditgroupIdGetResponse::FoundEntity(entity),
+ Ok(None) =>
+ EditgroupIdGetResponse::NotFound(
+ ErrorResponse { message: "No such entity".to_string() }),
+ Err(e) =>
+ // TODO: dig in to error type here
+ EditgroupIdGetResponse::BadRequest(
+ ErrorResponse { message: e.to_string() }),
+ };
+ Box::new(futures::done(Ok(ret)))
}
fn editgroup_post(
@@ -989,19 +984,16 @@ impl Api for Server {
username: String,
_context: &Context,
) -> Box<Future<Item = EditorUsernameChangelogGetResponse, Error = ApiError> + Send> {
- match self.editor_changelog_get_handler(username) {
+ let ret = match self.editor_changelog_get_handler(username) {
Ok(Some(entries)) =>
- Box::new(futures::done(Ok(EditorUsernameChangelogGetResponse::FoundMergedChanges(entries)))),
+ EditorUsernameChangelogGetResponse::FoundMergedChanges(entries),
Ok(None) =>
- Box::new(futures::done(Ok(EditorUsernameChangelogGetResponse::NotFound(
- ErrorResponse { message: "No such entity".to_string() }),
- ))),
+ EditorUsernameChangelogGetResponse::NotFound(ErrorResponse { message: "No such entity".to_string() }),
Err(e) =>
// TODO: dig in to error type here
- Box::new(futures::done(Ok(EditorUsernameChangelogGetResponse::GenericError(
- ErrorResponse { message: e.to_string() },
- )))),
- }
+ EditorUsernameChangelogGetResponse::GenericError(ErrorResponse { message: e.to_string() }),
+ };
+ Box::new(futures::done(Ok(ret)))
}
fn editor_username_get(
@@ -1009,18 +1001,15 @@ impl Api for Server {
username: String,
_context: &Context,
) -> Box<Future<Item = EditorUsernameGetResponse, Error = ApiError> + Send> {
- match self.editor_get_handler(username) {
+ let ret = match self.editor_get_handler(username) {
Ok(Some(entity)) =>
- Box::new(futures::done(Ok(EditorUsernameGetResponse::FoundEditor(entity)))),
+ EditorUsernameGetResponse::FoundEditor(entity),
Ok(None) =>
- Box::new(futures::done(Ok(EditorUsernameGetResponse::NotFound(
- ErrorResponse { message: "No such entity".to_string() }),
- ))),
+ EditorUsernameGetResponse::NotFound(ErrorResponse { message: "No such entity".to_string() }),
Err(e) =>
// TODO: dig in to error type here
- Box::new(futures::done(Ok(EditorUsernameGetResponse::GenericError(
- ErrorResponse { message: e.to_string() },
- )))),
- }
+ EditorUsernameGetResponse::GenericError(ErrorResponse { message: e.to_string() }),
+ };
+ Box::new(futures::done(Ok(ret)))
}
}