pub trait Stack<T> {
// Required methods
fn len(&self) -> usize;
fn truncate(&mut self, size: usize);
fn push_value(&mut self, value: T) -> bool;
fn pop_value(&mut self) -> Option<T>;
fn stack_mut(&mut self) -> &mut [T];
// Provided methods
fn is_empty(&self) -> bool { ... }
fn reserve(&mut self, _size: usize) { ... }
}