4 releases (breaking)
Uses new Rust 2024
new 0.4.0 | Apr 13, 2025 |
---|---|
0.3.0 | Apr 12, 2025 |
0.2.0 | Apr 12, 2025 |
0.1.0 | Jul 2, 2023 |
#4 in #casting
68 downloads per month
10KB
151 lines
xdc
This crate contains the casting logic for the wider xdc ecosystem. It is intended to be used in conjunction with xdc_macros in order to allow for allowing dynamic casting
lib.rs
:
eXperimental Dynamic Casting for Rust
Example
use xdc::*;
trait Parent : ObjBase {}
trait Foo : Parent {}
trait Bar : Parent {}
struct Test {}
xdc_struct!(Test);
impl Parent for Test {}
xdc_impl!(Parent, Test);
impl Foo for Test {}
xdc_impl!(Foo, Test);
impl Bar for Test {}
xdc_impl!(Bar, Test);
let mut example = Test {};
let foo_example: &dyn Foo = &example;
let bar_example: &dyn Bar = xdc::try_cast(foo_example).unwrap();
let foo_example_mut: &mut dyn Foo = &mut example;
let bar_example_mut: &mut dyn Bar = xdc::try_cast_mut(foo_example_mut).unwrap();
let foo_example_box: Box<dyn Foo> = Box::new(example);
let bar_example_box: Box<dyn Bar> = xdc::try_cast_boxed(foo_example_box).unwrap();
Dependencies
~0.4–0.9MB
~19K SLoC