Architectural changes and added first basic implementation for handling queries (does not handle errors)

This commit is contained in:
2022-12-15 05:04:04 +01:00
parent 4de0b31ec8
commit 995ff08784
10 changed files with 154 additions and 57 deletions

View File

@@ -49,8 +49,15 @@ impl Devices {
self.devices.insert(device.get_identifier().to_owned(), Box::new(device));
}
pub fn get_listeners(&mut self) -> Vec<&mut dyn Listener> {
self.devices.iter_mut().filter_map(|(_, device)| AsListener::cast_mut(device.as_mut())).collect()
pub fn get_listeners(&mut self) -> HashMap<&str, &mut dyn Listener> {
self.devices
.iter_mut()
.filter_map(|(id, device)| {
if let Some(listener) = AsListener::cast_mut(device.as_mut()) {
return Some((id.as_str(), listener));
};
return None;
}).collect()
}
pub fn get_device(&mut self, name: &str) -> Option<&mut dyn Device> {
@@ -63,7 +70,7 @@ impl Devices {
impl Listener for Devices {
fn notify(&mut self, message: &rumqttc::Publish) {
self.get_listeners().iter_mut().for_each(|listener| {
self.get_listeners().iter_mut().for_each(|(_, listener)| {
listener.notify(message);
})
}