| Crates.io | urlable |
| lib.rs | urlable |
| version | 0.2.0 |
| created_at | 2023-11-21 15:14:10.310832+00 |
| updated_at | 2024-11-02 17:43:08.441542+00 |
| description | A comprehensive URL manipulation library for Rust, providing utilities for parsing, encoding, and manipulating URLs with support for query strings, path manipulation, punycode domains and more |
| homepage | |
| repository | https://github.com/ihavecoke/urlable |
| max_upload_size | |
| id | 1044322 |
| size | 93,092 |
A comprehensive URL manipulation library for Rust, providing utilities for parsing, encoding, and manipulating URLs.
Warning: If you are upgrading from urlable 0.1.0 to 0.2.0, please be aware of the following breaking changes:
QueryObject instead of HashMapserde_json::Value type to support more complex data structuresNote: urlable 0.1.0 is no longer maintained. We strongly recommend upgrading to the latest 0.2.0 version for better functionality and security updates.
Add this to your Cargo.toml:
[dependencies]
urlable = "0.1.0"
use urlable::parse_url;
let url = parse_url("https://example.com/path?query=1#hash");
assert_eq!(url.protocol, Some("https".to_string()));
assert_eq!(url.pathname, "/path");
assert_eq!(url.search, "?query=1");
assert_eq!(url.hash, "#hash");
use urlable::{parse_query, stringify_query};
use std::collections::HashMap;
// Parse query string
let query = parse_query::<HashMap<String, String>>("foo=bar&baz=qux");
assert_eq!(query.get("foo").unwrap(), "bar");
// Build query string
let mut query = HashMap::new();
query.insert("key".to_string(), "value".to_string());
let query_string = stringify_query(&query); // "key=value"
use urlable::{encode_path, decode_path, encode_query_value, decode_query_value};
// Path encoding
assert_eq!(encode_path("/path with spaces/"), "/path%20with%20spaces/");
assert_eq!(decode_path("/path%20with%20spaces/"), "/path with spaces/");
// Query value encoding
assert_eq!(encode_query_value("hello world"), "hello+world");
assert_eq!(decode_query_value("hello+world"), "hello world");
use urlable::{with_trailing_slash, without_trailing_slash, clean_double_slashes};
assert_eq!(with_trailing_slash("/path", false), "/path/");
assert_eq!(without_trailing_slash("/path/", false), "/path");
assert_eq!(clean_double_slashes("//path//to////file"), "/path/to/file");
use urlable::{get_query, with_query};
// Parse query parameters
let query = get_query("https://example.com/path?foo=bar&baz=qux");
assert_eq!(query.get("foo").unwrap(), "bar");
// Build query string
let query = HashMap::new();
query.insert("key".to_string(), "value".to_string());
let query_string = with_query(&query); // "foo=bar&baz=qux"
parse_url(input: &str) -> ParsedURLparse_url_with_protocol(input: &str, proto: &str) -> ParsedURLparse_path(input: &str) -> ParsedURLparse_auth(input: &str) -> ParsedAuthparse_host(input: &str) -> ParsedHostencode(text: &str) -> Stringencode_hash(text: &str) -> Stringencode_query_value(input: &str) -> Stringencode_query_key(text: &str) -> Stringencode_path(text: &str) -> Stringencode_param(text: &str) -> Stringencode_host(text: &str) -> Stringdecode(text: &str) -> Stringdecode_path(text: &str) -> Stringdecode_query_key(text: &str) -> Stringdecode_query_value(text: &str) -> Stringwith_trailing_slash(input: &str, respect_query_fragment: bool) -> Stringwithout_trailing_slash(input: &str, respect_query_fragment: bool) -> Stringwith_leading_slash(input: &str) -> Stringwithout_leading_slash(input: &str) -> Stringclean_double_slashes(input: &str) -> Stringjoin_url(base: &str, input: &str) -> Stringjoin_relative_url(inputs: &[&str]) -> Stringparse_query<T: Default>(parameters_string: &str) -> Tstringify_query(query: &QueryObject) -> Stringencode_query_item(key: &str, value: &QueryValue) -> Stringget_query(url: &str) -> QueryObjectwith_query(query: &QueryObject) -> String