/// Parameter for [`ReflectEq`]. #[derive(Debug, Default)] pub struct ReflectEqMode { /// When `true`, `NaN` values are considered equal to each other. pub nan_equal: bool, _non_exhausitve: (), } impl ReflectEqMode { /// Default equality, similar to `#[derive(PartialEq)]`. pub fn default() -> ReflectEqMode { Default::default() } /// Equality where float `NaN` values are considered equal to each other. /// /// Useful in tests. pub fn nan_equal() -> ReflectEqMode { ReflectEqMode { nan_equal: true, ..Default::default() } } } /// Special version of eq. /// /// With `mode` [`ReflectEqMode::default()`], should be equivalent /// to `#[derive(PartialEq)]`. pub trait ReflectEq { /// Perform the equality comparison. fn reflect_eq(&self, that: &Self, mode: &ReflectEqMode) -> bool; }