mod threads; use std::io::{Stdin, Write}; use termion::event::Key; use termion::input::TermRead; pub use threads::Threads; pub struct Client { buffers: Vec, } impl Client { pub fn new(initial_buffer: Buffer) -> Self { Self { buffers: vec![initial_buffer], } } pub fn run(mut self, mut screen: W, stdin: Stdin) { for c in stdin.keys() { let c = c.unwrap(); // Global keybinds match c { Key::Char('q') => { self.buffers.pop().unwrap(); if self.buffers.is_empty() { break; } }, _ => () } let next_buffer = match self.buffers.last_mut().unwrap() { Buffer::Threads(s) => s.tick(&mut screen, c), }; if let Some(next_buffer) = next_buffer { self.buffers.push(next_buffer); } } } } pub enum Buffer { Threads(Threads), } impl Buffer { pub fn name(&self) -> String { match self { Buffer::Threads(t) => t.name(), } } }