use std::any::Any; use view::View; /// A view that can be downcasted to its concrete type. /// /// This trait is automatically implemented for any `T: View`. pub trait AnyView { /// Downcast self to a `Any`. fn as_any(&self) -> &Any; /// Downcast self to a mutable `Any`. fn as_any_mut(&mut self) -> &mut Any; /// Returns a boxed any from a boxed self. /// /// Can be used before `Box::downcast()`. /// /// # Examples /// /// ```rust /// # use cursive::views::TextView; /// # use cursive::view::View; /// # fn main() { /// let boxed: Box = Box::new(TextView::new("text")); /// let text: Box = boxed.as_boxed_any().downcast().unwrap(); /// # } /// ``` fn as_boxed_any(self: Box) -> Box; } impl AnyView for T { /// Downcast self to a `Any`. fn as_any(&self) -> &Any { self } /// Downcast self to a mutable `Any`. fn as_any_mut(&mut self) -> &mut Any { self } fn as_boxed_any(self: Box) -> Box { self } }