lintel 0.2.0
Loading...
Searching...
No Matches
ContentType.h
Go to the documentation of this file.
1#ifndef LINTEL_CONTENTTYPE_H
2#define LINTEL_CONTENTTYPE_H
3
4#include <array>
5#include <string>
6#include <string_view>
7
8namespace lintel {
11{
12public:
13 enum Value {
15 TextCss,// text/css
16 TextCsv,// text/csv
17 TextPlain,// text/plain
18 TextVtt,// text/vtt
19 TextHtml,// text/html
20 ImageApng,// image/apng
21 ImageAvif,// image/avif
22 ImageBmp,// image/bmp
23 ImageGif,// image/gif
24 ImagePng,// image/png
25 ImageSvgXml,// image/svg+xml
26 ImageWebp,// image/webp
27 ImageXIcon,// image/x-icon
28 ImageTiff,// image/tiff
29 ImageJpeg,// image/jpeg
30 VideoMp4,// video/mp4
31 VideoMpeg,// video/mpeg
32 VideoWebm,// video/webm
33 AudioMp3,// audio/mp3
34 AudioMpeg,// audio/mpeg
35 AudioWebm,// audio/webm
36 AudioWave,// audio/wave
37 FontOtf,// font/otf
38 FontTtf,// font/ttf
39 FontWoff,// font/woff
40 FontWoff2,// font/woff2
41 ApplicationX7vCompressed,// application/x-7z-compressed
42 ApplicationAtomXml,// application/atom+xml
43 ApplicationPdf,// application/pdf
44 ApplicationJavascript,// application/javascript
45 ApplicationJson,// application/json
46 ApplicationRssXml,// application/rss+xml
47 ApplicationXTar,// application/x-tar
48 ApplicationXhtmlXml,// application/xhtml+xml
49 ApplicationXsltXml,// application/xslt+xml
50 ApplicationXml,// application/xml
51 ApplicationGzip,// application/gzip
52 ApplicationZip,// application/zip
53 ApplicationWasm// application/wasm
54 };
55
56 struct Mapping
57 {
59 std::string_view name;
60 };
61
63 static constexpr std::array<Mapping, 39> kNameToValue = { {
64 { ApplicationJavascript, "application/javascript" },
65 { ApplicationAtomXml, "application/atom+xml" },
66 { ApplicationGzip, "application/gzip" },
67 { ApplicationJson, "application/json" },
68 { ApplicationPdf, "application/pdf" },
69 { ApplicationRssXml, "application/rss+xml" },
70 { ApplicationWasm, "application/wasm" },
71 { ApplicationX7vCompressed, "application/x-7z-compressed" },
72 { ApplicationXTar, "application/x-tar" },
73 { ApplicationXhtmlXml, "application/xhtml+xml" },
74 { ApplicationXml, "application/xml" },
75 { ApplicationXsltXml, "application/xslt+xml" },
76 { ApplicationZip, "application/zip" },
77 { AudioMp3, "audio/mp3" },
78 { AudioMpeg, "audio/mpeg" },
79 { AudioWave, "audio/wave" },
80 { AudioWebm, "audio/webm" },
81 { FontOtf, "font/otf" },
82 { FontTtf, "font/ttf" },
83 { FontWoff, "font/woff" },
84 { FontWoff2, "font/woff2" },
85 { ImageApng, "image/apng" },
86 { ImageAvif, "image/avif" },
87 { ImageBmp, "image/bmp" },
88 { ImageGif, "image/gif" },
89 { ImageJpeg, "image/jpeg" },
90 { ImagePng, "image/png" },
91 { ImageSvgXml, "image/svg+xml" },
92 { ImageTiff, "image/tiff" },
93 { ImageWebp, "image/webp" },
94 { ImageXIcon, "image/x-icon" },
95 { TextCss, "text/css" },
96 { TextCsv, "text/csv" },
97 { TextHtml, "text/html" },
98 { TextPlain, "text/plain" },
99 { TextVtt, "text/vtt" },
100 { VideoMp4, "video/mp4" },
101 { VideoMpeg, "video/mpeg" },
102 { VideoWebm, "video/webm" },
103 } };
104
106 static constexpr std::array<Mapping, 39> kValueToName = { {
107 { TextCss, "text/css" },
108 { TextCsv, "text/csv" },
109 { TextPlain, "text/plain" },
110 { TextVtt, "text/vtt" },
111 { TextHtml, "text/html" },
112 { ImageApng, "image/apng" },
113 { ImageAvif, "image/avif" },
114 { ImageBmp, "image/bmp" },
115 { ImageGif, "image/gif" },
116 { ImagePng, "image/png" },
117 { ImageSvgXml, "image/svg+xml" },
118 { ImageWebp, "image/webp" },
119 { ImageXIcon, "image/x-icon" },
120 { ImageTiff, "image/tiff" },
121 { ImageJpeg, "image/jpeg" },
122 { VideoMp4, "video/mp4" },
123 { VideoMpeg, "video/mpeg" },
124 { VideoWebm, "video/webm" },
125 { AudioMp3, "audio/mp3" },
126 { AudioMpeg, "audio/mpeg" },
127 { AudioWebm, "audio/webm" },
128 { AudioWave, "audio/wave" },
129 { FontOtf, "font/otf" },
130 { FontTtf, "font/ttf" },
131 { FontWoff, "font/woff" },
132 { FontWoff2, "font/woff2" },
133 { ApplicationX7vCompressed, "application/x-7z-compressed" },
134 { ApplicationAtomXml, "application/atom+xml" },
135 { ApplicationPdf, "application/pdf" },
136 { ApplicationJavascript, "application/javascript" },
137 { ApplicationJson, "application/json" },
138 { ApplicationRssXml, "application/rss+xml" },
139 { ApplicationXTar, "application/x-tar" },
140 { ApplicationXhtmlXml, "application/xhtml+xml" },
141 { ApplicationXsltXml, "application/xslt+xml" },
142 { ApplicationXml, "application/xml" },
143 { ApplicationGzip, "application/gzip" },
144 { ApplicationZip, "application/zip" },
145 { ApplicationWasm, "application/wasm" },
146 } };
147
149 constexpr ContentType(Value value) : m_value(value) {}
150
152 explicit ContentType(const std::string &contentType);
153
154 constexpr operator Value() const { return m_value; }
155
156 explicit operator bool() = delete;
157
159 [[nodiscard]] constexpr Value getValue() const { return m_value; }
160
162 [[nodiscard]] std::string getName() const;
163
164private:
166 static Value build(std::string_view contentType);
167
168 Value m_value;
169};
170
171}// namespace lintel
172#endif// LINTEL_CONTENTTYPE_H
Definition ContentType.h:11
constexpr ContentType(Value value)
Definition ContentType.h:149
std::string getName() const
static constexpr std::array< Mapping, 39 > kNameToValue
Definition ContentType.h:63
Value
Definition ContentType.h:13
@ ApplicationXTar
Definition ContentType.h:47
@ ImageWebp
Definition ContentType.h:26
@ AudioWebm
Definition ContentType.h:35
@ ImageXIcon
Definition ContentType.h:27
@ AudioMpeg
Definition ContentType.h:34
@ UNDEFINED
Definition ContentType.h:14
@ ImageSvgXml
Definition ContentType.h:25
@ AudioWave
Definition ContentType.h:36
@ TextHtml
Definition ContentType.h:19
@ ApplicationXsltXml
Definition ContentType.h:49
@ ImageBmp
Definition ContentType.h:22
@ ApplicationX7vCompressed
Definition ContentType.h:41
@ FontWoff2
Definition ContentType.h:40
@ ApplicationXml
Definition ContentType.h:50
@ ImageJpeg
Definition ContentType.h:29
@ FontOtf
Definition ContentType.h:37
@ AudioMp3
Definition ContentType.h:33
@ ApplicationWasm
Definition ContentType.h:53
@ ImageApng
Definition ContentType.h:20
@ ApplicationRssXml
Definition ContentType.h:46
@ VideoMp4
Definition ContentType.h:30
@ ApplicationXhtmlXml
Definition ContentType.h:48
@ ImageGif
Definition ContentType.h:23
@ TextVtt
Definition ContentType.h:18
@ ApplicationPdf
Definition ContentType.h:43
@ FontWoff
Definition ContentType.h:39
@ TextPlain
Definition ContentType.h:17
@ ApplicationJson
Definition ContentType.h:45
@ ApplicationJavascript
Definition ContentType.h:44
@ ImageTiff
Definition ContentType.h:28
@ ApplicationGzip
Definition ContentType.h:51
@ ApplicationZip
Definition ContentType.h:52
@ VideoWebm
Definition ContentType.h:32
@ ApplicationAtomXml
Definition ContentType.h:42
@ ImageAvif
Definition ContentType.h:21
@ VideoMpeg
Definition ContentType.h:31
@ TextCss
Definition ContentType.h:15
@ TextCsv
Definition ContentType.h:16
@ ImagePng
Definition ContentType.h:24
@ FontTtf
Definition ContentType.h:38
static constexpr std::array< Mapping, 39 > kValueToName
Definition ContentType.h:106
ContentType(const std::string &contentType)
constexpr Value getValue() const
Definition ContentType.h:159
Definition BaseFeature.h:6
constexpr std::string_view type_name()
Definition TypeName.h:9
Definition ContentType.h:57
std::string_view name
Definition ContentType.h:59
Value value
Definition ContentType.h:58