ITADN
ada-url/rust
ada-url/rust · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Rust 的 WHATWG URL 解析器

快速、符合 WHATWG URL 规范 的 Rust URL 解析器。 经过充分测试,并自 Node 18 起被 Node.js 广泛使用。

Ada 库通过了规范中全范围的测试,适用于广泛的平台(例如 Windows、Linux、macOS)。 它完全支持相关的 Unicode 技术标准

用法

参见 此处 获取使用示例。 你可以使用 cargo run --example simple 在本地运行它。 请随意调整它以进一步探索此 crate。

特性

std: 需要 std 的功能。 此特性默认启用,如果你想要 no-std,请将 no-default-features 设置为 true

serde: 允许 Urlserde 配合使用。此特性默认禁用。启用此特性而不启用 std 将仅提供 Serialize。 启用此特性和 std 将同时提供 SerializeDeserialize

libcpp: 使用 libc++ 构建 ada-url。此特性默认禁用。 在未安装 libc++ 的情况下启用此特性将导致编译错误。

bundled: 编译并静态链接捆绑的 C++ ada 源代码。此 特性默认启用。有关如何禁用它,请参阅下文“链接外部 ada”。

链接外部 ada

默认情况下(bundled 特性),构建脚本会编译捆绑的 C++ ada 源代码并静态链接它们。如果你的 宿主构建系统(例如 Bazel、CMake 或发行版软件包)已经提供了 ada,编译 捆绑副本将在最终二进制文件中产生第二个重复的 ada 副本。

禁用 bundled 功能以跳过捆绑构建,并改为链接外部 ada:

# Cargo.toml — re-enable `std` since disabling default features also drops it
ada-url = { version = "4", default-features = false, features = ["std"] }

bundled 被禁用时,这些可选的环境变量用于配置外部 ada 的链接方式:

变量描述
ADA_LIB_DIR添加到链接器搜索路径的可选目录(cargo:rustc-link-search=native)。
ADA_LIB_NAME要链接的可选库,原样传递给 cargo:rustc-link-lib(例如 adastatic=ada)。

如果两者均未提供,则不会发出链接指令,由宿主构建系统在最终链接时提供 ada 符号。外部 ada 必须暴露相同的 C ABI(ada_*),并且与本 crate 的版本保持 ABI 兼容。

# Link against a system-installed libada in /usr/local/lib
ADA_LIB_DIR=/usr/local/lib ADA_LIB_NAME=ada \
  cargo build --no-default-features --features std

性能

Ada 速度很快。下方的基准测试显示,与 url 相比,URL 解析速度快了 3.49 倍

can_parse/ada_url       time:   [1.2109 µs 1.2121 µs 1.2133 µs]
                        thrpt:  [635.09 MiB/s 635.75 MiB/s 636.38 MiB/s]

parse/ada_url           time:   [2.0124 µs 2.0157 µs 2.0190 µs]
                        thrpt:  [381.67 MiB/s 382.28 MiB/s 382.91 MiB/s]

parse/url               time:   [7.0530 µs 7.0597 µs 7.0666 µs]
                        thrpt:  [109.04 MiB/s 109.15 MiB/s 109.25 MiB/s]

已实现的 trait

Url 实现了以下 trait。

Trait(s)Description
Display提供 to_string 并允许该值用于 format! 宏(例如 println!)。
Debug允许在格式化宏中输出调试信息,({:?} 语法)
PartialEq, Eq允许进行比较,url1 == url2url1.eq(url2)
PartialOrd, Ord允许按字母顺序进行排序 url1 < url2。这也允许将 Url 用作 BTreeMap 中的键
Hash使得 Url 可以基于字符串表示进行哈希。这很重要,因为 Url 可以用作 HashMap 中的键
FromStr允许与 strparse 方法一起使用
TryFrom<String>, TryFrom<&str>String&str 提供 try_into 方法
Borrow<str>, Borrow<[u8]>在某些 crate 中使用,以便 Url 可以用作键。
Deref<Target=str>允许 &Url 作为 &str 进行解引用。还提供一系列字符串方法
AsRef<[u8]>, AsRef<str>用于执行廉价的引用到引用的转换。
Send用于声明该类型可以在线程边界之间传输。
Sync用于声明该类型是线程安全的。

开发

justfile

The justfile 包含可由 just 执行的命令(称为“recipes”),以提供便利。

运行所有 lints 和 tests:

just all

跳过功能:

just all --skip=libcpp,serde

许可证

本代码在 Apache License 2.0 以及 MIT 许可证下提供。

我们的测试包含第三方代码和数据。基准测试代码包含第三方代码:它仅用于研究目的,不属于库的一部分。