You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
956 B
Markdown

# Multitrait Object
This crate provides a pointer type that allows casting into
all registered traits for a given type.
This is done by storing the pointer to the v-table for each
trait implementation on the type as well as the pointer to the
data.
## Usage
```rust
use multi_trait_object::prelude::*;
use std::fmt::Debug;
#[derive(Debug)]
struct MyStruct {
a: u64,
}
trait MyTrait {}
trait MyOtherTrait {}
impl MyTrait for MyStruct{}
impl MyOtherTrait for MyStruct {}
impl_trait_object!(MyStruct, dyn MyTrait, dyn MyOtherTrait, dyn Debug);
fn main() {
let obj = MyStruct {
a: 5
};
let mto = obj.into_multitrait();
{
let debug = mto.downcast_trait::<dyn Debug>().unwrap();
println!("{:?}", debug);
let my_trait = mto.downcast_trait::<dyn MyTrait>().unwrap();
}
let trait_box: Box<dyn MyTrait> = mto.downcast_trait_boxed::<dyn MyTrait>().unwrap();
}
```
## License
Apache-2.0