I'm trying to create two buttons (btn1, btn2) handling events (simple 'push' aka 'onclick'), they should disable each other
let mut btn1 = button::Button::new(100, 100, 100, 50, "BTN1");
let mut btn2 = button::Button::new(300, 100, 150, 50, "BTN2");
// handle btn1 click
btn1.handle(move |thisBtn, evt| match evt {
enums::Event::Push => {
clicked(thisBtn, &mut btn2);
true
}
_ => false,
});
// handle btn2 click
btn2.handle(move |thisBtn, evt| match evt {
enums::Event::Push => {
clicked(thisBtn, &mut btn1);
true
}
_ => false,
});
// both buttons should be mutable, or activate/deactivate wont work
fn clicked(thisBtn: &mut button::Button, otherBtn: &mut button::Button) {
thisBtn.deactivate();
otherBtn.activate();
}
error[E0382]: borrow of moved value: `btn2`
--> src\main.rs:18:5
|
6 | let mut btn2 = button::Button::new(300, 100, 150, 50, "BTN2");
| -------- move occurs because `btn2` has type `Button`, which does not implement the `Copy` trait
...
9 | btn1.handle(move |thisBtn, evt| match evt {
| ------------------- value moved into closure here
10 | enums::Event::Push => {
11 | clicked(thisBtn, &mut btn2);
| ---- variable moved due to use in closure
...
18 | / btn2.handle(move |thisBtn, evt| match evt {
19 | | enums::Event::Push => {
20 | | clicked(thisBtn, &mut btn1);
21 | | true
22 | | }
23 | | _ => false,
24 | | });
| |______^ value borrowed here after move
For more information about this error, try `rustc --explain E0382`.
Okay, I understand that I move the borrowed btn2 so later I can't use it again. So I tried to remove move
so btn2 stays in the current scope, but failed:
error[E0373]: closure may outlive the current function, but it borrows `btn2`, which is owned by the current function