rfc2396 1.1.0

A library for validating strings as RFC2396-compliant URIs
Documentation
use anyhow::Context;

test_cases! {
    uri::relative_uri: {
        case_ampersand_count: "&count=one&count=two&count=three",
        case_ampersand_escaped: "&semi=%3B&dot=.&comma=%2C",
        case_ampersand_half: "&half=50%25",
        case_ampersand_keys: "&keys=semi,%3B,dot,.,comma,%2C",
        case_ampersand_list_ampersand_delim: "&list=red&list=green&list=blue",
        case_ampersand_list_comma_delim: "&list=red,green,blue",
        case_ampersand_var: "&var=val",
        case_ampersand_who: "&who=fred",
        case_ampersand_x_y: "&x=1024&y=768",
        case_ampersand_x_y_empty: "&x=1024&y=768&empty=",
        case_base_index_escaped: "http%3A%2F%2Fexample.com%2Fhome%2Findex",
        case_comma_delim: "semi=;,dot=.,comma=,",
        case_comma_delim_comma_equal: "semi,%3B,dot,.,comma,%2C",
        case_comma_delim_escaped: "semi=%3B,dot=.,comma=%2C",
        case_current_dir: ".",
        case_current_dir_g: "./g",
        case_current_dir_resource: "./resource.txt",
        case_current_dir_slash: "./",
        case_domain: "//g",
        case_domain_path_resource: "//example.com/path/resource.txt",
        case_example: "www.example.com",
        case_find: "find?year=1965&year=2000&year=2012",
        case_foo: "foo",
        case_foo_b_here: "/foo/b/here",
        case_foo_bar_here: "/foo/bar/here",
        case_foo_bar_x_here: "/foo/bar,1024/here",
        case_fred: "/fred",
        case_fred_2: "/fred/fred",
        case_fred_me_too: "/fred/me%2Ftoo",
        case_g: "g",
        case_g_slash: "g/",
        case_g_x: "g;x",
        case_g_y: "g?y",
        case_half: "50%25",
        case_half_fred: "/50%25/fred",
        case_hello: "Hello%20World!",
        case_hello_escaped: "Hello%20World%21",
        case_here_ref_foo_bar: "here?ref=/foo/bar",
        case_list_colours: "red,green,blue",
        case_list_numbers: "one,two,three",
        case_mapper: "/mapper?city=Newport%20Beach&state=CA",
        case_one_two_three_comma_delim: "/one,two,three",
        case_one_two_three_slash_delim: "/one/two/three",
        case_parent_dir: "..",
        case_parent_dir_2: "../..",
        case_parent_dir_2_g: "../../g",
        case_parent_dir_2_slash: "../../",
        case_parent_dir_g: "../g",
        case_parent_dir_resource: "../resource.txt",
        case_parent_dir_slash: "../",
        case_path_resource: "path/resource.txt",
        case_period_fred: ".fred",
        case_period_fred_2: ".fred.fred",
        case_period_half_fred: ".50%25.fred",
        case_red_green_blue_comma_delim: "/red,green,blue",
        case_red_green_blue_foo: "/red/green/blue/%2Ffoo",
        case_red_green_blue_slash_delim: "/red/green/blue",
        case_resource: "resource.txt",
        case_semi_count_list: ";count=one,two,three",
        case_semi_count_params: ";count=one;count=two;count=three",
        case_semi_delim: "semi,;,dot,.,comma,,",
        case_semi_empty: ";empty",
        case_semi_half: ";half=50%25",
        case_semi_hello: ";hello=Hello",
        case_semi_keys: ";keys=semi,%3B,dot,.,comma,%2C",
        case_semi_list_comma_delim: ";list=red,green,blue",
        case_semi_list_semi_delim: ";list=red;list=green;list=blue",
        case_semi_semi_delim_escaped: ";semi=%3B;dot=.;comma=%2C",
        case_semi_v_empty_who: ";v=6;empty;who=fred",
        case_semi_v_who: ";v=6;who=fred",
        case_semi_who: ";who=fred",
        case_semi_x: ";x",
        case_semi_x_y: ";x=1024;y=768",
        case_semi_x_y_empty: ";x=1024;y=768;empty",
        case_slash_comma_delim_escaped: "/semi,%3B,dot,.,comma,%2C",
        case_slash_delim_escaped: "/semi=%3B/dot=./comma=%2C",
        case_slash_g: "/g",
        case_slash_path_resource: "/path/resource.txt",
        case_slash_value: "/value",
        case_up_foo_barvalue_here: "up/foo/barvalue/here",
        case_v_value: "/v/value",
        case_val: "val",
        case_value: "value",
        case_value_here: "/value/1024/here",
        case_value_slash: "/value/",
        case_wiki: "/wiki/Main_Page",
        case_x: "X",
        case_x_hello_escaped_y: "1024,Hello%20World%21,768",
        case_x_hello_y: "1024,Hello%20World!,768",
        case_x_period: "X.",
        case_x_period_comma_delim: "X.red,green,blue",
        case_x_period_period_delim: "X.red.green.blue",
        case_x_semi_dot_comma_comma_delim: "X.semi,%3B,dot,.,comma,%2C",
        case_x_semi_dot_comma_period_delim: "X.semi=%3B.dot=..comma=%2C",
        case_x_val: "X.val",
        case_x_value: "X.value",
        case_x_y: "1024,768"
    }
}