1 个不稳定版本
0.1.0 | 2023年2月11日 |
---|
#2207 在 解析器实现
1,936 每月下载量
36KB
963 行
url-lite
从 nodejs/http-parser 到 Rust 的 URL 解析器移植
功能
#[no_std]
- 无堆分配,返回
&str
结构体 - 从不崩溃(由 dtolnay/no-panic 测试)
安装
cargo add url_lite
示例
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:[email protected]: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"));
功能
unstable
- 为ParseError
实现core::error::Error
。由于 error_in_core 需要 nightly
注意事项
尽管这是从 http-parser 端口移植的 URL 解析器,并且通过了所有测试,但它尚未在生产环境中使用。它也不是一个通用的解析器,可能不支持所有 URL,仅返回切片,并且不执行解码。
如果您需要一个健壮的 URL 解析器并且可以接受 std/alloc 依赖,请改用 servo/rust-url。
依赖项
~300–760KB
~18K SLoC