diff options
| -rw-r--r-- | src/parse_host_port.rs | 5 | ||||
| -rw-r--r-- | src/uri.rs | 301 | ||||
| -rw-r--r-- | src/validate_ipv4_address.rs | 6 | 
3 files changed, 43 insertions, 269 deletions
| diff --git a/src/parse_host_port.rs b/src/parse_host_port.rs index c5cdcc6..0f02d48 100644 --- a/src/parse_host_port.rs +++ b/src/parse_host_port.rs @@ -220,10 +220,7 @@ where      T: AsRef<str>,  {      let (machine, host_port_string) = State::new(host_port_string.as_ref()); -    host_port_string -        .chars() -        .try_fold(machine, |machine, c| machine.next(c))? -        .finalize() +    host_port_string.chars().try_fold(machine, State::next)?.finalize()  }  #[cfg(test)] @@ -176,8 +176,9 @@ impl Uri {      /// # Errors      ///      /// Since fragments may contain non-UTF8 byte sequences, this function may -    /// return [`Error::CannotExpressAsUtf8`](enum.Error.html#variant. -    /// CannotExpressAsUtf8). +    /// return [`Error::CannotExpressAsUtf8`][CannotExpressAsUtf8]. +    /// +    /// [CannotExpressAsUtf8]: enum.Error.html#variant.CannotExpressAsUtf8      #[must_use = "use the fragment return value silly programmer"]      pub fn fragment_to_string(&self) -> Result<Option<String>, Error> {          self.fragment() @@ -1442,268 +1443,48 @@ mod tests {                  expected_uri_string: &'static str,              }          ); +        #[rustfmt::skip]          let test_vectors: &[TestVector] = &[              // general test vectors -            // scheme      userinfo     host                     port -            // path         query           fragment     expected_uri_string -            ( -                Some("http"), -                Some("bob"), -                Some("www.example.com"), -                Some(8080), -                "/abc/def", -                Some("foobar"), -                Some("ch2"), -                "http://bob@www.example.com:8080/abc/def?foobar#ch2", -            ) -                .into(), -            ( -                Some("http"), -                Some("bob"), -                Some("www.example.com"), -                Some(0), -                "", -                Some("foobar"), -                Some("ch2"), -                "http://bob@www.example.com:0?foobar#ch2", -            ) -                .into(), -            ( -                Some("http"), -                Some("bob"), -                Some("www.example.com"), -                Some(0), -                "", -                Some("foobar"), -                Some(""), -                "http://bob@www.example.com:0?foobar#", -            ) -                .into(), -            ( -                None, -                None, -                Some("example.com"), -                None, -                "", -                Some("bar"), -                None, -                "//example.com?bar", -            ) -                .into(), -            ( -                None, -                None, -                Some("example.com"), -                None, -                "", -                Some(""), -                None, -                "//example.com?", -            ) -                .into(), -            ( -                None, -                None, -                Some("example.com"), -                None, -                "", -                None, -                None, -                "//example.com", -            ) -                .into(), -            ( -                None, -                None, -                Some("example.com"), -                None, -                "/", -                None, -                None, -                "//example.com/", -            ) -                .into(), -            ( -                None, -                None, -                Some("example.com"), -                None, -                "/xyz", -                None, -                None, -                "//example.com/xyz", -            ) -                .into(), -            ( -                None, -                None, -                Some("example.com"), -                None, -                "/xyz/", -                None, -                None, -                "//example.com/xyz/", -            ) -                .into(), -            (None, None, None, None, "/", None, None, "/").into(), -            (None, None, None, None, "/xyz", None, None, "/xyz").into(), -            (None, None, None, None, "/xyz/", None, None, "/xyz/").into(), -            (None, None, None, None, "", None, None, "").into(), -            (None, None, None, None, "xyz", None, None, "xyz").into(), -            (None, None, None, None, "xyz/", None, None, "xyz/").into(), -            (None, None, None, None, "", Some("bar"), None, "?bar").into(), -            ( -                Some("http"), -                None, -                None, -                None, -                "", -                Some("bar"), -                None, -                "http:?bar", -            ) -                .into(), -            (Some("http"), None, None, None, "", None, None, "http:").into(), -            ( -                Some("http"), -                None, -                Some("::1"), -                None, -                "", -                None, -                None, -                "http://[::1]", -            ) -                .into(), -            ( -                Some("http"), -                None, -                Some("::1.2.3.4"), -                None, -                "", -                None, -                None, -                "http://[::1.2.3.4]", -            ) -                .into(), -            ( -                Some("http"), -                None, -                Some("1.2.3.4"), -                None, -                "", -                None, -                None, -                "http://1.2.3.4", -            ) -                .into(), -            (None, None, None, None, "", None, None, "").into(), -            ( -                Some("http"), -                Some("bob"), -                None, -                None, -                "", -                Some("foobar"), -                None, -                "http://bob@?foobar", -            ) -                .into(), -            ( -                None, -                Some("bob"), -                None, -                None, -                "", -                Some("foobar"), -                None, -                "//bob@?foobar", -            ) -                .into(), -            (None, Some("bob"), None, None, "", None, None, "//bob@").into(), +            // scheme      userinfo     host                     port        path         query           fragment     expected_uri_string +            (Some("http"), Some("bob"), Some("www.example.com"), Some(8080), "/abc/def",  Some("foobar"), Some("ch2"), "http://bob@www.example.com:8080/abc/def?foobar#ch2").into(), +            (Some("http"), Some("bob"), Some("www.example.com"), Some(0),    "",          Some("foobar"), Some("ch2"), "http://bob@www.example.com:0?foobar#ch2").into(), +            (Some("http"), Some("bob"), Some("www.example.com"), Some(0),    "",          Some("foobar"), Some(""),    "http://bob@www.example.com:0?foobar#").into(), +            (None,         None,        Some("example.com"),     None,       "",          Some("bar"),    None,        "//example.com?bar").into(), +            (None,         None,        Some("example.com"),     None,       "",          Some(""),       None,        "//example.com?").into(), +            (None,         None,        Some("example.com"),     None,       "",          None,           None,        "//example.com").into(), +            (None,         None,        Some("example.com"),     None,       "/",         None,           None,        "//example.com/").into(), +            (None,         None,        Some("example.com"),     None,       "/xyz",      None,           None,        "//example.com/xyz").into(), +            (None,         None,        Some("example.com"),     None,       "/xyz/",     None,           None,        "//example.com/xyz/").into(), +            (None,         None,        None,                    None,       "/",         None,           None,        "/").into(), +            (None,         None,        None,                    None,       "/xyz",      None,           None,        "/xyz").into(), +            (None,         None,        None,                    None,       "/xyz/",     None,           None,        "/xyz/").into(), +            (None,         None,        None,                    None,       "",          None,           None,        "").into(), +            (None,         None,        None,                    None,       "xyz",       None,           None,        "xyz").into(), +            (None,         None,        None,                    None,       "xyz/",      None,           None,        "xyz/").into(), +            (None,         None,        None,                    None,       "",          Some("bar"),    None,        "?bar").into(), +            (Some("http"), None,        None,                    None,       "",          Some("bar"),    None,        "http:?bar").into(), +            (Some("http"), None,        None,                    None,       "",          None,           None,        "http:").into(), +            (Some("http"), None,        Some("::1"),             None,       "",          None,           None,        "http://[::1]").into(), +            (Some("http"), None,        Some("::1.2.3.4"),       None,       "",          None,           None,        "http://[::1.2.3.4]").into(), +            (Some("http"), None,        Some("1.2.3.4"),         None,       "",          None,           None,        "http://1.2.3.4").into(), +            (None,         None,        None,                    None,       "",          None,           None,        "").into(), +            (Some("http"), Some("bob"), None,                    None,       "",          Some("foobar"), None,        "http://bob@?foobar").into(), +            (None,         Some("bob"), None,                    None,       "",          Some("foobar"), None,        "//bob@?foobar").into(), +            (None,         Some("bob"), None,                    None,       "",          None,           None,        "//bob@").into(), +              // percent-encoded character test vectors -            // scheme      userinfo      host                     port -            // path        query            fragment     expected_uri_string -            ( -                Some("http"), -                Some("b b"), -                Some("www.example.com"), -                Some(8080), -                "/abc/def", -                Some("foobar"), -                Some("ch2"), -                "http://b%20b@www.example.com:8080/abc/def?foobar#ch2", -            ) -                .into(), -            ( -                Some("http"), -                Some("bob"), -                Some("www.e ample.com"), -                Some(8080), -                "/abc/def", -                Some("foobar"), -                Some("ch2"), -                "http://bob@www.e%20ample.com:8080/abc/def?foobar#ch2", -            ) -                .into(), -            ( -                Some("http"), -                Some("bob"), -                Some("www.example.com"), -                Some(8080), -                "/a c/def", -                Some("foobar"), -                Some("ch2"), -                "http://bob@www.example.com:8080/a%20c/def?foobar#ch2", -            ) -                .into(), -            ( -                Some("http"), -                Some("bob"), -                Some("www.example.com"), -                Some(8080), -                "/abc/def", -                Some("foo ar"), -                Some("ch2"), -                "http://bob@www.example.com:8080/abc/def?foo%20ar#ch2", -            ) -                .into(), -            ( -                Some("http"), -                Some("bob"), -                Some("www.example.com"), -                Some(8080), -                "/abc/def", -                Some("foobar"), -                Some("c 2"), -                "http://bob@www.example.com:8080/abc/def?foobar#c%202", -            ) -                .into(), -            ( -                Some("http"), -                Some("bob"), -                Some("ሴ.example.com"), -                Some(8080), -                "/abc/def", -                Some("foobar"), -                None, -                "http://bob@%E1%88%B4.example.com:8080/abc/def?foobar", -            ) -                .into(), +            // scheme      userinfo      host                     port        path        query            fragment     expected_uri_string +            (Some("http"), Some("b b"),  Some("www.example.com"), Some(8080), "/abc/def", Some("foobar"),  Some("ch2"), "http://b%20b@www.example.com:8080/abc/def?foobar#ch2").into(), +            (Some("http"), Some("bob"),  Some("www.e ample.com"), Some(8080), "/abc/def", Some("foobar"),  Some("ch2"), "http://bob@www.e%20ample.com:8080/abc/def?foobar#ch2").into(), +            (Some("http"), Some("bob"),  Some("www.example.com"), Some(8080), "/a c/def", Some("foobar"),  Some("ch2"), "http://bob@www.example.com:8080/a%20c/def?foobar#ch2").into(), +            (Some("http"), Some("bob"),  Some("www.example.com"), Some(8080), "/abc/def", Some("foo ar"),  Some("ch2"), "http://bob@www.example.com:8080/abc/def?foo%20ar#ch2").into(), +            (Some("http"), Some("bob"),  Some("www.example.com"), Some(8080), "/abc/def", Some("foobar"),  Some("c 2"), "http://bob@www.example.com:8080/abc/def?foobar#c%202").into(), +            (Some("http"), Some("bob"),  Some("ሴ.example.com"),   Some(8080), "/abc/def", Some("foobar"),  None,        "http://bob@%E1%88%B4.example.com:8080/abc/def?foobar").into(), +              // normalization of IPv6 address hex digits -            // scheme      userinfo     host                   port        path -            // query           fragment     expected_uri_string -            ( -                Some("http"), -                Some("bob"), -                Some("fFfF::1"), -                Some(8080), -                "/abc/def", -                Some("foobar"), -                Some("c 2"), -                "http://bob@[ffff::1]:8080/abc/def?foobar#c%202", -            ) -                .into(), +            // scheme      userinfo     host                   port        path        query           fragment     expected_uri_string +            (Some("http"), Some("bob"), Some("fFfF::1"),       Some(8080), "/abc/def", Some("foobar"), Some("c 2"), "http://bob@[ffff::1]:8080/abc/def?foobar#c%202").into(),          ];          for test_vector in test_vectors {              let mut uri = Uri::default(); diff --git a/src/validate_ipv4_address.rs b/src/validate_ipv4_address.rs index 3c524ce..3c0b739 100644 --- a/src/validate_ipv4_address.rs +++ b/src/validate_ipv4_address.rs @@ -101,11 +101,7 @@ pub fn validate_ipv4_address<T>(address: T) -> Result<(), Error>  where      T: AsRef<str>,  { -    address -        .as_ref() -        .chars() -        .try_fold(State::new(), |machine, c| machine.next(c))? -        .finalize() +    address.as_ref().chars().try_fold(State::new(), State::next)?.finalize()  }  #[cfg(test)] | 
