mime_type/
book.rs

1use crate::MimeFormat;
2use std::fmt::{self, Display, Formatter};
3
4/// E-book file formats.
5///
6/// Supports common digital book formats.
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum Book {
9    /// Electronic Publication format
10    Epub,
11    /// Mobipocket e-book format
12    Mobi,
13}
14
15impl Display for Book {
16    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
17        let mime_str = match self {
18            Book::Epub => "application/epub+zip",
19            Book::Mobi => "application/x-mobipocket-ebook",
20        };
21        write!(f, "{}", mime_str)
22    }
23}
24
25impl MimeFormat for Book {
26    fn from_ext(ext: &str) -> Option<crate::MimeType> {
27        match ext {
28            "epub" => Some(crate::MimeType::Book(Book::Epub)),
29            "mobi" => Some(crate::MimeType::Book(Book::Mobi)),
30            _ => None,
31        }
32    }
33
34    fn from_mime(mime: &str) -> Option<crate::MimeType> {
35        match mime {
36            "application/epub+zip" => Some(crate::MimeType::Book(Book::Epub)),
37            "application/x-mobipocket-ebook" => Some(crate::MimeType::Book(Book::Mobi)),
38            _ => None,
39        }
40    }
41}