fips-core 0.3.92

Reusable FIPS mesh, endpoint, transport, and protocol library
Documentation
impl DataplaneLiveNodeTurn {
    pub(crate) fn consume_transport_sent_receipts(
        &mut self,
        consume: impl FnMut(&DataplaneTransportSentReceipt) -> bool,
    ) {
        consume_matching(&mut self.transport_sent_receipts, consume);
    }

    pub(crate) fn consume_output_drops(
        &mut self,
        consume: impl FnMut(&DataplaneOutputDrop) -> bool,
    ) {
        consume_matching(&mut self.output_drops, consume);
    }

    pub(crate) fn consume_drops(
        &mut self,
        consume: impl FnMut(&PacketDrop) -> bool,
    ) {
        consume_matching(&mut self.drops, consume);
    }
}

fn consume_matching<T>(items: &mut Vec<T>, mut consume: impl FnMut(&T) -> bool) {
    items.retain(|item| !consume(item));
}

#[cfg(test)]
mod turn_extract_tests {
    use super::consume_matching;

    #[test]
    fn consume_matching_preserves_unmatched_order() {
        let mut items = vec![1, 2, 3, 4];
        consume_matching(&mut items, |item| item % 2 == 0);
        assert_eq!(items, [1, 3]);
    }
}