When I write React component they often include properties that must implement Eq
. This puts restrictions on closures that can be used for them. It can be easily workaround by implementing it manually:
// property that needs to have a callback
trait Validator {
fn validate(&self, value: f32) -> bool;
}
#[component]
fn MyComponent<MC: MyCallback>(callback: MC) {
// ...
}
// Usage
#[component]
fn DoSomething(min_val: f32) -> Element {
#[derive(Clone, Eq, PartialEq)]
struct BiggerThanMinVal {
min_val: f32
}
impl Validator for BiggerThanMinVal {
fn validate(&self, value: f32) -> bool {
value > self.min_value
}
}
rsx! {
MyComponent {
callback: BiggerThanMinVal { min_value }
}
}
}
There is a lot of boilerplate for meaning to have:
#[component]
fn MyComponent(callback: impl Fn() -> bool + Eq) {
// ...
}
// Usage
#[component]
fn DoSomething(min_val: f32) -> Element {
rsx! {
MyComponent {
callback: move |value| value > min_value
}
}
}
However currently closures do not implement Eq
. It would be nice to implement Eq
:
#[component]
fn DoSomething(min_val: f32) -> Element {
rsx! {
MyComponent {
callback: move #[derive(Eq)] |value| value > min_value
}
}
}
That would desugar to deriving equality for closure structure.