| 368 | } |
| 369 | |
| 370 | async fn remove_gateway( |
| 371 | &self, |
| 372 | request: Request<api::RemoveGatewayFromMulticastGroupRequest>, |
| 373 | ) -> Result<Response<()>, Status> { |
| 374 | let req = request.get_ref(); |
| 375 | let mg_id = Uuid::from_str(&req.multicast_group_id).map_err(|e| e.status())?; |
| 376 | let gateway_id = EUI64::from_str(&req.gateway_id).map_err(|e| e.status())?; |
| 377 | |
| 378 | self.validator |
| 379 | .validate( |
| 380 | request.extensions(), |
| 381 | validator::ValidateMulticastGroupAccess::new(validator::Flag::Update, mg_id), |
| 382 | ) |
| 383 | .await?; |
| 384 | |
| 385 | multicast::remove_gateway(&mg_id, &gateway_id) |
| 386 | .await |
| 387 | .map_err(|e| e.status())?; |
| 388 | |
| 389 | let mut resp = Response::new(()); |
| 390 | resp.metadata_mut().insert( |
| 391 | "x-log-multicast_group_id", |
| 392 | req.multicast_group_id.parse().unwrap(), |
| 393 | ); |
| 394 | resp.metadata_mut() |
| 395 | .insert("x-log-gateway_id", req.gateway_id.parse().unwrap()); |
| 396 | |
| 397 | Ok(resp) |
| 398 | } |
| 399 | |
| 400 | async fn enqueue( |
| 401 | &self, |