ockam_api 0.48.0

Ockam's request-response API
Documentation
use ockam_multiaddr::proto::{DnsAddr, Ip4, Ip6, Secure, Tcp};
use ockam_multiaddr::{Match, MultiAddr, Protocol};
use std::time::Duration;

pub(crate) const MAX_RECOVERY_TIME: Duration = Duration::from_secs(10);
pub(crate) const MAX_CONNECT_TIME: Duration = Duration::from_secs(5);

pub(crate) fn starts_with_host_tcp(addr: &MultiAddr) -> Option<(MultiAddr, MultiAddr)> {
    let host_match = Match::any([DnsAddr::CODE, Ip4::CODE, Ip6::CODE]);
    if addr.matches(0, &[host_match, Tcp::CODE.into()]) {
        Some(addr.split(2))
    } else {
        None
    }
}

pub(crate) fn starts_with_secure(addr: &MultiAddr) -> Option<(MultiAddr, MultiAddr)> {
    if addr.matches(0, &[Secure::CODE.into()]) {
        Some(addr.split(2))
    } else {
        None
    }
}
#[cfg(test)]
mod tests {
    use ockam_multiaddr::MultiAddr;
    use crate::session::util::starts_with_host_tcp;

    #[test]
    fn starts_with_host_tcp_returns_split_address() {


        let m = MultiAddr::try_from("/dnsaddr/localhost/tcp/4000/service/api").unwrap();
        let (m1, m2) = starts_with_host_tcp(&m).unwrap();

        assert!(m1.to_string() == "/dnsaddr/localhost/tcp/4000" && m2.to_string() ==
            "/service/api");

    }

    #[test]
    fn starts_with_host_tcp_returns_none_when_address_is_not_tcp() {

        use ockam_multiaddr::MultiAddr;
        let m = MultiAddr::try_from("worker/1234").unwrap();

        assert!( starts_with_host_tcp(&m).is_none());

    }
}