(
state: &Arc<ServerState>,
request: Request<ListSandboxesRequest>,
)
| 254 | } |
| 255 | |
| 256 | pub(super) async fn handle_list_sandboxes( |
| 257 | state: &Arc<ServerState>, |
| 258 | request: Request<ListSandboxesRequest>, |
| 259 | ) -> Result<Response<ListSandboxesResponse>, Status> { |
| 260 | let request = request.into_inner(); |
| 261 | let limit = clamp_limit(request.limit, 100, MAX_PAGE_SIZE); |
| 262 | |
| 263 | let sandboxes: Vec<Sandbox> = if request.label_selector.is_empty() { |
| 264 | state |
| 265 | .store |
| 266 | .list_messages(limit, request.offset) |
| 267 | .await |
| 268 | .map_err(|e| Status::internal(format!("list sandboxes failed: {e}")))? |
| 269 | } else { |
| 270 | crate::grpc::validation::validate_label_selector(&request.label_selector)?; |
| 271 | state |
| 272 | .store |
| 273 | .list_messages_with_selector(&request.label_selector, limit, request.offset) |
| 274 | .await |
| 275 | .map_err(|e| Status::internal(format!("list sandboxes with selector failed: {e}")))? |
| 276 | }; |
| 277 | |
| 278 | Ok(Response::new(ListSandboxesResponse { sandboxes })) |
| 279 | } |
| 280 | |
| 281 | pub(super) async fn handle_list_sandbox_providers( |
| 282 | state: &Arc<ServerState>, |
no test coverage detected