Skip to content
Snippets Groups Projects
buffer.rs 1.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • use crate::serial::SerialDevice;
    
    use std::fmt::{self, Display, Formatter};
    
    pub struct BufferDevice {
        buffer: Vec<u8>,
        callback: fn(image_buffer: &Vec<u8>),
    }
    
    impl BufferDevice {
        pub fn new() -> Self {
            Self {
                buffer: Vec::new(),
                callback: |_| {},
            }
        }
    
        pub fn set_callback(&mut self, callback: fn(image_buffer: &Vec<u8>)) {
            self.callback = callback;
        }
    
        pub fn buffer(&self) -> &Vec<u8> {
            &self.buffer
        }
    }
    
    impl SerialDevice for BufferDevice {
        fn send(&mut self) -> u8 {
            0xff
        }
    
        fn receive(&mut self, byte: u8) {
            self.buffer.push(byte);
            let data = vec![byte];
            (self.callback)(&data);
        }
    
        fn allow_slave(&self) -> bool {
            false
        }
    
        fn description(&self) -> String {
            String::from("Buffer")
        }
    
        fn state(&self) -> String {
            let buffer = self.buffer.clone();
            String::from_utf8(buffer).unwrap()
        }
    }
    
    impl Default for BufferDevice {
        fn default() -> Self {
            Self::new()
        }
    }
    
    impl Display for BufferDevice {
        fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
            write!(f, "Buffer")
        }
    }