1 个不稳定版本
0.1.1 | 2021年12月5日 |
---|---|
0.1.0 |
|
#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