pub trait Cast: ObjectType {
// Provided methods
fn upcast<T>(self) -> T
where T: ObjectType,
Self: IsA<T> { ... }
fn upcast_ref<T>(&self) -> &T
where T: ObjectType,
Self: IsA<T> { ... }
fn downcast<T>(self) -> Result<T, Self>
where T: ObjectType,
Self: CanDowncast<T> { ... }
fn downcast_ref<T>(&self) -> Option<&T>
where T: ObjectType,
Self: CanDowncast<T> { ... }
fn dynamic_cast<T>(self) -> Result<T, Self>
where T: ObjectType { ... }
fn dynamic_cast_ref<T>(&self) -> Option<&T>
where T: ObjectType { ... }
unsafe fn unsafe_cast<T>(self) -> T
where T: ObjectType { ... }
unsafe fn unsafe_cast_ref<T>(&self) -> &T
where T: ObjectType { ... }
}Expand description
Upcasting and downcasting support.
Provides conversions up and down the class hierarchy tree.
Provided Methods§
Sourcefn upcast<T>(self) -> Twhere
T: ObjectType,
Self: IsA<T>,
fn upcast<T>(self) -> Twhere
T: ObjectType,
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>();Sourcefn upcast_ref<T>(&self) -> &Twhere
T: ObjectType,
Self: IsA<T>,
fn upcast_ref<T>(&self) -> &Twhere
T: ObjectType,
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>();Sourcefn downcast<T>(self) -> Result<T, Self>where
T: ObjectType,
Self: CanDowncast<T>,
fn downcast<T>(self) -> Result<T, Self>where
T: ObjectType,
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());Sourcefn downcast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
Self: CanDowncast<T>,
fn downcast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
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());Sourcefn dynamic_cast<T>(self) -> Result<T, Self>where
T: ObjectType,
fn dynamic_cast<T>(self) -> Result<T, Self>where
T: ObjectType,
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 as 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());Sourcefn dynamic_cast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
fn dynamic_cast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
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 as 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());Sourceunsafe fn unsafe_cast<T>(self) -> Twhere
T: ObjectType,
unsafe fn unsafe_cast<T>(self) -> Twhere
T: ObjectType,
Casts to T unconditionally.
Panics if compiled with debug_assertions and the instance doesn’t implement T.
Sourceunsafe fn unsafe_cast_ref<T>(&self) -> &Twhere
T: ObjectType,
unsafe fn unsafe_cast_ref<T>(&self) -> &Twhere
T: ObjectType,
Casts to &T unconditionally.
Panics if compiled with debug_assertions and the instance doesn’t implement T.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.