1 unstable release

0.1.0 Feb 11, 2023

#2507 in Parser implementations

Download history 154/week @ 2024-11-16 126/week @ 2024-11-23 107/week @ 2024-11-30 57/week @ 2024-12-07 59/week @ 2024-12-14 2/week @ 2024-12-21 47/week @ 2024-12-28 119/week @ 2025-01-04 121/week @ 2025-01-11 230/week @ 2025-01-18 150/week @ 2025-01-25 161/week @ 2025-02-01 244/week @ 2025-02-08 193/week @ 2025-02-15 226/week @ 2025-02-22 317/week @ 2025-03-01

1,012 downloads per month

MIT license

36KB
963 lines

url-lite

Port of the URL parser from nodejs/http-parser to Rust

Features

  • #[no_std]
  • No heap allocations, returns a struct of &str
  • Never panics(tested by dtolnay/no-panic)

Installation

cargo add url_lite

Example

use url_lite::{Url, ParseError};

// Note that ParseError doesn't implement the Error trait unless the `unstable`
// feature is enabled
assert!(Url::parse("not-an-url") == Err(ParseError::Invalid))

let input = "https://usr:pass@example.com:8080/some%20path?foo=bar#zzz";
let url = Url::parse(input).expect("Invalid URL");

assert_eq!(url.schema, Some("https"));
assert_eq!(url.host, Some("example.com"));
assert_eq!(url.port, Some("8080"));
assert_eq!(url.path, Some("/some%20path"));
assert_eq!(url.query, Some("foo=bar"));
assert_eq!(url.fragment, Some("zzz"));
assert_eq!(url.userinfo, Some("usr:pass"));

Features

Caveats

Although this is a port of the URL parser from http-parser and it passes all the tests, it has not been used in production. It is also not a generic parser, may not support all URLs, only returns slices, and performs no decoding.

If you need a robust URL parser and are okay with std/alloc dependency, use servo/rust-url instead.

Dependencies

~205–640KB
~15K SLoC