Skip to main content

rings_node/
seed.rs

1//! Seed and SeedLoader use for getting peers from endpoint.
2
3use rings_rpc::protos::rings_node::ConnectWithSeedRequest;
4use serde::Deserialize;
5use serde::Serialize;
6
7use crate::error::Error;
8
9/// A list contains SeedPeer.
10#[derive(Deserialize, Serialize, Debug)]
11pub struct Seed {
12    pub peers: Vec<SeedPeer>,
13}
14
15/// SeedPeer contain `Did` and `endpoint`.
16#[derive(Deserialize, Serialize, Debug)]
17pub struct SeedPeer {
18    /// an unique identify.
19    pub did: String,
20    /// remote client endpoint
21    pub url: String,
22}
23
24impl TryFrom<ConnectWithSeedRequest> for Seed {
25    type Error = Error;
26
27    fn try_from(req: ConnectWithSeedRequest) -> Result<Self, Error> {
28        let mut peers = Vec::new();
29
30        for peer in req.peers {
31            peers.push(SeedPeer {
32                did: peer.did,
33                url: peer.url,
34            });
35        }
36
37        Ok(Seed { peers })
38    }
39}
40
41impl Seed {
42    pub fn into_connect_with_seed_request(self) -> ConnectWithSeedRequest {
43        let mut peers = Vec::new();
44
45        for peer in self.peers {
46            peers.push(rings_rpc::protos::rings_node::SeedPeer {
47                did: peer.did,
48                url: peer.url,
49            });
50        }
51
52        ConnectWithSeedRequest { peers }
53    }
54}