use std::collections::HashMap; use crate::message::Message; use std::sync::mpsc::Sender; pub trait MessageHandler { fn get_code(&self) -> u8; fn handle(&self, message: &mut Message, sender: Sender); } pub struct Handlers { handlers: HashMap>>, } impl Default for Handlers { fn default() -> Self { Self::new() } } impl Handlers { pub fn new() -> Self { Self { handlers: HashMap::new(), } } pub fn register_handler(&mut self, handler: H) -> &mut Self where H: 'static + MessageHandler + Send + Sync, { self.handlers.insert(handler.get_code(), Box::new(handler)); self } pub fn get_handler(&self, code: u8) -> Option<&dyn MessageHandler> { self.handlers.get(&code).map(|v| &**v) } }