pub trait Cast: ObjectType {
fn upcast<T: ObjectType>(self) -> T
where
Self: IsA<T>,
{ ... }
fn upcast_ref<T: ObjectType>(&self) -> &T
where
Self: IsA<T>,
{ ... }
fn downcast<T: ObjectType>(self) -> Result<T, Self>
where
Self: CanDowncast<T>,
{ ... }
fn downcast_ref<T: ObjectType>(&self) -> Option<&T>
where
Self: CanDowncast<T>,
{ ... }
fn dynamic_cast<T: ObjectType>(self) -> Result<T, Self> { ... }
fn dynamic_cast_ref<T: ObjectType>(&self) -> Option<&T> { ... }
unsafe fn unsafe_cast<T: ObjectType>(self) -> T { ... }
unsafe fn unsafe_cast_ref<T: ObjectType>(&self) -> &T { ... }
}
Expand description
Upcasting and downcasting support.
Provides conversions up and down the class hierarchy tree.
Provided methods
fn upcast<T: ObjectType>(self) -> T where
Self: IsA<T>,
fn upcast<T: ObjectType>(self) -> T where
Self: IsA<T>,
Upcasts an object to a superclass or interface T
.
NOTE: This statically checks at compile-time if casting is possible. It is not always
known at compile-time, whether a specific object implements an interface or not, in which case
upcast
would fail to compile. dynamic_cast
can be used in these circumstances, which
is checking the types at runtime.
Example
let button = gtk::Button::new();
let widget = button.upcast::<gtk::Widget>();
fn upcast_ref<T: ObjectType>(&self) -> &T where
Self: IsA<T>,
fn upcast_ref<T: ObjectType>(&self) -> &T where
Self: IsA<T>,
Upcasts an object to a reference of its superclass or interface T
.
NOTE: This statically checks at compile-time if casting is possible. It is not always
known at compile-time, whether a specific object implements an interface or not, in which case
upcast
would fail to compile. dynamic_cast
can be used in these circumstances, which
is checking the types at runtime.
Example
let button = gtk::Button::new();
let widget = button.upcast_ref::<gtk::Widget>();
fn downcast<T: ObjectType>(self) -> Result<T, Self> where
Self: CanDowncast<T>,
fn downcast<T: ObjectType>(self) -> Result<T, Self> where
Self: CanDowncast<T>,
Tries to downcast to a subclass or interface implementor T
.
Returns Ok(T)
if the object is an instance of T
and Err(self)
otherwise.
NOTE: This statically checks at compile-time if casting is possible. It is not always
known at compile-time, whether a specific object implements an interface or not, in which case
upcast
would fail to compile. dynamic_cast
can be used in these circumstances, which
is checking the types at runtime.
Example
let button = gtk::Button::new();
let widget = button.upcast::<gtk::Widget>();
assert!(widget.downcast::<gtk::Button>().is_ok());
fn downcast_ref<T: ObjectType>(&self) -> Option<&T> where
Self: CanDowncast<T>,
fn downcast_ref<T: ObjectType>(&self) -> Option<&T> where
Self: CanDowncast<T>,
Tries to downcast to a reference of its subclass or interface implementor T
.
Returns Some(T)
if the object is an instance of T
and None
otherwise.
NOTE: This statically checks at compile-time if casting is possible. It is not always
known at compile-time, whether a specific object implements an interface or not, in which case
upcast
would fail to compile. dynamic_cast
can be used in these circumstances, which
is checking the types at runtime.
Example
let button = gtk::Button::new();
let widget = button.upcast::<gtk::Widget>();
assert!(widget.downcast_ref::<gtk::Button>().is_some());
fn dynamic_cast<T: ObjectType>(self) -> Result<T, Self>
fn dynamic_cast<T: ObjectType>(self) -> Result<T, Self>
Tries to cast to an object of type T
. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast
and upcast
will do many checks at compile-time already.
It is not always known at compile-time, whether a specific object implements an interface or not, and checking has to be performed at runtime.
Returns Ok(T)
if the object is an instance of T
and Err(self)
otherwise.
Example
let button = gtk::Button::new();
let widget = button.dynamic_cast::<gtk::Widget>();
assert!(widget.is_ok());
let widget = widget.unwrap();
assert!(widget.dynamic_cast::<gtk::Button>().is_ok());
fn dynamic_cast_ref<T: ObjectType>(&self) -> Option<&T>
fn dynamic_cast_ref<T: ObjectType>(&self) -> Option<&T>
Tries to cast to reference to an object of type T
. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast
and upcast
will do many checks at compile-time already.
It is not always known at compile-time, whether a specific object implements an interface or not, and checking has to be performed at runtime.
Returns Some(T)
if the object is an instance of T
and None
otherwise.
Example
let button = gtk::Button::new();
let widget = button.dynamic_cast_ref::<gtk::Widget>();
assert!(widget.is_some());
let widget = widget.unwrap();
assert!(widget.dynamic_cast_ref::<gtk::Button>().is_some());