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
每月 99 次下载
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