pub trait Camera {
// Required methods
fn position(&self) -> &Vec3;
fn set_position(&mut self, position: Vec3);
fn set_width(&mut self, width: f32);
fn set_height(&mut self, height: f32);
fn projection(&self) -> Mat4;
fn view(&self) -> Mat4;
fn move_camera(&mut self, dir: Movement, dt: f32);
// Provided method
fn set_size(&mut self, width: f32, height: f32) { ... }
}