pub trait Stack { type Item; fn push(&mut self, data: Self::Item); fn pop(&mut self) -> Result<Self::Item, Error>; fn last(&self) -> Result<&Self::Item, Error>; }