(
state: &Arc<ServerState>,
request: Request<ListServicesRequest>,
)
| 140 | } |
| 141 | |
| 142 | pub(super) async fn handle_list_services( |
| 143 | state: &Arc<ServerState>, |
| 144 | request: Request<ListServicesRequest>, |
| 145 | ) -> Result<Response<ListServicesResponse>, Status> { |
| 146 | let req = request.into_inner(); |
| 147 | if !req.sandbox.is_empty() { |
| 148 | validate_endpoint_name("sandbox", &req.sandbox, MAX_SANDBOX_NAME_LEN)?; |
| 149 | } |
| 150 | |
| 151 | let limit = super::clamp_limit(req.limit, 100, super::MAX_PAGE_SIZE); |
| 152 | let endpoints: Vec<ServiceEndpoint> = if req.sandbox.is_empty() { |
| 153 | state.store.list_messages(limit, req.offset).await |
| 154 | } else { |
| 155 | state |
| 156 | .store |
| 157 | .list_messages_with_selector(&format!("sandbox={}", req.sandbox), limit, req.offset) |
| 158 | .await |
| 159 | } |
| 160 | .map_err(|e| Status::internal(format!("list endpoints failed: {e}")))?; |
| 161 | |
| 162 | let services = endpoints |
| 163 | .into_iter() |
| 164 | .map(|ep| service_endpoint_response(state, ep)) |
| 165 | .collect(); |
| 166 | |
| 167 | Ok(Response::new(ListServicesResponse { services })) |
| 168 | } |
| 169 | |
| 170 | pub(super) async fn handle_delete_service( |
| 171 | state: &Arc<ServerState>, |
no test coverage detected