1 个不稳定版本
0.4.0-a.0 | 2021年1月29日 |
---|
在 文本处理 中排名 1277
每月下载 149 次
在 10 个crate中使用了(通过 site_icons)
97KB
2.5K SLoC
mime
支持在Rust中以强类型的形式处理MIME(HTTP媒体类型)。
使用方法
extern crate mime;
fn main() {
// common types are constants
let text = mime::TEXT_PLAIN;
// deconstruct Mimes to match on them
match (text.type_(), text.subtype()) {
(mime::TEXT, mime::PLAIN) => {
// plain text!
},
(mime::TEXT, _) => {
// structured text!
},
_ => {
// not text!
}
}
}
lib.rs
:
MediaType和MediaRange
mime
crate定义了两种主要类型,用于在HTTP环境中表示MIME
MediaType
是某些内容的具体描述,例如text/plain
。MediaRange
是代理愿意接收的类型范围,例如text/*
。
获取 MediaType
导出了几个常量,用于常见的媒体类型
let text = mime::TEXT_PLAIN;
let svg = mime::IMAGE_SVG;
let json = mime::APPLICATION_JSON;
// etc
MediaType
也可以从字符串解析,例如从 Content-Type
HTTP头中
match mime::MediaType::parse("text/plain; charset=utf-8") {
Ok(text) => assert_eq!(text, mime::TEXT_PLAIN_UTF_8),
Err(err) => panic!("you should handle this parse error: {}", err),
}
检查 MediaType
一旦你有了 MediaType
,你可以检查它的各个部分。由于 type_
和 subtype
方法返回 &str
,你可以通过 match
语句轻松处理不同的媒体类型。为了避免打字错误,许多常见的类型名称都可用作常量。
let mime = mime::TEXT_PLAIN;
match (mime.type_(), mime.subtype()) {
(mime::TEXT, mime::PLAIN) => println!("plain text!"),
(mime::TEXT, _) => println!("structured text"),
_ => println!("not text"),
}
使用媒体范围进行匹配
MediaRange
通常由代理用于声明它们可以理解的“范围”媒体类型。这些通常可以在 Accept
HTTP头中找到,例如这样
GET /index.html HTTP/1.1
Accept: text/html, text/*
这些可以解析为 MediaRange
,然后用于检查你有的任何 MediaType
是否能满足它们。
match mime::MediaRange::parse("text/*") {
Ok(range) => {
// There's a couple constants in case you don't need parsing...
assert_eq!(range, mime::TEXT_STAR);
// "text/plain" is a match
assert!(range.matches(&mime::TEXT_PLAIN));
// "application/json" is NOT
assert!(!range.matches(&mime::APPLICATION_JSON));
},
Err(err) => panic!("that's a bad range: {}", err),
}
依赖项
~95–445KB
~10K SLoC