rust-ipfs 0.15.0

IPFS node implementation
Documentation
use clap::Parser;
use rust_ipfs::builder::DefaultIpfsBuilder as IpfsBuilder;
use rust_ipfs::p2p::MultiaddrExt;
use rust_ipfs::{Ipfs, Multiaddr};

#[derive(Debug, Parser)]
#[clap(name = "rendezvous-client")]
struct Opt {
    rendezvous_server: Multiaddr,
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let opt = Opt::parse();

    tracing_subscriber::fmt::init();

    let ipfs: Ipfs = IpfsBuilder::new()
        .with_rendezvous_client()
        .enable_tcp()
        .add_listening_addr("/ip4/0.0.0.0/tcp/0".parse()?)
        .start()
        .await?;

    let rendezvous_peer_id = opt
        .rendezvous_server
        .peer_id()
        .expect("A peer id apart of the multiaddr");

    ipfs.connect(opt.rendezvous_server).await?;

    ipfs.rendezvous_register_namespace("rust-ipfs", None, rendezvous_peer_id)
        .await?;

    let list = ipfs
        .rendezvous_namespace_discovery("rust-ipfs", None, rendezvous_peer_id)
        .await?;

    for (peer, addrs) in list {
        println!("Discovered peer {peer} with the following addresses");
        for addr in addrs {
            println!("- {addr}");
        }
        println!();
    }

    Ok(())
}