#[derive(Debug, Clone)]
pub struct PendingRoute {
pub tester_address: u16,
pub doip_source: u16,
pub doip_target: u16,
pub response_can_id: u32,
}
pub struct PendingRouteTable<const N: usize> {
entries: heapless::Vec<PendingRoute, N>,
}
impl<const N: usize> PendingRouteTable<N> {
pub fn new() -> Self {
Self {
entries: heapless::Vec::new(),
}
}
pub fn insert(&mut self, route: PendingRoute) -> bool {
if self.entries.is_full() {
return false;
}
let _ = self.entries.push(route);
true
}
pub fn take_by_can_response_id(&mut self, can_id: u32) -> Option<PendingRoute> {
if let Some(pos) = self
.entries
.iter()
.position(|r| r.response_can_id == can_id)
{
Some(self.entries.remove(pos))
} else {
None
}
}
pub fn remove_tester(&mut self, tester_address: u16) {
self.entries.retain(|r| r.tester_address != tester_address);
}
pub fn is_empty(&self) -> bool {
self.entries.is_empty()
}
}