21 个稳定版本 (3 个主要版本)

3.0.0 2024年7月11日
2.3.0 2024年3月21日
2.2.1 2024年1月23日
2.1.1 2023年11月25日
0.1.0 2023年5月10日

解析器实现 中排名 141

Download history 17/week @ 2024-05-03 21/week @ 2024-05-10 33/week @ 2024-05-17 9/week @ 2024-05-24 17/week @ 2024-05-31 21/week @ 2024-06-07 20/week @ 2024-06-14 23/week @ 2024-06-21 15/week @ 2024-06-28 105/week @ 2024-07-05 57/week @ 2024-07-12 7/week @ 2024-07-19 107/week @ 2024-07-26 19/week @ 2024-08-02 24/week @ 2024-08-09 9/week @ 2024-08-16

每月下载量 161

MIT/Apache

1MB
15K SLoC

C++ 14K SLoC // 0.1% comments Rust 1K SLoC // 0.0% comments Shell 15 SLoC

Rust 的 WHATWG URL 解析器

快速遵循 WHATWG URL 规范 的 URL 解析器,适用于 Rust。经过良好测试,并且自 Node 18 以来被 Node.js 广泛使用。

Ada 库通过了规范中涵盖的完整测试范围,支持多种平台(例如,Windows、Linux、macOS)。它完全支持相关的 Unicode 技术标准

用法

有关用法示例,请参阅 此处。您可以使用 cargo run --example simple 在本地运行它。请随意调整以进一步探索此软件包。

功能

std: 需要 std 的功能。此功能默认启用,如果要启用 no-std,则设置 no-default-featurestrue

serde: 允许 Urlserde 一起使用。此功能默认禁用。启用此功能且没有 std 的情况下将仅提供 Serialize。启用此功能并带有 std 将同时提供 SerializeDeserialize

libcpp: 使用 libc++ 构建代码 ada-url。此功能默认禁用。如果没有安装 libc++ 就启用此功能将导致编译错误。

性能

Ada 速度很快。以下基准测试显示与 url 相比,URL 解析速度提高了 3.34 倍

parse/ada_url           time:   [2.0790 µs 2.0812 µs 2.0835 µs]
                        thrpt:  [369.84 MiB/s 370.25 MiB/s 370.65 MiB/s]

parse/url               time:   [6.9266 µs 6.9677 µs 7.0199 µs]
                        thrpt:  [109.77 MiB/s 110.59 MiB/s 111.25 MiB/s]

实现特性

Url 实现以下特性。

特性 描述
显示 提供 to_string,并允许在 format! 宏(例如 println!)中使用值。
调试 允许在格式宏中输出调试信息,使用 {:?} 语法
PartialEq, Eq 允许比较,例如 url1 == url2url1.eq(url2)
PartialOrd, Ord 允许排序 url1 < url2,按字母顺序进行。这还允许 Url 作为 BTreeMap 的键使用
哈希 使得 Url 可以根据字符串表示进行哈希。这对于将 Url 作为 HashMap 的键使用非常重要
FromStr 允许与 str's parse 方法 一起使用
TryFrom<String>, TryFrom<&str> String&str 提供了 try_into 方法
Borrow<str>, Borrow<[u8]> 在一些 crate 中使用,以便 Url 可以作为键使用。
Deref<目标类型=str> 允许 &Url 解引用为 &str。还提供了一些字符串方法
AsRef<[u8]>AsRef<str> 用于执行廉价的引用到引用的转换。
Send 用于声明类型可以在线程边界之间传输。
Sync 用于声明类型是线程安全的。

开发

justfile

justfile 包含可以由 just 执行的命令(称为“配方”)以方便使用。

运行所有 lints 和测试

just all

跳过功能

just all --skip=libcpp,serde

许可证

此代码可在 Apache License 2.0 以及 MIT 许可证下使用。

我们的测试包括第三方代码和数据。基准测试代码包括第三方代码:仅提供研究目的,不是库的一部分。

依赖关系

~0.3–1.3MB
~27K SLoC