2个版本
0.1.1 | 2021年4月27日 |
---|---|
0.1.0 | 2021年4月27日 |
#927 in 文本处理
1,651 每月下载量
用于 utube
98KB
2.5K SLoC
基于似乎未维护的 mime crate
mime
支持MIME(HTTP媒体类型)在Rust中的强类型。
用法
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 = neo_mime::TEXT_PLAIN;
let svg = neo_mime::IMAGE_SVG;
let json = neo_mime::APPLICATION_JSON;
// etc
MediaType
也可以从字符串解析,例如从HTTP头部的Content-Type
match neo_mime::MediaType::parse("text/plain; charset=utf-8") {
Ok(text) => assert_eq!(text, neo_mime::TEXT_PLAIN_UTF_8),
Err(err) => panic!("you should handle this parse error: {}", err),
}
检查MediaType
一旦你有了MediaType
,你可以检查它的各个部分。由于type_()
和subtype()
方法返回&str
,你可以轻松创建match
语句来处理不同的媒体类型。为了避免错误,许多常见的类型名称都作为常量提供。
let mime = neo_mime::TEXT_PLAIN;
match (mime.type_(), mime.subtype()) {
(neo_mime::TEXT, neo_mime::PLAIN) => println!("plain text!"),
(neo_mime::TEXT, _) => println!("structured text"),
_ => println!("not text"),
}
使用媒体范围进行匹配
MediaRange
通常由代理用于声明它们可以理解的“范围”媒体类型。这些通常可以在Accept
HTTP头部找到,例如
GET /index.html HTTP/1.1
Accept: text/html, text/*
这些可以解析为MediaRange
,然后检查你拥有的任何MediaType
是否满足它们。
match neo_mime::MediaRange::parse("text/*") {
Ok(range) => {
// There's a couple constants in case you don't need parsing...
assert_eq!(range, neo_mime::TEXT_STAR);
// "text/plain" is a match
assert!(range.matches(&neo_mime::TEXT_PLAIN));
// "application/json" is NOT
assert!(!range.matches(&neo_mime::APPLICATION_JSON));
},
Err(err) => panic!("that's a bad range: {}", err),
}
依赖关系
~95–375KB