pub trait Input {
fn peek(&mut self, state: &State, offset: usize) -> Option<char>;
fn read(&mut self, state: &mut State) -> Option<char> { ... }
fn read_offset(&mut self, state: &mut State, offset: usize) { ... }
fn peek_line(&mut self, state: &State) -> String { ... }
fn read_line(&mut self, state: &mut State) -> String { ... }
fn lines<'a>(&'a mut self, state: &'a mut State) -> Lines<'a, Self> { ... }
fn done(&mut self, state: &State) -> bool { ... }
fn can_read(&mut self, state: &State, offset: usize) -> bool { ... }
}