1 个不稳定版本

0.1.1 2021年12月5日
0.1.0 2021年12月5日

#2185 in 解析器实现

自定义许可证

115KB
2.5K SLoC

Uri

这是一个实现IETF RFC 3986,"统一资源标识符(URI):通用语法"的库。

有关此库的更多信息,请参阅crate文档

URI是一系列字符的紧凑序列,用于标识抽象或物理资源。URI的一种常见形式是统一资源定位符(URL),用于引用Web资源

http://www.example.com/foo?bar#baz

另一种类型的URI是路径引用

/usr/bin/zip

此库的目的是提供一个Uri类型来表示URI,并提供从字符串表示形式解析URI以及从其各种组件组装URI的函数。

致谢

由于当时该库未维护,已从rhymuri派生此库。感谢Richard Walters提供原始实现!

许可证

MIT许可证下授权。


lib.rs:

此crate实现了IETF RFC 3986,“统一资源标识符(URI):通用语法”。可以使用Uri类型解析和生成符合RFC规范的URI字符串及其各种组件。

统一资源标识符(URI)是一系列字符的紧凑序列,用于标识抽象或物理资源。URI的一种常见形式是统一资源定位符(URL),用于引用Web资源

http://www.example.com/foo?bar#baz

另一种类型的URI是路径引用

/usr/bin/zip

示例

解析URI到其组件

use uris::Uri;

let uri = Uri::parse("http://www.example.com/foo?bar#baz").unwrap();
let authority = uri.authority().unwrap();
assert_eq!("www.example.com".as_bytes(), authority.host());
assert_eq!(
    Some("www.example.com"),
    uri.host_to_string().unwrap().as_deref()
);
assert_eq!("/foo", uri.path_to_string().unwrap());
assert_eq!(Some("bar"), uri.query_to_string().unwrap().as_deref());
assert_eq!(Some("baz"), uri.fragment_to_string().unwrap().as_deref());

从其组件生成URI

use uris::{
    Authority,
    Uri,
};

let mut uri = Uri::default();
assert!(uri.set_scheme(String::from("http")).is_ok());
let mut authority = Authority::default();
authority.set_host("www.example.com");
uri.set_authority(Some(authority));
uri.set_path_from_str("/foo");
uri.set_query(Some("bar".into()));
uri.set_fragment(Some("baz".into()));
assert_eq!("http://www.example.com/foo?bar#baz", uri.to_string());

依赖关系

~2MB
~47K SLoC