#partial-eq #dyn #dynamic #traits #derive #dyn-partial-eq #object

partial_eq_dyn

为具有 trait 对象字段的类型启用 PartialEq 的两个 trait。最佳与 partial_eq_dyn_derive 中的 derive 一起使用。

1 个不稳定版本

0.1.0 2023 年 7 月 6 日

#2478Rust 模式


用于 partial_eq_dyn_derive

MIT/Apache

6KB

免责声明

这是我发布的第一个 crate,因此我对将其制作成生产就绪版本尚无经验。因此请谨慎使用此 crate,并欢迎反馈。

partial_eq_dyn

使用显式转换实现 DynPartialEq trait,以启用任何 dyn 对象之间的比较。还有一个相关的 derive crate partial_eq_dyn_derive,它推导出部分 Equal 和使用 dyn_eq 的所有 dyn_objects 的分组件实现。只需将 AsAny 和 DynPartialEq 设置为所有要使用的 traits 的超 traits,然后对包含这些 traits 的所有要比较的类型使用 PartialEqDyn derive。AsAny 和 DynPartialEq 也可以自动推导。

例如,AsAny 可以这样实现。

use std::any::Any;
use partial_eq_dyn::AsAny;
struct Test;
impl AsAny for Test{
    fn as_any(&self) -> &dyn Any {
        self
    }
}
let test_any: &dyn Any = Test.as_any();

DynPartialEq 可以这样实现

use std::any::Any;
use partial_eq_dyn::{DynPartialEq, AsAny};

trait TestTrait: DynPartialEq + AsAny{}

#[derive(PartialEq)]
struct Test;
impl TestTrait for Test{}
impl AsAny for Test{
   fn as_any(&self) -> &dyn Any {
       self
   }
}
impl DynPartialEq for Test{
    fn dyn_eq(&self, other: &dyn Any) -> bool {
        other
            .downcast_ref::<Test>()
            .map_or(false, |other| self == other)
    }
}

无运行时依赖