ockam_multiaddr 0.6.0

An implementation of multiformats.io/multiaddr
Documentation
use std::time::Instant;

const SAMPLE: &str =
    "/ip4/127.0.0.1/tcp/80/ip4/192.168.0.1/ip6/::1/tcp/443/dnsaddr/example.com/tcp/80";

#[test]
fn benchmark() {
    bench("multiaddr/read-string: ", || {
        multiaddr::Multiaddr::try_from(SAMPLE).is_ok()
    });
    bench("ockam_multiaddr/read-string: ", || {
        ockam_multiaddr::MultiAddr::try_from(SAMPLE).is_ok()
    });

    let ma = multiaddr::Multiaddr::try_from(SAMPLE).unwrap();

    bench("multiaddr/read-bytes: ", || {
        multiaddr::Multiaddr::from_iter(ma.into_iter());
        true
    });
    bench("ockam_multiaddr/read-bytes: ", || {
        ockam_multiaddr::MultiAddr::try_from(ma.as_ref()).is_ok()
    });
}

fn bench(label: &str, f: impl Fn() -> bool) {
    const ROUNDS: u32 = 1000;
    let start = Instant::now();
    for _ in 0..ROUNDS {
        assert!(f())
    }
    eprintln!("{label} {:0.2?}", start.elapsed() / ROUNDS)
}