[][src]Trait gstreamer_rtsp::prelude::Cast

pub trait Cast: ObjectType {
    fn upcast<T>(self) -> T
    where
        Self: IsA<T>,
        T: ObjectType
, { ... }
fn upcast_ref<T>(&self) -> &T
    where
        Self: IsA<T>,
        T: ObjectType
, { ... }
fn downcast<T>(self) -> Result<T, Self>
    where
        Self: CanDowncast<T>,
        T: ObjectType
, { ... }
fn downcast_ref<T>(&self) -> Option<&T>
    where
        Self: CanDowncast<T>,
        T: ObjectType
, { ... }
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
, { ... } }

Upcasting and downcasting support.

Provides conversions up and down the class hierarchy tree.

Provided methods

fn upcast<T>(self) -> T where
    Self: IsA<T>,
    T: ObjectType

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

This example is not tested
let button = gtk::Button::new();
let widget = button.upcast::<gtk::Widget>();

fn upcast_ref<T>(&self) -> &T where
    Self: IsA<T>,
    T: ObjectType

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

This example is not tested
let button = gtk::Button::new();
let widget = button.upcast_ref::<gtk::Widget>();

fn downcast<T>(self) -> Result<T, Self> where
    Self: CanDowncast<T>,
    T: ObjectType

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

This example is not tested
let button = gtk::Button::new();
let widget = button.upcast::<gtk::Widget>();
assert!(widget.downcast::<gtk::Button>().is_ok());

fn downcast_ref<T>(&self) -> Option<&T> where
    Self: CanDowncast<T>,
    T: ObjectType

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

This example is not tested
let button = gtk::Button::new();
let widget = button.upcast::<gtk::Widget>();
assert!(widget.downcast_ref::<gtk::Button>().is_some());

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

This example is not tested
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>(&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

This example is not tested
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());

unsafe fn unsafe_cast<T>(self) -> T where
    T: ObjectType

Casts to T unconditionally.

Panics

Panics if compiled with debug_assertions and the instance doesn't implement T.

Safety

If not running with debug_assertions enabled, the caller is responsible for ensuring that the instance implements T

unsafe fn unsafe_cast_ref<T>(&self) -> &T where
    T: ObjectType

Casts to &T unconditionally.

Panics

Panics if compiled with debug_assertions and the instance doesn't implement T.

Safety

If not running with debug_assertions enabled, the caller is responsible for ensuring that the instance implements T

Loading content...

Implementors

impl<T> Cast for T where
    T: ObjectType
[src]

Loading content...