You most likely want to blanket impl for &T and &mut T if the trait method consumes.

This is so that when the blanket impl is used for referential T and the method consumes, the reference is consumed, not the value itself.

// impl View for T  — the owned type itself implements View
impl View<Rect> for MyWidget { ... }
let w = MyWidget;
w.render(area); // MyWidget is consumed
 
// impl View for &T  — a reference to T implements View
impl View<Rect> for &MyWidget { ... }
let w = MyWidget;
(&w).render(area); // &MyWidget is consumed (but MyWidget is still alive)
 
// impl View for &mut T  — a mutable reference implements View
impl View<Rect> for &mut MyWidget { ... }
let mut w = MyWidget;
(&mut w).render(area); // &mut MyWidget is consumed (but MyWidget is still alive)