pub trait Agent {
// Required method
fn suggest_moves(&self, board: IBoard) -> Vec<IPosition>;
// Provided methods
fn select_move(&self, suggested_moves: Vec<IPosition>) -> Option<IPosition> { ... }
fn get_move(&self, board: IBoard) -> Option<IPosition> { ... }
}