uris 0.1.1

Implementation of IETF RFC 3986, Uniform Resource Identifier (URI)
Documentation
/// This enumerates the various places where an error might occur parsing a
/// URI.
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Context {
    /// This is the fragment of the URI, such as `#baz` in
    /// `http://www.example.com/foo?bar#baz`.
    Fragment,

    /// This is the host name of the URI, such as `www.example.com` in
    /// `http://www.example.com/foo?bar#baz`.
    Host,

    /// This is the IPv4 portion of the IPv6 host name in the URI, such as
    /// `1.2.3.4` in `http://[::ffff:1.2.3.4]/foo?bar#baz`.
    Ipv4Address,

    /// This is the IPv6 host name in the URI, such as
    /// `::ffff:1.2.3.4` in `http://[::ffff:1.2.3.4]/foo?bar#baz`.
    Ipv6Address,

    /// This is the `IPvFuture` host name in the URI, such as
    /// `v7.aB` in `http://[v7.aB]/foo?bar#baz`.
    IpvFuture,

    /// This is the path of the URI, such as `/foo` in
    /// `http://www.example.com/foo?bar#baz`.
    Path,

    /// This is the query of the URI, such as `?bar` in
    /// `http://www.example.com/foo?bar#baz`.
    Query,

    /// This is the scheme of the URI, such as `http` in
    /// `http://www.example.com/foo?bar#baz`.
    Scheme,

    /// This is the scheme of the URI, such as `nobody` in
    /// `http://nobody@www.example.com/foo?bar#baz`.
    Userinfo,
}

impl std::fmt::Display for Context {
    fn fmt(
        &self,
        f: &mut std::fmt::Formatter<'_>,
    ) -> std::fmt::Result {
        match self {
            Context::Fragment => write!(f, "fragment"),
            Context::Host => write!(f, "host"),
            Context::Ipv4Address => write!(f, "IPv4 address"),
            Context::Ipv6Address => write!(f, "IPv6 address"),
            Context::IpvFuture => write!(f, "IPvFuture"),
            Context::Path => write!(f, "path"),
            Context::Query => write!(f, "query"),
            Context::Scheme => write!(f, "scheme"),
            Context::Userinfo => write!(f, "user info"),
        }
    }
}