34 lines
1.0 KiB
Rust
34 lines
1.0 KiB
Rust
//! 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<Event> {
|
|
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
|
|
}
|