//! Bridges the async `kicad_worker` stream to a sync mpsc Receiver for the render loop. use std::sync::mpsc; use std::thread; use crate::ipc::worker::kicad_worker; use crate::ipc::Event; pub fn spawn_worker() -> mpsc::Receiver { let (tx, rx) = mpsc::channel(); thread::Builder::new() .name("layers-ipc".to_string()) .spawn(move || { let Ok(rt) = tokio::runtime::Builder::new_current_thread() .enable_all() .build() else { tracing::error!("layers-ipc: failed to build tokio runtime"); return; }; rt.block_on(async move { use iced::futures::StreamExt; let mut stream = Box::pin(kicad_worker()); while let Some(event) = stream.next().await { if tx.send(event).is_err() { break; } } }); }) .expect("spawn layers-ipc thread"); rx }