iota_network/discovery/
server.rs1use std::sync::{Arc, RwLock};
6
7use anemo::{Request, Response};
8use serde::{Deserialize, Serialize};
9
10use super::{Discovery, NodeInfo, State};
11
12#[derive(Clone, Debug, Serialize, Deserialize)]
13pub struct GetKnownPeersResponse {
14 pub own_info: NodeInfo,
15 pub known_peers: Vec<NodeInfo>,
16}
17
18pub(super) struct Server {
19 pub(super) state: Arc<RwLock<State>>,
20}
21
22#[anemo::async_trait]
23impl Discovery for Server {
24 async fn get_known_peers(
25 &self,
26 _request: Request<()>,
27 ) -> Result<Response<GetKnownPeersResponse>, anemo::rpc::Status> {
28 let state = self.state.read().unwrap();
29 let own_info = state
30 .our_info
31 .clone()
32 .ok_or_else(|| anemo::rpc::Status::internal("own_info has not been initialized yet"))?;
33 let known_peers = state.known_peers.values().cloned().collect();
34
35 Ok(Response::new(GetKnownPeersResponse {
36 own_info,
37 known_peers,
38 }))
39 }
40}