fedimint_server/config/
peer_handle.rs

1use fedimint_core::config::P2PMessage;
2use fedimint_core::net::peers::DynP2PConnections;
3use fedimint_core::{NumPeers, PeerId};
4
5/// A handle passed to `ServerModuleInit::distributed_gen`
6///
7/// This struct encapsulates dkg data that the module should not have a direct
8/// access to, and implements higher level dkg operations available to the
9/// module to complete its distributed initialization inside the federation.
10#[non_exhaustive]
11pub struct PeerHandle<'a> {
12    // TODO: this whole type should be a part of a `fedimint-server` and fields here inaccessible
13    // to outside crates, but until `ServerModule` is not in `fedimint-server` this is impossible
14    #[doc(hidden)]
15    pub num_peers: NumPeers,
16    #[doc(hidden)]
17    pub identity: PeerId,
18    #[doc(hidden)]
19    pub connections: &'a DynP2PConnections<P2PMessage>,
20}
21
22impl<'a> PeerHandle<'a> {
23    pub fn new(
24        num_peers: NumPeers,
25        identity: PeerId,
26        connections: &'a DynP2PConnections<P2PMessage>,
27    ) -> Self {
28        Self {
29            num_peers,
30            identity,
31            connections,
32        }
33    }
34
35    pub fn num_peers(&self) -> NumPeers {
36        self.num_peers
37    }
38}