#url #parse-url #parser #error #web

base_url

网页 URL 类型的包装器

10 个版本 (4 个稳定版)

1.1.0 2019 年 7 月 15 日
1.0.2 2019 年 4 月 26 日
1.0.1 2019 年 2 月 10 日
0.0.10 2018 年 12 月 10 日
0.0.7 2018 年 8 月 26 日

#34#parse-url

Download history 13/week @ 2024-03-30 7/week @ 2024-04-06 48/week @ 2024-06-22 5/week @ 2024-06-29 46/week @ 2024-07-06

每月 99 次下载

MIT 许可证

29KB
155

BaseUrl

base_url 是对 rust-url 的轻量级封装,而 rust-url 本身实现了 URL 标准。base_url 的目标是实现该标准的严格子集,以删除与给定 URL 的基适宜性相关的冗余错误检查。

什么是 BaseUrl

可以将任何可以引用远程资源的 URL 转换为 BaseUrl。在实践中,如果您在互联网上找到它,它可能工作,如果您引用的是“其他地方”的资源,它也可能工作,mailto: 是一个显著的例外。

内部,任何在 .cannot_be_a_base() 调用中返回 false 并在 .has_authority() 调用中返回 true 的 URL 都会进行转换。这意味着设置诸如凭据和端口号等操作不会失败,同样,设置相对于主机的路径也不会失败。

获取 BaseUrl 对象

可以通过使用 TryFrom 将 URL 或 &str 转换为 BaseUrl 对象来获取 BaseUrl 对象。如果无法将 &str 解析为 URL 对象,将返回 BaseUrlError::ParseError,该错误封装了由 rust-url 实现的底层 ParseError 类型。

use base_url::{ BaseUrl, BaseUrlError, Url, ParseError, TryFrom };

assert!( BaseUrl::try_from( "http://[:::1]" ) == Err( BaseUrlError::ParseError( ParseError::InvalidIpv6Address ) ) );

这有点难以处理,因此建议您首先将 &str 解析为 URL,然后将该对象转换为 BaseUrl,这样您可以单独处理解析错误和基适宜性错误。

use base_url::{ BaseUrl, BaseUrlError, Url, TryFrom };

let url:Url = Url::parse( "data:text/plain,Hello?World#" )?;
assert!( BaseUrl::try_from( url ) == Err( BaseUrlError::CannotBeBase ) );

let url:Url = Url::parse( "https://example.org/" )?;
let baseurl = BaseUrl::from( url )?;
assert!( baseurl.as_str( ), "https://example.org/ " );

一旦我们有了 BaseUrl,我们就可以做(几乎)任何我们可以用普通 URL 做的事情,并且有更少的函数可能失败,并且调用 .unwrap() 的次数更少。

如果您需要使用一些可能删除主机或以其他方式导致 URL 失去基适宜性的调用,可以使用 .from() 获取封装的 URL。

用法

在由 Cargo 管理的任何 Rust 项目中,将以下内容添加到您的 Cargo.toml 的 [dependencies] 部分

base_url="^1.0.0"

依赖项

~1.5MB
~49K SLoC