calimero_network/handlers/commands/
bootstrap.rs1use actix::{Context, Handler, Message, Response};
2use calimero_network_primitives::messages::Bootstrap;
3use eyre::eyre;
4use tokio::sync::oneshot;
5
6use crate::NetworkManager;
7
8impl Handler<Bootstrap> for NetworkManager {
9 type Result = Response<<Bootstrap as Message>::Result>;
10
11 fn handle(&mut self, _msg: Bootstrap, _ctx: &mut Context<Self>) -> Self::Result {
12 let (sender, receiver) = oneshot::channel();
13
14 match self.swarm.behaviour_mut().kad.bootstrap() {
15 Ok(query_id) => {
16 let _ignored = self.pending_bootstrap.insert(query_id, sender);
17 }
18 Err(err) => {
19 return Response::reply(Err(eyre!(err)));
20 }
21 }
22
23 Response::fut(async { receiver.await.expect("Sender not to be dropped.") })
24 }
25}