2 个不稳定版本

0.1.0 2024年4月13日
0.0.1 2023年4月22日

#806 in Rust 模式

Download history 5/week @ 2024-04-19 4/week @ 2024-05-17 1/week @ 2024-05-24

71 每月下载量

MIT/Apache

26KB
613

dyncast

github crates.io docs.rs

概念证明。

此库提供对 dyn Trait 的可选类型下载数。

警告:此方法的安全性尚未得到验证。

use std::any::Any;

use dyncast::{dyncast, DyncastExt};

#[dyncast]
trait Boba {
    fn supper(&self);
}

struct A;

#[dyncast]
impl Boba for A {
    fn supper(&self) {
        println!("a")
    }
}

struct B;

#[dyncast]
impl Boba for B {
    fn supper(&self) {
        println!("b")
    }
}

#[dyncast]
trait Soba {}

#[test]
fn boba() {
    let a = A;
    let b = B;

    let a = &a as &dyn Any;
    let b = &b as &dyn Any;

    assert!(a.dyncast_to::<dyn Boba>().is_some());
    assert!(b.dyncast_to::<dyn Boba>().is_some());

    assert!(a.dyncast_to::<dyn Soba>().is_none());
    assert!(b.dyncast_to::<dyn Soba>().is_none());
}

平台支持

该软件包已在以下平台上进行测试和验证

  • macOS x86_64, aarch64
  • Linux x86_64, aarch64
  • Windows 1X x86_64

依赖项

~295–730KB
~17K SLoC