/// 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"), } } }