I would like to learn how to update a managed state once its been passed into a thread.
So far I have
...
tauri::Builder::default()
.setup(|app| {
app.manage(LockedAppState(Default::default()));
let handle = app.handle().clone();
tauri::async_runtime::spawn( async move {
discovery(handle).await;
});
Ok(())
})
... ```
then in the udp discovery thread
```Rust
...
pub async fn discovery(app_handle: AppHandle) {
//== Create the mDNS daemon
//== Browse for "_osc._udp.local." services
let mdns = ServiceDaemon::new().expect("Failed to create mDNS daemon");
let service_type = "_osc._udp.local.";
let receiver = mdns
.browse(service_type)
.expect("Failed to browse for OSC services");
let mut event_stream = receiver.stream();
log::info!("mDNS listener starting.");
let nel_state: State<NelAppState> = app_handle.state::<NelAppState>().clone();
...```
Later, when the IP gets resolved, I want to write that into the state , but I cannot figure out how.
```Rust
...
let apu_remote = ApuRemote {
fullname: fullname.to_string(),
address,
port: info.get_port(),
};
nel_state.apu_remote = apu_remote.clone(); <--
error[E0594]: cannot assign to data in dereference of `tauri::State<'_, NelAppState>`
--> src/udp/mdns.rs:55:29
|
55 | ... nel_state.apu_remote = apu_remote.clone();
| ^^^^^^^^^^^^^^^^^^^^ cannot assign
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `tauri::State<'_, NelAppState>`
...```