xitca-http 0.9.0

http library for xitca
Documentation
use crate::http::Version;

/// A helper trait for get a protocol from certain types.
pub trait AsVersion {
    fn as_version(&self) -> Version;

    #[cfg(feature = "__tls")]
    fn from_alpn<B: AsRef<[u8]>>(proto: B) -> Version {
        if proto.as_ref().windows(2).any(|window| window == b"h2") {
            Version::HTTP_2
        } else {
            Version::HTTP_11
        }
    }
}

impl AsVersion for xitca_io::net::Stream {
    #[inline]
    fn as_version(&self) -> Version {
        match *self {
            Self::Tcp(..) => Version::HTTP_11,
            #[cfg(unix)]
            Self::Unix(..) => Version::HTTP_11,
            #[cfg(feature = "http3")]
            Self::Udp(..) => Version::HTTP_3,
        }
    }
}

impl AsVersion for xitca_io::net::TcpStream {
    #[inline]
    fn as_version(&self) -> Version {
        Version::HTTP_11
    }
}

#[cfg(unix)]
impl AsVersion for xitca_io::net::UnixStream {
    #[inline]
    fn as_version(&self) -> Version {
        Version::HTTP_11
    }
}

#[cfg(feature = "io-uring")]
impl AsVersion for xitca_io::net::io_uring::TcpStream {
    #[inline]
    fn as_version(&self) -> Version {
        Version::HTTP_11
    }
}

#[cfg(unix)]
#[cfg(feature = "io-uring")]
impl AsVersion for xitca_io::net::io_uring::UnixStream {
    #[inline]
    fn as_version(&self) -> Version {
        Version::HTTP_11
    }
}