use std::sync::{Arc, Mutex}; use crate::interaction::Interaction; pub struct Buffer { int_buffer: Arc>>, out_buffer: Arc>>, } impl Buffer { pub fn new(int_buffer: Arc>>, out_buffer: Arc>>) -> Self { Self { int_buffer, out_buffer, } } } impl Interaction for Buffer { fn input(&self) -> Result { let mut int_buffer = self.int_buffer.lock().unwrap(); if let Some(input_string) = int_buffer.pop() { Ok(input_string) } else { Err(String::from("internal_buffer is empty")) } } fn output(&self, output: String) { let mut out_buffer = self.out_buffer.lock().unwrap(); out_buffer.push(output) } }