use-query 0.0.1

Small query string utilities for RustUse
Documentation
use use_query::{
    QueryParam, append_query_param, build_query, get_query_param, has_query_param, parse_query,
    remove_query_param,
};

#[test]
fn parses_query_strings() {
    let params = parse_query("page=2&lang=en");

    assert_eq!(params.len(), 2);
    assert_eq!(params[0].key, "page");
    assert_eq!(params[0].value.as_deref(), Some("2"));
}

#[test]
fn builds_query_strings() {
    let query = build_query(&[
        QueryParam {
            key: String::from("page"),
            value: Some(String::from("2")),
        },
        QueryParam {
            key: String::from("draft"),
            value: None,
        },
    ]);

    assert_eq!(query, "page=2&draft");
}

#[test]
fn supports_repeated_keys() {
    let params = parse_query("tag=rust&tag=web");

    assert_eq!(params.len(), 2);
    assert_eq!(params[1].value.as_deref(), Some("web"));
}

#[test]
fn supports_empty_and_missing_values() {
    let params = parse_query("empty=&draft");

    assert_eq!(params[0].value.as_deref(), Some(""));
    assert_eq!(params[1].value, None);
}

#[test]
fn looks_up_params() {
    assert_eq!(
        get_query_param("page=2&lang=en", "lang").as_deref(),
        Some("en")
    );
    assert!(has_query_param("page=2&lang=en", "page"));
}

#[test]
fn removes_and_appends_params() {
    assert_eq!(remove_query_param("page=2&lang=en", "page"), "lang=en");
    assert_eq!(append_query_param("page=2", "lang", "en"), "page=2&lang=en");
}

#[test]
fn handles_empty_input() {
    assert!(parse_query("").is_empty());
    assert_eq!(append_query_param("", "page", "2"), "page=2");
}