Типы Медиа
Получение MIME типа из строки
Этот пример показывает, как осуществить разбор в тип MIME
из некоторой строки при помощи функций из крейта mime. FromStrError
выводит MIME
тип по умолчанию для параметра, переданного в unwrap_or
.
extern crate mime; use mime::{Mime, APPLICATION_OCTET_STREAM}; fn main() { let invalid_mime_type = "i n v a l i d"; let default_mime = invalid_mime_type .parse::<Mime>() .unwrap_or(APPLICATION_OCTET_STREAM); println!( "MIME for {:?} used default value {:?}", invalid_mime_type, default_mime ); let valid_mime_type = "TEXT/PLAIN"; let parsed_mime = valid_mime_type .parse::<Mime>() .unwrap_or(APPLICATION_OCTET_STREAM); println!( "MIME for {:?} was parsed as {:?}", valid_mime_type, parsed_mime ); }
Получение MIME типа из строки
Этот пример показывает, как осуществить разбор в тип MIME
из некоторой строки при помощи функций из крейта mime. FromStrError
выводит MIME
тип по умолчанию для параметра, переданного в unwrap_or
.
extern crate mime; use mime::{Mime, APPLICATION_OCTET_STREAM}; fn main() { let invalid_mime_type = "i n v a l i d"; let default_mime = invalid_mime_type .parse::<Mime>() .unwrap_or(APPLICATION_OCTET_STREAM); println!( "MIME for {:?} used default value {:?}", invalid_mime_type, default_mime ); let valid_mime_type = "TEXT/PLAIN"; let parsed_mime = valid_mime_type .parse::<Mime>() .unwrap_or(APPLICATION_OCTET_STREAM); println!( "MIME for {:?} was parsed as {:?}", valid_mime_type, parsed_mime ); }
Разбор MIME типа из HTTP ответа
В ответе запроса по HTTP через reqwest
найти MIME type-тип или тип мультимедиа может быть возможно через заголовок Content-Type. reqwest::header::HeaderMap::get
разбирает содержимое заголовка и делает любое значение доступным как reqwest::header::HeaderValue
, которое может быть преобразовано в строку. Крейт mime
может затем произвести разбор этой строки и выдать значение типа mime::Mime
.
Крейт mime
также определяет широко используемые типы MIME.
Заметим, что модуль reqwest::header
экспортируется из крейта http
.
#[macro_use] extern crate error_chain; extern crate mime; extern crate reqwest; use mime::Mime; use std::str::FromStr; use reqwest::header::CONTENT_TYPE; error_chain! { foreign_links { Reqwest(reqwest::Error); Header(reqwest::header::ToStrError); Mime(mime::FromStrError); } } fn main() -> Result<()> { let response = reqwest::get("https://www.rust-lang.org/logos/rust-logo-32x32.png")?; let headers = response.headers(); match headers.get(CONTENT_TYPE) { None => { println!("The response does not contain a Content-Type header."); } Some(content_type) => { let content_type = Mime::from_str(content_type.to_str()?)?; let media_type = match (content_type.type_(), content_type.subtype()) { (mime::TEXT, mime::HTML) => "a HTML document", (mime::TEXT, _) => "a text document", (mime::IMAGE, mime::PNG) => "a PNG image", (mime::IMAGE, _) => "an image", _ => "neither text nor image", }; println!("The reponse contains {}.", media_type); } }; Ok(()) }