1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//! Seed and SeedLoader use for getting peers from endpoint.
use async_trait::async_trait;
use serde::Deserialize;
use serde::Serialize;

use crate::prelude::rings_core::dht::Did;

/// A list contains SeedPeer.
#[derive(Deserialize, Serialize, Debug)]
pub struct Seed {
    pub peers: Vec<SeedPeer>,
}

/// SeedPeer contain `Did` and `endpoint`.
#[derive(Deserialize, Serialize, Debug)]
pub struct SeedPeer {
    /// an unique identify.
    pub did: Did,
    /// remote client endpoint
    pub endpoint: String,
}

/// implement load method.
#[cfg_attr(feature = "node", async_trait)]
#[cfg_attr(not(feature = "node"), async_trait(?Send))]
pub trait SourceLoader {
    async fn load(source: &str) -> anyhow::Result<Self>
    where Self: Sized;
}