1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
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<View> = Box::new(TextView::new("text")); /// let text: Box<TextView> = boxed.as_boxed_any().downcast().unwrap(); /// # } /// ``` fn as_boxed_any(self: Box<Self>) -> Box<Any>; } impl<T: View> 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<Self>) -> Box<Any> { self } }