1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
///! A trait defines something that could be drawn use crate::canvas::Canvas; pub type DrawResult<T> = std::result::Result<T, Box<dyn std::error::Error + Send + Sync>>; /// Something that knows how to draw itself onto the canvas pub trait Draw { fn draw(&self, canvas: &mut dyn Canvas) -> DrawResult<()>; } impl<T: Draw> Draw for &T { fn draw(&self, canvas: &mut dyn Canvas) -> DrawResult<()> { (*self).draw(canvas) } } impl<T: Draw + ?Sized> Draw for Box<T> { fn draw(&self, canvas: &mut dyn Canvas) -> DrawResult<()> { self.as_ref().draw(canvas) } }