fips_core/endpoint/
service_receiver.rs1use super::*;
2
3impl FipsEndpointServiceReceiver {
4 pub async fn recv_batch_into(
6 &self,
7 datagrams: &mut Vec<FipsEndpointServiceDatagram>,
8 max: usize,
9 ) -> Option<usize> {
10 let max = max.clamp(1, ENDPOINT_RECV_BATCH_MAX);
11 datagrams.clear();
12
13 let mut state = self.state.lock().await;
14 state.drain_pending_into(datagrams, max);
15 while datagrams.len() < max {
16 let event = if datagrams.is_empty() {
17 state.rx.recv().await?
18 } else {
19 match state.rx.try_recv() {
20 Ok(event) => event,
21 Err(_) => break,
22 }
23 };
24 state.push_event_into(event, datagrams, max);
25 }
26 Some(datagrams.len())
27 }
28}