diff --git a/src/api/admin/api.rs b/src/api/admin/api.rs index fc2d9b76..357d8278 100644 --- a/src/api/admin/api.rs +++ b/src/api/admin/api.rs @@ -12,7 +12,7 @@ use garage_rpc::*; use garage_model::garage::Garage; -use garage_api_common::helpers::is_default; +use garage_api_common::{common_error::CommonError, helpers::is_default}; use crate::api_server::{find_matching_nodes, AdminRpc, AdminRpcResponse}; use crate::error::Error; diff --git a/src/api/admin/macros.rs b/src/api/admin/macros.rs index bf841295..f11a2a25 100644 --- a/src/api/admin/macros.rs +++ b/src/api/admin/macros.rs @@ -74,16 +74,18 @@ macro_rules! admin_endpoints { type Response = AdminApiResponse; async fn handle(self, garage: &Arc, admin: &Admin) -> Result { - Ok(match self { + match self { $( - AdminApiRequest::$special_endpoint(_) => panic!( - concat!(stringify!($special_endpoint), " needs to go through a special handler") + AdminApiRequest::$special_endpoint(_) => Err( + Error::Common(CommonError::BadRequest( + concat!(stringify!($special_endpoint), " cannot be used outside of the HTTP Admin API").into() + )) ), )* $( - AdminApiRequest::$endpoint(req) => AdminApiResponse::$endpoint(req.handle(garage, admin).await?), + AdminApiRequest::$endpoint(req) => Ok(AdminApiResponse::$endpoint(req.handle(garage, admin).await?)), )* - }) + } } } }