store/
main.rs

1use std::env;
2use std::net::SocketAddr;
3
4use log::info;
5use pastry_dht::error::*;
6use pastry_dht::{node::PastryNode, Config};
7
8struct KVStoreNode {
9    pastry_node: PastryNode,
10}
11
12impl KVStoreNode {
13    pub fn new(addr: SocketAddr, pub_addr: SocketAddr) -> Result<Self> {
14        let config = Config::new(16);
15        Ok(KVStoreNode {
16            pastry_node: PastryNode::new(config, addr, pub_addr)?,
17        })
18    }
19
20    pub async fn serve(&mut self, bootstrap_addr: Option<&str>) -> Result<()> {
21        self.pastry_node
22            .clone()
23            .bootstrap_and_serve(bootstrap_addr)
24            .await
25    }
26}
27
28#[tokio::main]
29async fn main() -> Result<()> {
30    let args: Vec<String> = env::args().collect();
31    let port = args
32        .get(1)
33        .ok_or(Error::Parse("missing port argument".into()))?;
34
35    let bootstrap_addr = args.get(2).map(|s| s.as_str());
36
37    env_logger::init();
38
39    let addr: SocketAddr = format!("0.0.0.0:{}", port).parse()?;
40    info!("Initializing node on {}", addr);
41
42    KVStoreNode::new(addr, addr)?.serve(bootstrap_addr).await
43}