use std::num::NonZeroU16; #[derive(Default)] pub struct Console { pub(crate) vector: u16, pub(crate) read: u8, handler: H, } impl Console { pub fn new(handler: H) -> Self { Self { vector: Default::default(), read: Default::default(), handler, } } } impl Console { pub fn set_read(&mut self, val: u8) { self.read = val; } pub fn vector(&self) -> Option { NonZeroU16::new(self.vector) } } pub trait Handler { fn on_write(&mut self, val: u8); fn on_error(&mut self, val: u8); } impl Console { pub fn write(&mut self, val: u8) { self.handler.on_write(val); } pub fn error(&mut self, val: u8) { self.handler.on_error(val); } }