openmina_node_native/service/
mod.rs

1mod builder;
2pub use builder::*;
3
4use openmina_node_common::p2p::TaskSpawner;
5pub use openmina_node_common::NodeService;
6
7use node::core::thread;
8
9#[derive(Clone)]
10pub struct P2pTaskSpawner {}
11
12impl TaskSpawner for P2pTaskSpawner {
13    fn spawn_main<F>(&self, name: &str, fut: F)
14    where
15        F: 'static + Send + std::future::Future<Output = ()>,
16    {
17        let runtime = tokio::runtime::Builder::new_current_thread()
18            .enable_all()
19            .build()
20            .unwrap();
21        thread::Builder::new()
22            .name(format!("openmina_p2p_{name}"))
23            .spawn(move || {
24                let local_set = tokio::task::LocalSet::new();
25                local_set.block_on(&runtime, fut);
26            })
27            .unwrap();
28    }
29}