#trait-object #dyn

no-std dyn-eq

Test equality between trait objects

3 releases

0.1.3 Jul 20, 2023
0.1.2 Feb 17, 2023
0.1.1 Feb 17, 2023
0.1.0 Feb 16, 2023

#1396 in Rust patterns

Download history 276/week @ 2024-07-23 341/week @ 2024-07-30 547/week @ 2024-08-06 590/week @ 2024-08-13 611/week @ 2024-08-20 668/week @ 2024-08-27 676/week @ 2024-09-03 845/week @ 2024-09-10 783/week @ 2024-09-17 1043/week @ 2024-09-24 655/week @ 2024-10-01 600/week @ 2024-10-08 1007/week @ 2024-10-15 749/week @ 2024-10-22 764/week @ 2024-10-29 644/week @ 2024-11-05

3,279 downloads per month
Used in 4 crates (2 directly)

MPL-2.0 license

13KB
123 lines

Test equality between trait objects

github crates.io doc.rs license build passively-maintained

This crate provides a DynEq trait which permit comparing trait objects. If the two objects are instances of different structs, they will always be not equal. If they are instances of the same struct, the struct's Eq will be used.

Example

use dyn_eq::DynEq;

trait MyTrait: DynEq {}
dyn_eq::eq_trait_object!(MyTrait);

impl MyTrait for u8 {}
impl MyTrait for u16 {}

let a: &dyn MyTrait = &5u8;
let a_bis: &dyn MyTrait = &5u8;
let b: &dyn MyTrait = &10u8;
let c: &dyn MyTrait = &5u16;
let d: &dyn MyTrait = &10u16;

// Same type, same value
assert!(a == a_bis);
// Same type, different value
assert!(a != b);
// Different type, different value
assert!(a != d);
// Different type, same value
// Even if the value is the same, the fact that it's a diffrent type means it's not equal
assert!(a != c);

// Now data structures containing Box<dyn MyTrait> can derive Eq.
#[derive(PartialEq, Eq)]
struct Container {
    field: Box<dyn MyTrait>
}

No runtime deps

Features