use std::collections::VecDeque;
use log::error;
use self::scan::Scan;
use crate::parameters::networking::handler::{EnergyScanResult, NetworkFound};
mod scan;
#[derive(Debug, Default)]
pub struct Scans {
queue: VecDeque<Scan>,
channels: Vec<EnergyScanResult>,
networks: Vec<NetworkFound>,
}
impl Scans {
pub fn push(&mut self, scan: Scan) {
self.queue.push_back(scan);
}
pub fn add_channel(&mut self, scanned: EnergyScanResult) {
self.channels.push(scanned);
}
pub fn add_network(&mut self, found: NetworkFound) {
self.networks.push(found);
}
pub fn pop(&mut self) {
if let Some(scan) = self.queue.pop_front() {
match scan {
Scan::Channel(sender) => sender
.send(self.channels.drain(..).collect())
.unwrap_or_else(|error| {
error!("Failed to send channel scan results: {error:?}");
}),
Scan::Network(sender) => {
sender
.send(self.networks.drain(..).collect())
.unwrap_or_else(|error| {
error!("Failed to send network scan results: {error:?}");
});
}
}
}
}
}