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

partial_eq_dyn_derive

为具有特质对象的struct和enum实现PartialEq特质

1个不稳定版本

0.1.0 2023年7月6日

#42 in #partial-eq

MIT/Apache

23KB
338

免责声明

这是我发布的第一个crate,因此我对将其产品化还不是很熟悉。因此请谨慎使用此crate,欢迎反馈。

partial_eq_dyn_derive

要为具有特质对象字段的类型实现PartialEq特质,可以使用PartialEqDyn过程宏。实现需要具有特质对象的特质需要有AsAny和DynPartialEq作为超特质。对于这些特质,也存在AsAny和DynPartialEq过程宏。以下是一个示例

use partial_eq_dyn::{AsAny, DynPartialEq};
use partial_eq_dyn_derive::{AsAny, DynPartialEq, PartialEqDyn};

trait TestTrait: core::fmt::Debug + AsAny + DynPartialEq {}

#[derive(AsAny, DynPartialEq, PartialEq)]
struct TestTraitImplementor(i32);

impl TestTrait for TestTraitImplementor {}

#[derive(PartialEqDyn)]
struct TestStruct {
    field1: i32,
    field2: Box<i32>,
    field3: Box<dyn TestTrait>,
}

或者如果类型实现了该特质本身

use partial_eq_dyn::{AsAny, DynPartialEq};
use partial_eq_dyn_derive::{AsAny, DynPartialEq, PartialEqDyn};

trait TestTrait: core::fmt::Debug + AsAny + DynPartialEq {}

#[derive(AsAny, DynPartialEq, PartialEqDyn)]
struct TestStruct {
    field1: i32,
    field2: Box<i32>,
    field3: Option<dyn TestTrait>,
}

impl TestTrait for TestStruct {}

依赖项

~310–770KB
~18K SLoC