traits
borrow checker is unappeased