1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use std::{convert::Infallible, fmt::Display, str::FromStr};
pub enum Header {
ContentType,
Proof,
Author,
Title,
Signature,
Version,
FileExtension,
Unknown(String),
}
impl Display for Header {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let value = match self {
Header::ContentType => "Content-Type",
Header::Proof => "Proof",
Header::Author => "Author",
Header::Title => "Title",
Header::Signature => "Signature",
Header::Version => "Version",
Header::FileExtension => "File-Extension",
Header::Unknown(name) => name,
};
write!(f, "{}", value)
}
}
impl FromStr for Header {
type Err = Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s.to_lowercase().as_str() {
"content-type" => Header::ContentType,
"file-extension" => Header::FileExtension,
"proof" => Header::Proof,
"author" => Header::Author,
"title" => Header::Title,
"signature" => Header::Signature,
"version" => Header::Version,
_ => Header::Unknown(s.to_string()),
})
}
}