pub trait Stack {
type Item;
// Required methods
fn push(&mut self, data: Self::Item) -> Result<(), Error>;
fn pop(&mut self) -> Result<Self::Item, Error>;
fn peek_back(&self, back: usize) -> Result<&Self::Item, Error>;
fn pop_back(&mut self, back: usize) -> Result<Self::Item, Error>;
fn last(&self) -> Result<&Self::Item, Error>;
}