Add example for mime crate

This commit is contained in:
Julien Delange 2018-02-25 11:28:06 -08:00
parent 333c8a2bfa
commit aa5ca8c7c8
4 changed files with 68 additions and 0 deletions

View file

@ -46,6 +46,7 @@ threadpool = "1.6"
toml = "0.4"
url = "1.6"
walkdir = "2.0"
mime = "0.3.5"
[target.'cfg(target_os = "linux")'.dependencies]
syslog = "3.3.0"

View file

@ -14,6 +14,7 @@
| [Handle invalid CSV data with Serde][ex-invalid-csv] | [![csv-badge]][csv] [![serde-badge]][serde] | [![cat-encoding-badge]][cat-encoding] |
| [Serialize records to CSV][ex-serialize-csv] | [![csv-badge]][csv] | [![cat-encoding-badge]][cat-encoding] |
| [Serialize records to CSV using Serde][ex-csv-serde] | [![csv-badge]][csv] [![serde-badge]][serde] | [![cat-encoding-badge]][cat-encoding] |
| [Get MIME type from filename][ex-mime-from-filename] | [![mime-badge]][mime] | [![cat-encoding-badge]][cat-encoding] |
[ex-json-value]: #ex-json-value
<a name="ex-json-value"></a>
@ -688,6 +689,68 @@ fn run() -> Result<()> {
# quick_main!(run);
```
[ex-mime-from-filename]: #ex-mime-from-filename
<a name="ex-mime-from-filename"></a>
## Get MIME type from filename
[![mime-badge]][mime] [![cat-encoding-badge]][cat-encoding]
The following example shows how to return the correct MIME type from a given
filename using the [mime] crate.
```rust
# #[macro_use]
# extern crate error_chain;
#[macro_use]
use std::io;
#
# error_chain! {
# foreign_links {
# IOError(std::io::Error);
# }
# }
extern crate mime;
use mime::Mime;
/// Return the MIME type according to file extension. Default is text/plain
fn find_mimetype (filename : &String) -> Mime{
let parts : Vec<&str> = filename.split('.').collect();
/// Filter on the file extension
let res = match parts.last() {
Some(v) =>
match *v {
"png" => mime::IMAGE_PNG,
"jpg" => mime::IMAGE_JPEG,
"json" => mime::APPLICATION_JSON,
&_ => mime::TEXT_PLAIN,
},
None => mime::TEXT_PLAIN,
};
return res;
}
fn run() -> Result<()> {
let filenames = vec!("foobar.jpg", "foo.bar", "foobar.png");
for file in filenames {
let mime = find_mimetype(&file.to_owned());
println!("MIME for {:?}: {:?}", file, mime);
}
Ok(())
}
#
# quick_main!(run);
```
{{#include links.md}}
<!-- API Reference -->

View file

@ -72,6 +72,7 @@ community. It needs and welcomes help. For details see
| [Handle invalid CSV data with Serde][ex-invalid-csv] | [![csv-badge]][csv] [![serde-badge]][serde] | [![cat-encoding-badge]][cat-encoding] |
| [Serialize records to CSV][ex-serialize-csv] | [![csv-badge]][csv] | [![cat-encoding-badge]][cat-encoding] |
| [Serialize records to CSV using Serde][ex-csv-serde] | [![csv-badge]][csv] [![serde-badge]][serde] | [![cat-encoding-badge]][cat-encoding] |
| [Get MIME type from filename][ex-mime-from-filename] | [![mime-badge]][mime] | [![cat-encoding-badge]][cat-encoding] |
## [Concurrency](concurrency.html)
@ -176,6 +177,7 @@ community. It needs and welcomes help. For details see
[ex-csv-filter]: encoding.html#ex-csv-filter
[ex-csv-read]: encoding.html#ex-csv-read
[ex-csv-serde]: encoding.html#ex-csv-serde
[ex-mime-from-filename]: encoding.html#ex-mime-from-filename
[ex-datetime-arithmetic]: basics.html#ex-datetime-arithmetic
[ex-dedup-filenames]: app.html#ex-dedup-filenames
[ex-error-chain-avoid-discarding]: basics.html#ex-error-chain-avoid-discarding

View file

@ -63,7 +63,9 @@ Keep lines sorted.
[crossbeam-badge]: https://badge-cache.kominick.com/crates/v/crossbeam.svg?label=crossbeam
[crossbeam]: https://docs.rs/crossbeam/
[csv-badge]: https://badge-cache.kominick.com/crates/v/csv.svg?label=csv
[mime-badge]: https://badge-cache.kominick.com/crates/v/csv.svg?label=mime
[csv]: https://docs.rs/csv/
[mime]: https://docs.rs/mime/
[data-encoding-badge]: https://badge-cache.kominick.com/crates/v/data-encoding.svg?label=data-encoding
[data-encoding]: https://docs.rs/data-encoding/
[env_logger-badge]: https://badge-cache.kominick.com/crates/v/env_logger.svg?label=env_logger