diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000000000000000000000000000000000000..7d14bddea530e5b1f353e340271ff68fdf2c478d --- /dev/null +++ b/TODO.md @@ -0,0 +1,16 @@ +GOOD HABITS + +1. If you collect an iterator which you don't index in, you don't need to collect it +2. avoid temporary hashmaps +3. rewrite POST request stuff TICK +4. Client struct +5. Mime-Display new implemented +6. Remove unwraps +7. Reusable allocations + +TODO: + +1. Uri structs everywhere +2. Cookie From String fix + +API design 3. No decisions for the caller diff --git a/core/http/Cargo.lock b/core/http/Cargo.lock index 8490fd521eb6130a70b9e2685fce94d0f1f20e2f..9ac579ce5b0b0c6c677b0c6c07e6ae4d37b1b648 100644 --- a/core/http/Cargo.lock +++ b/core/http/Cargo.lock @@ -2,6 +2,723 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + [[package]] name = "http" version = "0.1.0" +dependencies = [ + "phf", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.2", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.144" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.45.0", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "openssl" +version = "0.10.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "phf" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_shared" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "proc-macro2" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustix" +version = "0.37.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "security-framework" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +dependencies = [ + "autocfg", + "cfg-if", + "fastrand", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio" +version = "1.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +dependencies = [ + "autocfg", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/core/http/Cargo.toml b/core/http/Cargo.toml index 8b1c9f1c5082ea71b3492a9a296e7c81d0b1ef4a..5d24dbd889e2de9c7013b930d543cecd6cbf3aed 100644 --- a/core/http/Cargo.toml +++ b/core/http/Cargo.toml @@ -3,6 +3,13 @@ name = "http" version = "0.1.0" edition = "2021" +[features] +secure = [] + # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + [dependencies] +tokio = { version = "1.28.2", features = ["full"] } +phf = { version = "0.11", features = ["macros"] } +tokio-native-tls = "0.3.0" diff --git a/core/http/src/certificates/certificate.crt b/core/http/src/certificates/certificate.crt new file mode 100644 index 0000000000000000000000000000000000000000..fa80d206d65b43e8247e5d4872ceb457ccf929bd --- /dev/null +++ b/core/http/src/certificates/certificate.crt @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIE+zCCAuOgAwIBAgIUduzhfNiMYBDh6wuv3MjdxK2C6bYwDQYJKoZIhvcNAQEL +BQAwDTELMAkGA1UEBhMCREUwHhcNMjMwNzE5MTEyNzE3WhcNMjQwNzE4MTEyNzE3 +WjANMQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AKKTQ3sMq9yYNST56n9NbNkycJ1QQORl6DtqqFB3iVRrNOzs0o1RAqXtVCWIiyJ2 +cvC/nPz9V+QRM9ZwovYGt7I2IGm3Wu15wWJH71QakPTElsoM+twVHUU+E8yNaDpY +vibP+6MIz7O1DD/uSqA5779n0/eZuC6Li1LYiaJNLHst9sqo1f5UccG66HdanT6+ +oCbvUyS8tiVnepM0rTku7k/7XVkKVa71VAojoVfNhSpF/tWQJC5PD8Sp9X5E31QK +BMjMckdS/ev4qruPGBOF10eilt+nJAxUpbJ87UamG/VxI3DDNchZ+ssckgDRcd44 +Td3Z2SsOAcHebCtrgOL4hFZQ+DsBMIDCWuj/BcKmN+RsnE40X7I01qBjbUABU/kp +cfJxd3YtkBysQ8VuMz00/jLzpUcTvbVjXq9ktCGBFbAUd+qqxNNA0Tqxw8TlE5pY +is2DzVpZvtuDscZAevMFRmi0aYN/RPGhcggeAUDAE4pHDgUdyZx8DKPZeDrPHRg+ +q+ESDB1UI23D4xkg97dhMFCClUute5YItVv21uGlK8HVa9BpXNgEmqOWEbrAyaFk +AKIsdibdo7G7DZxbC0NSP4MFrBxsdRl4MrCWKcipoWJ78LDQ5MXWtPEPotBQ+wsB +zK56WUFkMKwyRXA8/tcS3DZ+GNugavMaSewJ2zgjgkLjAgMBAAGjUzBRMB0GA1Ud +DgQWBBQpS4RUpA6uFkfMDlfH1AG8e8JyejAfBgNVHSMEGDAWgBQpS4RUpA6uFkfM +DlfH1AG8e8JyejAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQAW +9EW7neVsyntMqUWYHfg7hALxd800gF8t3jpBXOkg1j4Dg+XewsJsix8k96+zA0RF +wXR2iyQGSaGE5wENdArbg0KJsTcm5R754jyPmOdUUxoC8e96+vJAcHRHPCZLb+7q +meD/hqT22221bM517PUBYHzLvTEtUzRDOZkoG90QKBxyi934TWmr3hXVqp5YqLvu +V50AOTy0p38q4oFCdocyq2LpLst8IrLZphAV5uAdNzk94hjxfACRSWdQjWefUEJl +Qb/W5EdOIAZhXK+mMPskLxQcsqET70jWlVneuCocF11JzE5ouzefzUK9X/ofcaHI +C0Vfien5Haq6xHEw1Lyq47dVcd0ztqVDaolA7TzTnVzTwLT7REyvOOlb1eaq6ZoC +QpIiyLiJjytK1bof/H0HoJqHFEJtaPhL6no7HjhDMusKTXTOrWjG68Kwa6NgMzAa +XjUluyXPlIGs/M4qFZYlwWEo9lK5txNFiAfvu5DnrqMK4jvlpDpktCcIBAxBaN+2 +c5X8prRGN+u6w0CgYrwV5+tzHaTho6FWQvA+XnuWlmFR2UJjkYXD5IQNDkbejWL4 +6XWC6X2fEGXfTKR4f6mkXOyg2YtaBLI6cxgxqYVhjMpiRu00ncRKohZjqDXVtOll +u1HYrp5q7wYq/m9NVuZv8XYviTGSO/1oUR4n1Dng6g== +-----END CERTIFICATE----- diff --git a/core/http/src/certificates/identity.pfx b/core/http/src/certificates/identity.pfx new file mode 100644 index 0000000000000000000000000000000000000000..23327800204e7b757f67586e636994a03c8fc84e Binary files /dev/null and b/core/http/src/certificates/identity.pfx differ diff --git a/core/http/src/certificates/private.key b/core/http/src/certificates/private.key new file mode 100644 index 0000000000000000000000000000000000000000..2bcad348215a092c9291515d576cd36a7fe68d50 --- /dev/null +++ b/core/http/src/certificates/private.key @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJnDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIMWz28Wi/jXECAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECE+qsELeDfrPBIIJSHsoycMsEN+R +sTC7Si5KPfZWkYCaQTAmTPYnV6StHLmj8XNzCIUBxZAvhuWYUnCKHjT9lkJM8jEj +t22Ga3zSj/wdrGCPsJJuqc32grHMUXkZafAFXAQ8z3oVi3D4Kzed/ReUJJsDNnmP +dVi6vD1tDT/9mKI6Ootj370xDjXxPL6AEMvkjC7C/u0fwqSNUGiDn1X3h1G5z1+e +KCgRmmZnSydWbdpb6zBI6WKfvwqJafOpD2WJLuM/cmVPJir4zX2rruisyA2GHsMM +oAKIxii+mGETIr+Z+fyT2j7pZUKONdu6o34h2yRr//LIWV0fhQGPgtkVvx/ka6TH +8iZjKoCg5C0bNpPxILkflFcueAru9eo0IBUPku5mmaowxoTnv7JSSrdaFy98W/e/ +fHrtHh6Xg3sW/0Ny5AQpQX62WlyumbSLllKLMDtSUXryFBUh1Ftv5zQ5ixQURyP7 +TMhDh7Jg3SSgz8BDg7LTh+KcW+F3UGtnqSFZxu99ExbHMfQZL5OJgINaJzHrOM29 +YASzjHMf/nXHXA24nSCOHVhE3cXaLW3UZFhk4KUyFworF5uv+bP1bB10Fgvbl4gH +/KsEdPSf2AqFlEOhIZ6fACuykqch68VF2KWRl81Jgof95xaXnSJmoh3msobqds5C +sgV/PXsuHaSpOkFLThl6akv0P+HqVesXSEyfXxzYkoW/YGUp7mLQ32rsHuKwor6S +EDnftpirO+HIx+oUXlpeObAgoxN4L4JDorOMiw2+kCljhkS/G9+0vOg9wk/T9BXD +yYRKMao7Y8xA6nfcd6LMGUk1DcCR3NU+o+O+7uO9onaw0hGszQM9PFy5qeaNvLh3 +J4bOU94eK978kqRFHXmnSZIss5zCoDgmuhejxxcDQwo1tTLLMI+my4q2ccBv4dvQ +Zrf9B7A+q0ou0T81WjA8mrGuYg42GvalFrjuC54uuAmCfI64hF4eu3x8Cccnjbe2 +V6RdbFSQfENuF547Rvee1VTQ9bCTSkENIuDHLWcEhcBeGSrunJtHJB3yHoaBjApw +k/B9XPmpHVyvq/7DCFkqu+tmEvLhXRQOLBdi7BpXVhf1KF2/qFR4jbvc/JD52uPK +xpVpxFyXtd52VpOWyoWsImlWNAkA6H9LDnDlBM3Y8j0KCYz14y5SXX0FmOIXn92F +VTw+4BPC/nCa3LMPV/8eZvokZuxaBIInunNUXXRXOtjaTgW7UTBgcfvpZB1xXd8j +iokwSswD5i6FI2ggIU8thG2UR9dMxkAvDbKTLgh73l83DizFOlNA38AR8TdC/v8x +lxUaZAiA5pR2YLnU0gh0kbJQfOjFwN2X0fwHJNmCpigKrFHqqvkdprUC5FpYGQ1u +N+SIicJ8ry4gPqnDsm85mq7oNMrLp2p6RcC8YkmpM5DSbFFKvJ9KXaYRPlrMmUTb +rC8yWz6+mvpN5/YILwmxxpc8dw6plFI+mqBDTuY5ccxDYQkpFLFpZ+v30Qbo2ZN1 +dqZpsE+Ngxc0vGZhEJPNU+c+/KGG+V9cQUFJO9RvxfvY8cJkFO51zaKUdqVPHhcx +oUtB0q+oNGxFW7O59k0bGsaMT9ULgoZeLsZFp7kytbX06ueMUfsLJXFifWfbFHvD +iWivm4qOQM4H6h9nBPIvRRpOCKNtJVW9KCYVT9tm8w5e0WJyGrUQK44gM+HfWS6p +lB7+6f1XdrPh7s0SgVXTUT8M5urD76P/pYT1ra+zovLIAHVe7cm8k0UfCFt2jRM2 +RSv8yRcQnUfu+Jlu0QAe6SjNT6Wosst1+Cqato25FADlhnUvyyBjklUlS8Dh1owL +Mlb+Jj34SEdEbHhtGZ0C1m2PUubXGHaBKofLKFgSEFDpQYMj0+AI2PK5ZjKBmdYK +XnBE+DvebW2f55aZeL2e9kPRn7TqDwc8B8CNfNACcfR/91JTFYyLx15nYZWAZzv1 +pWfB5vJppKGqdLxbQz8CDbH7sgR60zjOIBVPnxs5qI1iM/MlPVirUEUg2xalF8/B +VhduuuTM2nDCB7V6jAMKIJsCTLaZLqwQOQpW4aLmKUGFvajF2P0FCTeDDedmOBwV +Rbzf8fhKdG0aAW16WOMFAT2ItJZg5aNvKJe15C4JjVxpcgTlCzTb0Q74a2znVKTt +e3xpe5fyUu+4bM/t1HKgJZNCHeEYotcvZbrHWLrmlLz0v+zvt8/ENSckuMIObqgo +CLidWOzhlTL462qPtj2kqTtzINnKtXNlGHoSNTdZxo4ASJBD8rQiTBTMZBbVBclW +xL7rKvL8C2+tYCkHwW2iJwl32WTiIwyRsfdyxG0ot+tozCOLvf+pPPy/7hG57RA0 +Yfw5j9jbbT/vxcUBrjN91wSzsEbYWlodZMuS8sXbmtWCzG+wXdF8X6nmc2g/J/1b +gA5h6oI9zFdwkGrH48oNtmXLlP3MXgRyugV5saAT7mQn+EEXmbKO0qysRsAd4Cqs +13YWDFYoTanm3+aDz2gXbHIzLBIInT1iEBp5K6IAS56gMglyQN7vqbEd1+88A/C5 +i7WzV6XeghRIpW7H1L5Da2/4liESrHmsKEsu3M60ST0Hub3PdjHd4sAjuFjYW8J3 +yQkheTkbYbe/hc+0TAdVN7nhYFGbEyrTpo2RvcRi9QUJ3M8IjfaWpPNuuj3oysJ7 +78I41KEix1eETDGdmNzA57SR9OctxGCUrtaqPsFP7GK0oXQGnpJSV74E09MM2a8k +CUZXu4SbsmRxmaXUf1MbGXqS7ShBrDBci/cIxOWOoUl+UiOIht8yGNYwyeArOCWJ +vb+LNyNK7CxHaeyYVdZy58szWzH1H3Np/fa0qEHQrTseHAbwjC+beI5hlXxx/AgR +cl8Y/Em8LdmODC5RL9JuMUghxzmgTR8Y9YakkwoRV46Hjp41Ayi2zBz6qKbwlR3p +o39WoAT2GguxIQvCCYK7G7x3AS8vo4Q6zi9C20oWAxTN1ovn1gOknR54Y0ZqZ5EG +DO5admR943ieM6p4byLqkfCy8A/k4k4RWcjVovMs4dAkl+U/KCKAZDnuvosCL4tm +bhop6nLzxBmxaevSbWjWZ/bCBMLitfaic4y5TiyWscoZP0uxfS25wy19ATPaBi9j +EerRGtfjcCkvghGFylCLZb8MQrVTAEugjNtrViqC4c7UUC+/j9IijmuUEE4IIVsN ++C+hItN7Lj2S0FM6dEa+1g== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/core/http/src/handlers/handler.rs b/core/http/src/handlers/handler.rs new file mode 100644 index 0000000000000000000000000000000000000000..38315a1cea3bf365d89699c3315bb5686edcc2f7 --- /dev/null +++ b/core/http/src/handlers/handler.rs @@ -0,0 +1,209 @@ +use std::{io, path::PathBuf}; + +use tokio::io::{AsyncBufReadExt, AsyncReadExt, BufReader, AsyncWrite, AsyncRead}; + +use crate::{handling::{ + file_handlers::NamedFile, + methods::Method, + request::Request, + response::{Outcome, Response, ResponseBody, Status}, + routes::{Body, Data}, +}, utils::urlencoded::UrlEncodeData}; +use crate::setup::MountPoint; + +/// The Maximal size of the Body of an HTTP-Message in bytes +static MAX_HTTP_MESSAGE_SIZE: u16 = 4196; + +/// Function which handles a TCP Connection according to http-Standards by taking in a +/// [tokio::net::TcpStream] and a [`Vec<MountPoint<'_>>`]. +/// +/// Firstly validates the headers and body, Aborts with error messages if it finds faults. +/// +/// Secondly matches the request with a route in the mountpoint Vector and executes its handler +/// function. If it fails, checks for another, if nothing is found writes back a +/// [Status::NotFound]. If the handler function could respond it uses the [Response] of the handler +/// +/// # Panics +/// No Panics +pub async fn handle_connection<T: AsyncRead + AsyncWrite + std::marker::Unpin>(mut stream: T, mountpoints: Vec<MountPoint<'_>>) { + let mut buf_reader = BufReader::new(&mut stream); + let mut http_request: Vec<String> = Vec::with_capacity(10); + loop { + let mut buffer = String::new(); + if buf_reader.read_line(&mut buffer).await.is_err() { + eprintln!("\x1b[31mAborting due to invalid UTF-8 in request header\x1b[0m"); + return; + } + if buffer == "\r\n" { + break; + } + http_request.push(buffer); + } + + let request_status_line = if let Some(status_line) = http_request.get(0).cloned() { + status_line + } else { + eprintln!("\x1b[31mAborting due to missing headers\x1b[0m"); + return; + }; + + let mut request = Request { + uri: if let Some(uri) = &request_status_line.split(' ').nth(1) { + if let Ok(uri) = UrlEncodeData::from_encoded(uri) { + uri + } else { + eprintln!("\x1b[31mAborting due to invalid uri\x1b[0m"); + return; + } + } else { + eprintln!("\x1b[31mAborting due to invalid status line\x1b[0m"); + return; + }, + cookies: Request::extract_cookies_from_vec(&mut http_request), + headers: http_request, + mime_type: None, + method: if let Some(method) = request_status_line.split(' ').next() { + if let Ok(ok) = method.parse() { + ok + } else { + eprintln!("\x1b[31mAborting due to invalid request method\x1b[0m"); + return; + } + } else { + eprintln!("\x1b[31mAborting due to invalid status line\x1b[0m"); + return; + }, + }; + + let mut data = Data { + is_complete: false, + buffer: vec![], + }; + if request.can_have_body() { + let length = if let Some(len) = request + .headers + .iter() + .filter(|header| header.starts_with("Content-Length: ")) + .map(|header| { + let header = header.strip_prefix("Content-Length: ").unwrap(); + header.trim().parse::<usize>() + }) + .next() + { + if let Ok(size) = len { + size + } else { + eprintln!( + "\x1b[31m`{}` must have a `Content-Length` header\x1b[0m", + request.method + ); + if let Err(e) = len_not_defined(stream, Status::LengthRequired).await { + error_occured_when_writing(e) + }; + return; + } + } else { + if request.mandatory_body() { + eprintln!( + "\x1b[31m`{}` must have a `Content-Length` header\x1b[0m", + request.method + ); + if let Err(e) = len_not_defined(stream, Status::LengthRequired).await { + error_occured_when_writing(e) + }; + return; + } + 0 + }; + if length != 0 { + request.mime_from_headers(); + let mut buffer = vec![0u8; MAX_HTTP_MESSAGE_SIZE.into()]; + let read = buf_reader.read(&mut buffer).await.unwrap(); + if read != length { + if let Err(e) = len_not_defined(stream, Status::LengthRequired).await { + error_occured_when_writing(e) + }; + return; + } + data.is_complete = true; + data.buffer = buffer; + } + } + + let mut handled_response: Option<Outcome<Response, Status, Data>> = None; + for mountpoint in mountpoints { + if request.uri.raw_string().is_none() { + return; + } + if !request.uri.raw_string().unwrap().starts_with(mountpoint.mountpoint) { + continue; + } + let mounted_request_uri = request.uri.raw_string().unwrap().strip_prefix(mountpoint.mountpoint).unwrap(); + for route in mountpoint.routes { + if (route.method != request.method) + && ((route.method != Method::Get) && (request.method == Method::Head)) + { + continue; + } + if !route.compare_uri(mounted_request_uri) { + continue; + } + handled_response = Some((route.handler)( + Request { + uri: UrlEncodeData::from_raw(mounted_request_uri), + ..request.clone() + }, + data.clone(), + )); + + if let Some(Outcome::Forward(_)) = handled_response { + continue; + } + break; + } + } + + let response = match handled_response { + Some(val) => match val { + Outcome::Success(success) => success, + Outcome::Failure(error) => failure_handler(error), + Outcome::Forward(_) => failure_handler(Status::NotFound), + }, + None => failure_handler(Status::NotFound), + }; + + if let Err(e) = response.write(stream, Some(request)).await { + eprintln!("\x1b[31mError {e} occured when trying to write answer to TCP-Stream for Client, aborting\x1b[0m"); + } +} + +/// Dumb function that renders a 404 page from any status given. but still writes that status code. +fn failure_handler(status: Status) -> Response { + let page_404 = NamedFile::open(PathBuf::from("404.html")).unwrap(); + Response { + cookies: None, + headers: vec![], + status: Some(status), + body: Box::new(Body::new(page_404.get_data(), page_404.get_mime())), + } +} + +/// Handler for len_not_defined errors. writes back directly +async fn len_not_defined<T: AsyncRead + AsyncWrite + std::marker::Unpin>(stream: T, status: Status) -> io::Result<()> { + let page_411 = NamedFile::open(PathBuf::from("411.html")).unwrap(); + Response { + cookies: None, + headers: vec![], + status: Some(status), + body: Box::new(Body::new(page_411.get_data(), page_411.get_mime())), + } + .write(stream, None) + .await?; + Ok(()) +} + +/// takes in an io error and writes it back in the server console to the user if writing failed +fn error_occured_when_writing(e: io::Error) { + eprintln!("\x1b[31mError {e} occured when trying to write answer to TCP-Stream for Client, aborting\x1b[0m"); +} + diff --git a/core/http/src/handlers/mod.rs b/core/http/src/handlers/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..062ae9d9be8041d0d83a1134f1bd0b3bafbb4b41 --- /dev/null +++ b/core/http/src/handlers/mod.rs @@ -0,0 +1 @@ +pub mod handler; diff --git a/core/http/src/handling/file_handlers.rs b/core/http/src/handling/file_handlers.rs new file mode 100644 index 0000000000000000000000000000000000000000..2d4d39bbcb0e9085e0ec33f1a487c1e3ebdd5d72 --- /dev/null +++ b/core/http/src/handling/file_handlers.rs @@ -0,0 +1,77 @@ +use std::{fs, path::PathBuf}; + +use crate::{ + handling::response::{ResponseBody, Status}, + utils::mime::Mime, +}; + +#[derive(Debug)] +/// Struct to handle files on the server side. +/// Validates paths ignores actions like `..` +pub struct NamedFile { + /// The length of the file in bytes, format: [usize] + pub content_len: usize, + /// The Mime Type of the file as a [Mime] + pub content_type: Mime, + /// The content of the file as a [`Vec<u8>`] + pub content: Vec<u8>, +} + +impl ResponseBody for NamedFile { + fn get_data(&self) -> Vec<u8> { + self.content.clone() + } + + fn get_mime(&self) -> Mime { + self.content_type + } + + fn get_len(&self) -> usize { + self.content_len + } +} + +impl NamedFile { + /// Reads in a file as a [NamedFile]. Ignores seqences like `..` + /// + /// # Panics + /// + /// Panics if a [PathBuf] can't be convertet to a [str] + /// + /// # Errors + /// + /// Can give a [Status::NotFound] if it can't find the file + /// + /// This function will return an error if . + pub fn open(path: PathBuf) -> Result<NamedFile, Status> { + let path = proove_path(path); + let data = fs::read(&path); + let data = match data { + Ok(dat) => dat, + Err(_) => { + return Err(Status::NotFound); + } + }; + Ok(NamedFile { + content_len: data.len(), + content_type: Mime::from_filename(path.to_str().unwrap()), + content: data, + }) + } +} + +/// Validates a path so that seqences like `//` and `..` are omitted +/// +/// # Panics +/// +/// Panics if it can't convert a [PathBuf] to a [str] +fn proove_path(path: PathBuf) -> PathBuf { + PathBuf::from( + path.to_str() + .unwrap() + .split('/') + .filter(|&val| val != ".." && !val.is_empty()) + .collect::<Vec<&str>>() + .join("/"), + ) +} diff --git a/core/http/src/handling/methods.rs b/core/http/src/handling/methods.rs new file mode 100644 index 0000000000000000000000000000000000000000..a13e498af505b385f6fc122f9af042f44a531d66 --- /dev/null +++ b/core/http/src/handling/methods.rs @@ -0,0 +1,50 @@ +use std::{fmt::Display, str::FromStr}; + +#[derive(PartialEq, Eq, Clone, Debug, Copy, PartialOrd, Ord)] +/// All HTTP Methods +pub enum Method { + Get, + Head, + Post, + Put, + Delete, + Connect, + Options, + Trace, + Patch, +} + +impl Display for Method { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Get => write!(f, "GET"), + Self::Head => write!(f, "HEAD"), + Self::Post => write!(f, "POST"), + Self::Put => write!(f, "PUT"), + Self::Delete => write!(f, "DELETE"), + Self::Connect => write!(f, "CONNECT"), + Self::Options => write!(f, "OPTIONS"), + Self::Trace => write!(f, "TRACE"), + Self::Patch => write!(f, "PATCH"), + } + } +} + +impl FromStr for Method { + type Err = &'static str; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + match s { + "GET" => Ok(Self::Get), + "HEAD" => Ok(Self::Head), + "POST" => Ok(Self::Post), + "PUT" => Ok(Self::Put), + "DELETE" => Ok(Self::Delete), + "CONNECT" => Ok(Self::Connect), + "OPTIONS" => Ok(Self::Options), + "TRACE" => Ok(Self::Trace), + "PATCH" => Ok(Self::Patch), + _ => Err("Not a Method"), + } + } +} diff --git a/core/http/src/handling/mod.rs b/core/http/src/handling/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..20cf31e7b362da8f020dd48a8df4047c13c1d093 --- /dev/null +++ b/core/http/src/handling/mod.rs @@ -0,0 +1,5 @@ +pub mod file_handlers; +pub mod methods; +pub mod request; +pub mod response; +pub mod routes; diff --git a/core/http/src/handling/request/cookies.rs b/core/http/src/handling/request/cookies.rs new file mode 100644 index 0000000000000000000000000000000000000000..7f75fc1d81f79fab5dd439c7a7429f8d356c7a90 --- /dev/null +++ b/core/http/src/handling/request/cookies.rs @@ -0,0 +1,95 @@ +use std::collections::HashMap; + +use super::Request; + +impl Request { + /// Extracts the cookies from a Vector and gives back an optional HashMap of Strings + /// + /// Returns none if there are no cookies or there is a problem with the cookies, for example + /// missing a value. + /// + /// Removes the `Cookie: ` Header from the Vector of headers + /// + /// # Examples + /// ``` + /// use http::handling::request::Request; + /// + /// + /// let mut request_vec = vec![ + /// "GET / HTTP/1.1".to_string(), + /// "Accept: sdf".to_string(), + /// "Cookie: io=23; f=as".to_string(), + /// "Format: gzip".to_string(), + /// ]; + /// let right_finished_vec = vec![ + /// "GET / HTTP/1.1".to_string(), + /// "Accept: sdf".to_string(), + /// "Format: gzip".to_string(), + /// ]; + /// + /// let mut wrong = vec!["GET / HTTP/1.1".to_string()]; + /// + /// assert_eq!(None, Request::extract_cookies_from_vec(&mut wrong)); + /// let cookies = Request::extract_cookies_from_vec(&mut request_vec); + /// assert_eq!(right_finished_vec, request_vec); + /// assert_eq!("23", cookies.clone().unwrap().get("io").unwrap()); + /// assert_eq!("as", cookies.unwrap().get("f").unwrap()); + /// ``` + /// + /// # Panics + /// No Panics + pub fn extract_cookies_from_vec(headers: &mut Vec<String>) -> Option<HashMap<String, String>> { + let mut cookies: HashMap<String, String> = HashMap::new(); + let mut cookies_string = if let Some(index) = headers + .iter() + .position(|header| header.starts_with("Cookie: ")) + { + headers.remove(index) + } else { + return None; + }; + cookies_string = cookies_string + .strip_prefix("Cookie: ") + .unwrap() + .trim() + .trim_matches('"') + .to_string(); + for cookie in cookies_string.split(';') { + let Some((name, cookie)) = cookie.split_once('=') else { + return None; + }; + cookies + .entry(name.trim().to_string()) + .or_insert(cookie.trim().to_string()); + } + Some(cookies) + } +} + +#[cfg(test)] +mod test { + use crate::handling::request::Request; + + #[test] + fn test_cookies() { + let mut request_vec = vec![ + "GET / HTTP/1.1".to_string(), + "Accept: sdf".to_string(), + "Cookie: io=23; f=as".to_string(), + "Format: gzip".to_string(), + ]; + let right_finished_vec = vec![ + "GET / HTTP/1.1".to_string(), + "Accept: sdf".to_string(), + "Format: gzip".to_string(), + ]; + + let mut wrong = vec!["GET / HTTP/1.1".to_string()]; + + assert_eq!(None, Request::extract_cookies_from_vec(&mut wrong)); + let cookies = Request::extract_cookies_from_vec(&mut request_vec); + assert_eq!(right_finished_vec, request_vec); + assert_eq!("23", cookies.clone().unwrap().get("io").unwrap()); + assert_eq!("as", cookies.unwrap().get("f").unwrap()); + } +} diff --git a/core/http/src/handling/request/datatypes.rs b/core/http/src/handling/request/datatypes.rs new file mode 100644 index 0000000000000000000000000000000000000000..44f1cf3e1fe0083f84da94b337f167a14fece4bf --- /dev/null +++ b/core/http/src/handling/request/datatypes.rs @@ -0,0 +1,70 @@ +use std::{collections::HashMap, error::Error, fmt::Display}; + +use crate::{ + handling::methods::Method, + utils::{mime::Mime, urlencoded::UrlEncodeData}, +}; + +type HeaderMap = Vec<String>; + +/// A struct to handle Requests +/// +#[derive(Clone)] +pub struct Request { + /// The requested Uri + pub uri: UrlEncodeData, + /// All headers of the request that haven't been parsed + pub headers: HeaderMap, + /// The methods Request represented with the [Method] + pub method: Method, + /// An optional HashMap representation of all Cookies of the request + pub cookies: Option<HashMap<String, String>>, + /// If the has a body it represents the [Mime]-type of the body + pub mime_type: Option<(Mime, String)>, + // pub connection: ConnectionMeta, +} + +// struct ConnectionMeta { +// remote: Option<SocketAddr>, +// // certificates +// } + +#[derive(Clone, Debug, Copy, PartialEq, Eq, PartialOrd, Ord)] +/// Media Types in which a Route can be requested to ansewr, optional for routes +pub enum MediaType { + /// Json Data + Json, + /// Plain Text + Plain, + /// HTML Text + Html, +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum ParseErrors { + NoData, + BadData, +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +/// Errors that Occur when a Form can't be parsed +pub struct ParseFormError { + pub error: ParseErrors, +} + +impl Display for ParseFormError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.error) + } +} + +impl Display for ParseErrors { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ParseErrors::NoData => write!(f, "No Data at key"), + ParseErrors::BadData => write!(f, "Bad Data at key"), + } + } +} + +impl Error for ParseFormError {} diff --git a/core/http/src/handling/request/form_utils.rs b/core/http/src/handling/request/form_utils.rs new file mode 100644 index 0000000000000000000000000000000000000000..cc8999d7cc5eef4d0fa667c9c93d0dff0442572c --- /dev/null +++ b/core/http/src/handling/request/form_utils.rs @@ -0,0 +1,354 @@ +use std::collections::HashMap; + +use crate::{ + handling::routes::Data, + utils::{mime::Mime, urlencoded::DeCodable}, +}; + +use super::{datatypes::ParseErrors, ParseFormError, Request}; +static TWO_NEWLINES: u8 = 3; + +impl Request { + /// # Gets data from a get_form as a HashMap + /// + /// # Errors + /// Gives back a [ParseFormError], top level, if there is lacking data + /// + /// If everything is fine on the top level it gives back a HashMap of keys and Results, that + /// indicate wether the key exists with the [ParseFormError] with an error of + /// [ParseErrors::NoData] or wether the key is corrupt with the [ParseErrors::BadData]-Variant + /// + /// # Examples + /// ``` + /// use http::handling::{request::{Request, ParseFormError, ParseErrors}, methods::Method}; + /// use http::utils::urlencoded::UrlEncodeData; + /// + /// + /// let request = Request { + /// uri: UrlEncodeData::from_encoded("/form?name=Name&age=Age").unwrap(), + /// headers: vec![], + /// method: Method::Get, + /// cookies: None, + /// mime_type: None, + /// }; + /// let right = request.get_get_form_keys(&["name", "age"]).unwrap(); + /// assert_eq!(&"Name", right.get("name").unwrap().as_ref().unwrap()); + /// assert_eq!(&"Age", right.get("age").unwrap().as_ref().unwrap()); + /// + /// let wrong_request = Request { + /// uri: UrlEncodeData::from_encoded("/form").unwrap(), + /// ..request.clone() + /// }; + /// assert_eq!( + /// Err(ParseFormError { + /// error: ParseErrors::NoData + /// }), + /// wrong_request.get_get_form_keys(&["name", "age"]) + /// ); + /// + /// let bad_data = Request { + /// uri: UrlEncodeData::from_encoded("/form?age=").unwrap(), + /// ..request.clone() + /// }; + /// let wrong = bad_data.get_get_form_keys(&["name", "age"]).unwrap(); + /// assert_eq!( + /// &Err(ParseFormError { + /// error: ParseErrors::NoData + /// }), + /// wrong.get("name").unwrap() + /// ); + /// assert_eq!(&Ok(""), wrong.get("age").unwrap()); + /// ``` + /// + /// # Panics + /// No Panics + pub fn get_get_form_keys<'a>( + &'a self, + keys: &'a [&str], + ) -> Result<HashMap<&str, Result<&str, ParseFormError>>, ParseFormError> { + let Some(uri) = self.uri.raw_string() else { + return Err(ParseFormError { error: ParseErrors::BadData }); + }; + let data = if let Some(val) = uri.split_once('?') { + val + } else { + return Err(ParseFormError { + error: ParseErrors::NoData, + }); + }; + let data = data + .1 + .split('&') + .map(|kvp| kvp.split_once('=')) + .collect::<Vec<Option<(&str, &str)>>>(); + + let mut values: HashMap<&str, &str> = HashMap::new(); + for kvp in data { + let kvp = if let Some(kvp) = kvp { + kvp + } else { + continue; + }; + values.insert(kvp.0, kvp.1); + } + let mut response = HashMap::new(); + for key in keys { + let entry = if let Some(val) = values.get(key) { + Ok(*val) + } else { + Err(ParseFormError { + error: ParseErrors::NoData, + }) + }; + response.insert(*key, entry); + } + Ok(response) + } + pub fn get_post_data<'a>( + &'a self, + keys: &[&'a str], + data: &Data, + ) -> Result<HashMap<String, Result<Vec<u8>, ParseFormError>>, ParseFormError> { + let data = data.buffer.as_slice(); + let mut keymap: HashMap<String, Result<Vec<u8>, ParseFormError>> = + HashMap::with_capacity(keys.len()); + + for key in keys { + keymap.entry(key.to_string()).or_insert(Err(ParseFormError { + error: ParseErrors::NoData, + })); + } + let Some(ref mime_type) = self.mime_type else { + return Err(ParseFormError { error: ParseErrors::BadData }); + }; + + match mime_type.0 { + Mime::ApplicationXWwwFormUrlencoded => { + let Ok(data) = String::from_utf8(data.to_vec()) else { + return Err(ParseFormError { error: ParseErrors::BadData }); + }; + for kvp in data.split('&') { + let Some(kvp) = kvp.split_once('=') else { + return Err(ParseFormError { error: ParseErrors::BadData }); + }; + let Ok(key) = kvp.0.decode() else { + return Err(ParseFormError { error: ParseErrors::BadData }); + }; + let Ok(key) = String::from_utf8(key) else { + return Err(ParseFormError { error: ParseErrors::BadData }); + }; + let Ok(value) = kvp.1.trim_end_matches('\0').decode() else { + return Err(ParseFormError { error: ParseErrors::BadData }); + }; + let Some(thing) = keymap.get_mut(&key) else { + continue; + }; + *thing = Ok(value); + } + } + Mime::MultipartFormData => { + let Some(mut boundary) = mime_type.1.split(';').find(|element| element.trim().starts_with("boundary=")) else { + return Err(ParseFormError { error: ParseErrors::BadData }); + }; + boundary = boundary + .trim() + .strip_prefix("boundary=") + .unwrap() + .trim_matches('"'); + let mut temp_bound = "--".to_string(); + temp_bound.push_str(boundary); + let end_boundary: Vec<u8> = format!("{temp_bound}--\r").into(); + temp_bound.push('\r'); + let boundary = temp_bound.as_bytes(); + Self::get_multipart_data(data, boundary, &end_boundary, &mut keymap); + } + _ => { + return Err(ParseFormError { + error: ParseErrors::BadData, + }) + } + }; + Ok(keymap) + } + fn get_multipart_data( + data: &[u8], + boundary: &[u8], + end_boundary: &[u8], + map: &mut HashMap<String, Result<Vec<u8>, ParseFormError>>, + ) { + let mut current_part: Vec<&[u8]> = vec![]; + let mut current_key: Option<String> = None; + let mut ignore_line = 0; + for part in data.split(|byte| byte == &b'\n') { + if part == [b'\r'] { + if current_key.is_some() { + if ignore_line >= TWO_NEWLINES { + current_part.push(&[b'\n']); + continue; + } + ignore_line += 1; + } + continue; + } + if part == end_boundary { + if let Some(key) = ¤t_key { + let mut part = current_part.join(&b'\n'); + if part.ends_with(&[b'\r']) { + part.pop(); + } + map.insert(key.to_string(), Ok(part)); + } + break; + } + if part == boundary { + if let Some(key) = ¤t_key { + let mut part = current_part.join(&b'\n'); + if part.ends_with(&[b'\r']) { + part.pop(); + } + map.insert(key.to_string(), Ok(part)); + } + current_part = vec![]; + current_key = None; + ignore_line = 0; + continue; + } + if part.starts_with(b"Content-Disposition: form-data; name=") { + let headers = part + .split(|byte| byte == &b';') + .filter(|header| !header.is_empty()) + .collect::<Vec<_>>(); + if headers.len() < 2 { + continue; + } + let name = headers[1].split(|byte| byte == &b'=').collect::<Vec<_>>(); + if name.len() != 2 { + continue; + } + let mkey = String::from_utf8_lossy(name[1]) + .as_ref() + .trim_end() + .trim_matches('"') + .to_owned(); + + if map.contains_key::<str>(&mkey) { + current_key = Some(mkey.to_owned()); + } + continue; + } else if current_key.is_some() { + current_part.push(part); + } + } + } +} +#[cfg(test)] +mod test { + use crate::{ + handling::{ + methods::Method, + request::{datatypes::ParseErrors, ParseFormError}, + routes::Data, + }, + utils::{ + mime::Mime::{ApplicationXWwwFormUrlencoded, MultipartFormData}, + urlencoded::UrlEncodeData, + }, + }; + + use super::Request; + #[test] + fn try_get_test() { + let request = Request { + uri: UrlEncodeData::from_encoded("/form?name=Name&age=Age").unwrap(), + headers: vec![], + method: Method::Get, + cookies: None, + mime_type: None, + }; + let right = request.get_get_form_keys(&["name", "age"]).unwrap(); + assert_eq!(&"Name", right.get("name").unwrap().as_ref().unwrap()); + assert_eq!(&"Age", right.get("age").unwrap().as_ref().unwrap()); + + let wrong_request = Request { + uri: UrlEncodeData::from_encoded("/form").unwrap(), + ..request.clone() + }; + assert_eq!( + Err(ParseFormError { + error: ParseErrors::NoData + }), + wrong_request.get_get_form_keys(&["name", "age"]) + ); + + let bad_data = Request { + uri: UrlEncodeData::from_encoded("/form?age=").unwrap(), + ..request.clone() + }; + let wrong = bad_data.get_get_form_keys(&["name", "age"]).unwrap(); + assert_eq!( + &Err(ParseFormError { + error: ParseErrors::NoData + }), + wrong.get("name").unwrap() + ); + assert_eq!(&Ok(""), wrong.get("age").unwrap()); + } + + #[test] + fn try_post_text() { + let req = Request { + uri: UrlEncodeData::from_encoded("").unwrap(), + headers: vec!["Content-Type: application/x-www-form-urlencoded".to_string()], + method: Method::Post, + cookies: None, + mime_type: Some((ApplicationXWwwFormUrlencoded, "".into())), + }; + let data = Data { + buffer: b"message=23&message1=24".to_vec(), + is_complete: true, + }; + let map = req.get_post_data(&["message", "message1"], &data).unwrap(); + assert_eq!( + &b"23".to_vec(), + map.get("message").unwrap().as_ref().unwrap() + ); + assert_eq!( + &b"24".to_vec(), + map.get("message1").unwrap().as_ref().unwrap() + ); + let req = Request { + uri: UrlEncodeData::from_encoded("").unwrap(), + headers: vec!["Content-Type: multipart/form-data; boundary=\"boundary\"".to_string()], + method: Method::Post, + cookies: None, + mime_type: Some(( + MultipartFormData, + "charset=UTF-8; boundary=\"boundary\"".into(), + )), + }; + let data = Data { + buffer: b"--boundary\r +Content-Disposition: form-data; name=\"field1\"\r +\r +value1\r +--boundary\r +Content-Disposition: form-data; name=\"field2\"; filename=\"example.txt\"\r +\r +va\nlue2\r +--boundary--\r +" + .to_vec(), + is_complete: true, + }; + let map = req.get_post_data(&["field1", "field2"], &data).unwrap(); + + assert_eq!( + &b"value1".to_vec(), + map.get("field1").unwrap().as_ref().unwrap() + ); + assert_eq!( + &b"va\nlue2".to_vec(), + map.get("field2").unwrap().as_ref().unwrap() + ); + } +} diff --git a/core/http/src/handling/request/mod.rs b/core/http/src/handling/request/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..f04c57a22bd63d4b9e2e832578740bc9992206de --- /dev/null +++ b/core/http/src/handling/request/mod.rs @@ -0,0 +1,6 @@ +mod cookies; +mod datatypes; +mod form_utils; +mod request_impl; +mod request_mime; +pub use datatypes::{MediaType, ParseErrors, ParseFormError, Request}; diff --git a/core/http/src/handling/request/request_impl.rs b/core/http/src/handling/request/request_impl.rs new file mode 100644 index 0000000000000000000000000000000000000000..01d6e4498bf964b9f244db91a318882d228f8328 --- /dev/null +++ b/core/http/src/handling/request/request_impl.rs @@ -0,0 +1,17 @@ +use crate::handling::methods::Method; + +use super::Request; + +impl Request { + /// Checks if the request can have a body + pub fn can_have_body(&self) -> bool { + matches!( + self.method, + Method::Post | Method::Put | Method::Patch | Method::Delete + ) + } + /// Checks if a body is mandatory for the Request + pub fn mandatory_body(&self) -> bool { + matches!(self.method, Method::Post | Method::Put | Method::Patch) + } +} diff --git a/core/http/src/handling/request/request_mime.rs b/core/http/src/handling/request/request_mime.rs new file mode 100644 index 0000000000000000000000000000000000000000..75ad1e547677443479764d6b94013aacd57156ec --- /dev/null +++ b/core/http/src/handling/request/request_mime.rs @@ -0,0 +1,108 @@ +use super::datatypes::Request; + +impl Request { + /// Sets the `mime_type` of this [`Request`] from the headers. + /// + /// The mime_type can remain none if there isn't a `Content-Type: ` header + /// + /// # Example + /// ``` + /// use http::{ + /// handling::{methods::Method, request::Request}, + /// utils::{mime::Mime, urlencoded::UrlEncodeData}, + /// }; + /// + /// let mut request = Request { + /// uri: UrlEncodeData::from_encoded("thing").unwrap(), + /// headers: vec![ + /// "GET / 23".to_string(), + /// "SDF:LKJSD:F".to_string(), + /// "Content-Type: text/plain; charset=UTF-8".to_string(), + /// "SDF".to_string(), + /// ], + /// method: Method::Get, + /// cookies: None, + /// mime_type: None, + /// }; + /// let mut wrong = Request { + /// uri: UrlEncodeData::from_encoded("thing").unwrap(), + /// headers: vec![ + /// "GET / 23".to_string(), + /// "SDF:LKJSD:F".to_string(), + /// "SDF".to_string(), + /// ], + /// method: Method::Get, + /// cookies: None, + /// mime_type: None, + /// }; + /// request.mime_from_headers(); + /// wrong.mime_from_headers(); + /// assert_eq!(None, wrong.mime_type); + /// assert_eq!((Mime::TextPlain, " charset=UTF-8".to_string()), request.mime_type.unwrap()); + /// ``` + /// # Panics + /// No Panics + pub fn mime_from_headers(&mut self) { + let Some(content_type_header) = self.headers + .iter() + .find(|header| header.starts_with("Content-Type: ")) else { + return; + }; + let content_type_string: &str = content_type_header + .strip_prefix("Content-Type: ") + .unwrap() + .trim(); + + self.mime_type = if let Some(content_type) = content_type_string.split_once(';') { + let Ok(mime) = content_type.0.trim().parse() else { + return; + }; + Some((mime, content_type.1.to_owned())) + } else { + let Ok(mime) = content_type_string.parse() else { + return; + }; + Some((mime, "".to_owned())) + }; + } +} + +#[cfg(test)] +mod test { + use crate::{ + handling::{methods::Method, request::Request}, + utils::{mime::Mime, urlencoded::UrlEncodeData}, + }; + + #[test] + pub fn test_mime_parse_from_header_vec() { + let mut request = Request { + uri: UrlEncodeData::from_raw("thing"), + headers: vec![ + "GET / 23".to_string(), + "SDF:LKJSD:F".to_string(), + "Content-Type: text/plain".to_string(), + "SDF".to_string(), + ], + method: Method::Get, + cookies: None, + mime_type: None, + }; + + let mut wrong = Request { + uri: UrlEncodeData::from_raw("thing"), + headers: vec![ + "GET / 23".to_string(), + "SDF:LKJSD:F".to_string(), + "SDF".to_string(), + ], + method: Method::Get, + cookies: None, + mime_type: None, + }; + request.mime_from_headers(); + wrong.mime_from_headers(); + assert_eq!(None, wrong.mime_type); + assert_eq!((Mime::TextPlain, "".to_owned()), request.mime_type.unwrap()); + } +} diff --git a/core/http/src/handling/response/build_and_write.rs b/core/http/src/handling/response/build_and_write.rs new file mode 100644 index 0000000000000000000000000000000000000000..a8cdb09f24704d24a7a026a0c9ccf60b20257a04 --- /dev/null +++ b/core/http/src/handling/response/build_and_write.rs @@ -0,0 +1,40 @@ +use std::io::Result; + +use tokio::io::{AsyncWriteExt, AsyncRead, AsyncWrite}; + +use crate::handling::{methods::Method, request::Request, response::Status}; + +use super::Response; + +impl Response { + /// Builds a [`Vec<u8>`] valid http response from a [Response] and consumes it. Optionally + /// takes in a request for things like [Method::Head] + pub fn build(self, request: Option<Request>) -> Vec<u8> { + let compiled_headers = format!( + "HTTP/1.1 {}\r\nContent-Length: {}\r\nContent-Type: {}\r\n", + self.status.unwrap_or(Status::Ok), + self.body.get_len(), + self.body.get_mime() + ) + &self.headers.join("\r\n") + + "\r\n"; + let is_head = if let Some(req) = request { + req.method == Method::Head + } else { + false + }; + let compiled_body = if is_head { + vec![] + } else { + self.body.get_data() + }; + let mut compiled_out: Vec<u8> = compiled_headers.into(); + compiled_out.extend_from_slice(&compiled_body); + compiled_out + } + /// Builds and writes The http-Response, consumes the [tokio::net::TcpStream] [Request] and [Response] + pub async fn write<T: AsyncRead + AsyncWrite + std::marker::Unpin>(self, mut stream: T, request: Option<Request>) -> Result<()> { + let resp = self.build(request); + stream.write_all(&resp).await?; + Ok(()) + } +} diff --git a/core/http/src/handling/response/cookie_management/cookie.rs b/core/http/src/handling/response/cookie_management/cookie.rs new file mode 100644 index 0000000000000000000000000000000000000000..6175266c4539d5465d00c13596074dcab72ad4d0 --- /dev/null +++ b/core/http/src/handling/response/cookie_management/cookie.rs @@ -0,0 +1,273 @@ +use std::{collections::HashMap, str::FromStr, time::Duration}; + +use crate::{ + handling::response::{cookie_management::error_types::CookieError, CookieBuilder}, + utils::{url_utils::Uri, urlencoded::DeCodable}, +}; + +macro_rules! update_map { + ($map:expr, $key:expr) => { + *$map.get_mut($key).unwrap() = true; + }; +} + +use super::error_types::{ParseCookieError, ParseSameSiteError, SameSiteError}; + +/// Structure representing a Cookie +/// # Creating a Cookie: +/// ``` +/// use http::handling::response::Cookie; +/// use http::handling::response::CookieBuilder; +/// +/// let cookie = CookieBuilder::build("name", "value").finish(); +/// ``` +#[derive(PartialEq, Eq, PartialOrd, Ord, Debug)] +pub struct Cookie { + /// Storage for the cookie string. Only used if this structure was derived + /// from a string that was subsequently parsed. + pub(crate) cookie_string: Option<String>, + pub(crate) name: String, + pub(crate) value: String, + /// Whether this cookie was marked Secure. + pub(crate) secure: bool, + /// Whether this cookie was marked HttpOnly. + pub(crate) http_only: bool, + pub(crate) partitioned: bool, + // expires: Option<Tm>, + pub(crate) max_age: Option<Duration>, + /// The draft `SameSite` attribute. + pub(crate) same_site: Option<SameSite>, + /// The cookie's domain, if any. + pub(crate) domain: Option<String>, + /// The cookie's path domain, if any. + pub(crate) path: Option<Uri>, + pub(crate) expires: Option<String>, +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +/// SameSite Paremeters +pub enum SameSite { + /// Requires Secure + None, + Lax, + Strict, +} + +impl std::fmt::Display for SameSite { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::None => write!(f, "SameSite=None"), + Self::Lax => write!(f, "SameSite=Lax"), + Self::Strict => write!(f, "SameSite=Strict"), + } + } +} + +impl FromStr for SameSite { + type Err = ParseSameSiteError; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + match s { + "None" => Ok(SameSite::None), + "Lax" => Ok(SameSite::Lax), + "Strict" => Ok(SameSite::Strict), + _ => Err(Self::Err { + inner: SameSiteError::NotAValidVariant, + }), + } + } +} + +impl std::fmt::Display for Cookie { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut appendix = String::from(""); + if self.secure { + appendix += "; Secure"; + } + if self.http_only { + appendix += "; HttpOnly"; + } + if self.partitioned { + appendix += "; Partitioned"; + } + if let Some(max_age) = &self.max_age { + appendix += &format!("; Max-Age={}", max_age.as_secs()); + } + if let Some(domain) = &self.domain { + appendix += &format!("; Domain={}", domain); + } + if let Some(path) = &self.path { + appendix += &format!("; Path={}", path); + } + if let Some(same_site) = &self.same_site { + appendix += &format!("; {}", same_site); + if !self.secure && *same_site == SameSite::None { + appendix += "; Secure"; + } + } + if let Some(expires) = &self.expires { + appendix += &format!("; Expires={}", expires) + } + write!(f, "Set-Cookie: {}={}{}", self.name, self.value, appendix) + } +} + +impl FromStr for Cookie { + type Err = ParseCookieError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + let mut map = HashMap::with_capacity(8); + map.insert("Partitioned", false); + map.insert("HttpOnly", false); + map.insert("Secure", false); + map.insert("SameSite", false); + map.insert("Max-Age", false); + map.insert("Domain", false); + map.insert("Path", false); + map.insert("Expires", false); + let mut final_result = CookieBuilder::build("", ""); + let mut first = true; + let stripped = s.strip_prefix("Set-Cookie: ").ok_or(Self::Err { + inner: CookieError::NoSetCookieHeader, + })?; + for part in stripped.split(';') { + let trimmed_part = part.trim(); + if first { + let Some(name_val) = part.split_once('=') else { + return Err(Self::Err { inner: CookieError::MissingEqual }); + }; + unsafe { + final_result = CookieBuilder::build( + &String::from_utf8_unchecked(if let Ok(name) = name_val.0.decode() { + name + } else { + name_val.0.into() + }), + &String::from_utf8_unchecked(if let Ok(value) = name_val.1.decode() { + value + } else { + name_val.1.into() + }), + ); + } + first = false; + continue; + } + if !map.get("Max-Age").unwrap() && trimmed_part.starts_with("Max-Age=") { + final_result = final_result.max_age(Duration::from_secs( + trimmed_part + .strip_prefix("Max-Age=") + .unwrap() + .parse() + .map_err(|_| Self::Err { + inner: CookieError::InvalidMaxAge, + })?, + )); + update_map!(map, "Max-Age"); + continue; + } + if !map.get("Expires").unwrap() && trimmed_part.starts_with("Expires=") { + final_result = final_result.expires(trimmed_part.strip_prefix("Expires=").unwrap()); + update_map!(map, "Expires"); + continue; + } + if !map.get("HttpOnly").unwrap() && trimmed_part == "HttpOnly" { + final_result = final_result.http_only(true); + update_map!(map, "HttpOnly"); + continue; + } + if !map.get("SameSite").unwrap() && trimmed_part.starts_with("SameSite=") { + final_result = final_result.same_site( + trimmed_part + .strip_prefix("SameSite=") + .unwrap() + .parse::<SameSite>() + .map_err(|err| Self::Err { + inner: CookieError::InvilidSameSite(err.inner), + })?, + ); + update_map!(map, "SameSite"); + continue; + } + if !map.get("Path").unwrap() && trimmed_part.starts_with("Path=") { + final_result = final_result.path( + trimmed_part + .strip_prefix("Path=") + .unwrap() + .parse::<Uri>() + .map_err(|err| Self::Err { + inner: CookieError::PathError(err.error), + })?, + ); + update_map!(map, "Path"); + continue; + } + if !map.get("Domain").unwrap() && trimmed_part.starts_with("Domain=") { + final_result = final_result.domain(trimmed_part.strip_prefix("Domain=").unwrap()); + update_map!(map, "Domain"); + continue; + } + if !map.get("Secure").unwrap() && trimmed_part == "Secure" { + final_result = final_result.secure(true); + update_map!(map, "Secure"); + continue; + } + + if !map.get("Partitioned").unwrap() && trimmed_part == "Partitioned" { + final_result = final_result.partitioned(true); + update_map!(map, "Partitioned"); + continue; + } + } + Ok(final_result.finish()) + } +} + +#[cfg(test)] +mod test { + use std::time::Duration; + + use crate::handling::response::{Cookie, CookieBuilder}; + + use super::SameSite; + + #[test] + fn test_cookie_to_string() { + let test_cookie1 = CookieBuilder::build("a", "cookie").finish().to_string(); + let test_cookie1_res = "Set-Cookie: a=cookie"; + let test_cookie2 = CookieBuilder::build("a", "secure_cookie") + .secure(true) + .finish() + .to_string(); + let test_cookie2_res = "Set-Cookie: a=secure_cookie; Secure"; + let test_cookie3 = CookieBuilder::build("ab", "ss") + .max_age(Duration::from_secs(24)) + .domain("codecraft.com") + .path("/".parse().unwrap()) + .same_site(SameSite::None) + .http_only(true) + .partitioned(true) + .expires("Monday") + .finish(); + let test_cookie3_res = "Set-Cookie: ab=ss; Secure; HttpOnly; Partitioned; \ + Max-Age=24; Domain=codecraft.com; Path=/; SameSite=None; Expires=Monday"; + + assert_eq!(test_cookie1_res, test_cookie1); + assert_eq!(test_cookie2_res, test_cookie2); + assert_eq!(test_cookie3_res, test_cookie3.to_string()); + } + #[test] + fn cookie_from_string() { + let test_cookie3_res = "Set-Cookie: ab=ss; HttpOnly; Partitioned; \ + Max-Age=24; Domain=codecraft.com; Path=/; SameSite=None; Secure; Expires=Monday"; + let test_cookie3 = CookieBuilder::build("ab", "ss") + .max_age(Duration::from_secs(24)) + .domain("codecraft.com") + .path("/".parse().unwrap()) + .same_site(SameSite::None) + .http_only(true) + .partitioned(true) + .expires("Monday") + .finish(); + assert_eq!(test_cookie3, test_cookie3_res.parse::<Cookie>().unwrap()); + } +} diff --git a/core/http/src/handling/response/cookie_management/cookie_builder.rs b/core/http/src/handling/response/cookie_management/cookie_builder.rs new file mode 100644 index 0000000000000000000000000000000000000000..269925787f17fcbef64e9760f0795e1f935464e9 --- /dev/null +++ b/core/http/src/handling/response/cookie_management/cookie_builder.rs @@ -0,0 +1,87 @@ +use std::time::Duration; + +use crate::utils::{url_utils::Uri, urlencoded::EnCodable}; + +use super::{Cookie, SameSite}; + +/// Builder wrapper for a Cookie +/// +/// # Example +/// ``` +/// use http::handling::response::Cookie; +/// use http::handling::response::CookieBuilder; +/// +/// let cookie = CookieBuilder::build("name", "value").path("/".parse().unwrap()).finish(); +/// ``` +#[derive(Debug)] +pub struct CookieBuilder { + /// Cookie under the hood + inner: Cookie, +} + +impl CookieBuilder { + /// Builds a basic CookieBuilder from a name and a value + pub fn build(name: &str, value: &str) -> Self { + CookieBuilder { + inner: Cookie { + cookie_string: None, + name: name.encode(), + value: value.encode(), + max_age: None, + domain: None, + path: None, + secure: false, + http_only: false, + same_site: None, + expires: None, + partitioned: false, + }, + } + } + pub fn finish(self) -> Cookie { + self.inner + } + pub fn max_age(mut self, duration: Duration) -> Self { + self.inner.max_age = Some(duration); + self + } + pub fn domain(mut self, domain: &str) -> Self { + self.inner.domain = Some(domain.encode()); + self + } + pub fn path(mut self, path: Uri) -> Self { + self.inner.path = Some(path); + self + } + pub fn secure(mut self, secure: bool) -> Self { + self.inner.secure = secure; + self + } + pub fn http_only(mut self, http_only: bool) -> Self { + self.inner.http_only = http_only; + self + } + pub fn same_site(mut self, same_site: SameSite) -> Self { + if same_site == SameSite::None { + self.inner.secure = true; + } + self.inner.same_site = Some(same_site); + self + } + pub fn expires(mut self, expire: &str) -> Self { + self.inner.expires = Some(expire.encode()); + self + } + pub fn partitioned(mut self, partitioned: bool) -> Self { + self.inner.partitioned = partitioned; + self + } + pub fn name(mut self, name: &str) -> Self { + self.inner.name = name.encode(); + self + } + pub fn value(mut self, value: &str) -> Self { + self.inner.value = value.encode(); + self + } +} diff --git a/core/http/src/handling/response/cookie_management/error_types.rs b/core/http/src/handling/response/cookie_management/error_types.rs new file mode 100644 index 0000000000000000000000000000000000000000..12277c05d92924bdb73f558b1df5ff7a498b8e34 --- /dev/null +++ b/core/http/src/handling/response/cookie_management/error_types.rs @@ -0,0 +1,43 @@ +use std::error::Error; + +use crate::utils::url_utils::UriError; + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum SameSiteError { + NotAValidVariant, +} + +#[derive(Debug)] +pub struct ParseSameSiteError { + pub inner: SameSiteError, +} + +impl Error for ParseSameSiteError {} + +impl std::fmt::Display for ParseSameSiteError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } +} +impl Error for ParseCookieError {} + +#[derive(Debug)] +pub struct ParseCookieError { + pub inner: CookieError, +} + +#[derive(Debug, PartialEq, PartialOrd, Eq, Ord)] +pub enum CookieError { + MissingEqual, + InvalidAttribute, + InvalidMaxAge, + NoSetCookieHeader, + InvilidSameSite(SameSiteError), + PathError(UriError), +} + +impl std::fmt::Display for ParseCookieError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "ParseCookieError {{ error: {:?} }}", self.inner) + } +} diff --git a/core/http/src/handling/response/cookie_management/mod.rs b/core/http/src/handling/response/cookie_management/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..5681658fbc6aa339cde0466a7f96bc56af7a22a2 --- /dev/null +++ b/core/http/src/handling/response/cookie_management/mod.rs @@ -0,0 +1,11 @@ +mod cookie; +mod cookie_builder; +mod error_types; + +pub use cookie::Cookie; +pub use cookie::SameSite; +pub use cookie_builder::CookieBuilder; +pub use error_types::CookieError; +pub use error_types::ParseCookieError; +pub use error_types::ParseSameSiteError; +pub use error_types::SameSiteError; diff --git a/core/http/src/handling/response/datatypes.rs b/core/http/src/handling/response/datatypes.rs new file mode 100644 index 0000000000000000000000000000000000000000..b8657ee781f15c8e97d5b544431a8a93f9dec0a2 --- /dev/null +++ b/core/http/src/handling/response/datatypes.rs @@ -0,0 +1,40 @@ +use super::{Cookie, ResponseBody, Status}; + +type HeaderMap = Vec<String>; + +#[derive(Debug)] +/// Enum for the result of a Handling Function, where... +/// +/// [Outcome::Success] represents that the route +/// was successful and the Answer is contained in \[S\]. +/// [Outcome::Failure] represents that it was unsuccessful and nobody else is going to be +/// successful. \[E\] represnts the Error Code. +/// [Outcome::Forward] represents that some requirements weren't met for a route to be working with +/// the request so the next one that matches should cover that \[F\] represents the maybe processed +/// data of the request. +/// +/// # Example +/// ``` +/// use http::handling::{response::{Outcome, Response, Status}, routes::Data, request::Request}; +/// fn handler(request: Request, _data: Data) -> Outcome<Response, Status, Data> { +/// todo!() +/// } +/// ``` +pub enum Outcome<S, E, F> { + Success(S), + Failure(E), + Forward(F), +} + +/// Response is a wrapper for http responses. +#[derive(Debug)] +pub struct Response { + /// the [`Vec<String>`] of headers unrelated to `Content-Type` and `Content-Length` + pub headers: HeaderMap, + /// Optional Cookie in the response + pub cookies: Option<Cookie>, + /// Status code of the response + pub status: Option<Status>, + /// Response body and `Content-Type` and `Content-Length` headers. + pub body: Box<dyn ResponseBody>, +} diff --git a/core/http/src/handling/response/mod.rs b/core/http/src/handling/response/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..9233b38f814a27a9825c6e6b48a7c70807ef333b --- /dev/null +++ b/core/http/src/handling/response/mod.rs @@ -0,0 +1,13 @@ +mod build_and_write; +mod cookie_management; +mod datatypes; +mod status; +mod traits; + +pub use cookie_management::Cookie; +pub use cookie_management::CookieBuilder; +pub use cookie_management::SameSite; +pub use datatypes::Outcome; +pub use datatypes::Response; +pub use status::Status; +pub use traits::ResponseBody; diff --git a/core/http/src/handling/response/status.rs b/core/http/src/handling/response/status.rs new file mode 100644 index 0000000000000000000000000000000000000000..dfc56a555b706b1d2aa8559fc54f73341dbeeccd --- /dev/null +++ b/core/http/src/handling/response/status.rs @@ -0,0 +1,160 @@ +use std::fmt::Display; + +#[derive(Debug)] +/// Enum With every http status for complete documentation [here](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) +pub enum Status { + Continue, + SwitchingProtocols, + /// WebDAV + Processing, + /// Experimental + EarlyHints, + Ok, + Created, + Accepted, + NonAuthorativeIfnormation, + NoContent, + ResetContent, + PartialContent, + /// WebDAV + MultiStatus, + /// WebDAV + AlreadyReported, + HttpDataEncodingImUsed, + MultipleChoices, + MovedPermanently, + Found, + SeeOther, + NotModfiied, + /// Deprecated + UseProxy, + /// Deprecated + Unused, + TemporaryRedirect, + PermanentRedirect, + BadRequest, + Unauthorized, + /// Experimental + PaymentRequired, + Forbidden, + NotFound, + MethodNotAllowed, + NotAcceptable, + ProxyAuthenticationRequired, + RequestTimeout, + Conflict, + Gone, + LengthRequired, + PreconditionFailed, + PayloadTooLarge, + UriTooLong, + UnsupportedMediaType, + RangeNotSatisfiable, + ExpectationFailed, + ImATeapot, + MisdirectedRequest, + /// WebDAV + UnprocessableContent, + /// WebDAV + Locked, + /// WebDAV + FailedDependency, + /// Experimental + TooEarly, + UpgradeRequred, + PreconditionRequired, + TooManyRequests, + RequestHeaderFieldsTooLarge, + UnavailableForLegalReasons, + InternalServerError, + NotImplemented, + BadGetaway, + ServiceUnavailable, + GetawayTimeout, + HttpVersionNotSupported, + VariantAlsoNegotiates, + /// WebDAV + InsufficientStorage, + /// WebDAV + LoopDetected, + NotExtended, + NetworkAuthenticationRequired, +} + +impl Display for Status { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Status::Continue => write!(f, "100 Continue"), + Status::SwitchingProtocols => write!(f, "101 Switching Protocols"), + Status::Processing => write!(f, "102 Processing"), + Status::EarlyHints => write!(f, "103 Early Hints"), + Status::Ok => write!(f, "200 OK"), + Status::Created => write!(f, "201 Created"), + Status::Accepted => write!(f, "202 Accepted"), + Status::NonAuthorativeIfnormation => write!(f, "203 Non-Authorative Information"), + Status::NoContent => write!(f, "204 No Content"), + Status::ResetContent => write!(f, "205 Reset Content"), + Status::PartialContent => write!(f, "206 Partial Content"), + Status::MultiStatus => write!(f, "207 Mutli-Status"), + Status::AlreadyReported => write!(f, "208 Already Reported"), + Status::HttpDataEncodingImUsed => write!(f, "226 IM Used"), + Status::MultipleChoices => write!(f, "300 Multiple Choices"), + Status::MovedPermanently => write!(f, "301 Moved Permanently"), + Status::Found => write!(f, "302 Found"), + Status::SeeOther => write!(f, "303 See Other"), + Status::NotModfiied => write!(f, "304 Not Modified"), + Status::TemporaryRedirect => write!(f, "307 Temporary Redirect"), + Status::PermanentRedirect => write!(f, "308 Permanent Redirect"), + Status::UseProxy => write!(f, "305 Use Proxy"), + Status::Unused => write!(f, "306 unused"), + Status::BadRequest => write!(f, "400 Bad Request"), + Status::Unauthorized => write!(f, "401 Unauthorized"), + Status::PaymentRequired => write!(f, "402 Payment Required"), + Status::Forbidden => write!(f, "403 Forbidden"), + Status::NotFound => write!(f, "404 Not Found"), + Status::MethodNotAllowed => write!(f, "405 Method Not Allowed"), + Status::NotAcceptable => write!(f, "406 Not Acceptable"), + Status::ProxyAuthenticationRequired => { + write!(f, "407 Proxy Athentication Required") + } + Status::RequestTimeout => write!(f, "408 Request Timout"), + Status::Conflict => write!(f, "409 Conflict"), + Status::Gone => write!(f, "410 Gone"), + Status::LengthRequired => write!(f, "411 Length Required"), + Status::PreconditionFailed => write!(f, "412 Precondition Failed"), + Status::PayloadTooLarge => write!(f, "413 Payload Too Large"), + Status::UriTooLong => write!(f, "414 URI Too Long"), + Status::UnsupportedMediaType => write!(f, "415 Unsupported Media Type"), + Status::RangeNotSatisfiable => write!(f, "416 Range Not Satisfiable"), + Status::ExpectationFailed => write!(f, "417 Expectation Failed"), + Status::ImATeapot => write!(f, "418 I'm a Teapot"), + Status::MisdirectedRequest => write!(f, "421 Misdirected Request"), + Status::UnprocessableContent => write!(f, "422 Unprocessable Content"), + Status::Locked => write!(f, "423 Locked"), + Status::FailedDependency => write!(f, "424 Failed Dependency"), + Status::TooEarly => write!(f, "425 Too Early"), + Status::UpgradeRequred => write!(f, "426 Upgrade Required"), + Status::PreconditionRequired => write!(f, "428 Precondition Required"), + Status::TooManyRequests => write!(f, "429 Too Many Requests"), + Status::RequestHeaderFieldsTooLarge => { + write!(f, "431 Request Header Fields Too Large") + } + Status::UnavailableForLegalReasons => { + write!(f, "451 Unavailable For Legal Reasons") + } + Status::InternalServerError => write!(f, "500 Internal Server Error"), + Status::NotImplemented => write!(f, "501 Not Implmenented"), + Status::BadGetaway => write!(f, "502 Bad Getaway"), + Status::ServiceUnavailable => write!(f, "503 Service Unavailable"), + Status::GetawayTimeout => write!(f, "504 Getaway Timeout"), + Status::HttpVersionNotSupported => write!(f, "505 HTTP Version Not Supported"), + Status::VariantAlsoNegotiates => write!(f, "506 Variant Also Negotiates"), + Status::InsufficientStorage => write!(f, "507 Insufficient Storage"), + Status::LoopDetected => write!(f, "508 Loop Detected"), + Status::NotExtended => write!(f, "510 Not Extendend"), + Status::NetworkAuthenticationRequired => { + write!(f, "511 Network Authentication Required") + } + } + } +} diff --git a/core/http/src/handling/response/traits.rs b/core/http/src/handling/response/traits.rs new file mode 100644 index 0000000000000000000000000000000000000000..d3179a285f973d5ed80871c25478f852fbd78046 --- /dev/null +++ b/core/http/src/handling/response/traits.rs @@ -0,0 +1,73 @@ +use std::fmt::Debug; + +use crate::{handling::routes::Body, utils::mime::Mime}; + +/// Trait for using datatypes as response bodies +pub trait ResponseBody: Send + Debug { + /// Get a cloned version of the data as a [`Vec<u8>`] + /// # Ecamples + /// ``` + /// use http::handling::response::ResponseBody; + /// let data = "DATA"; + /// assert_eq!(b"DATA".to_vec(), data.get_data()); + /// ``` + fn get_data(&self) -> Vec<u8>; + /// get the miem type of the data as a [Mime] + /// # Examples + /// ``` + /// use http::handling::response::ResponseBody; + /// use http::utils::mime::Mime; + /// let data = "DATA"; + /// assert_eq!(Mime::TextPlain, data.get_mime()); + /// ``` + fn get_mime(&self) -> Mime; + /// get the length in bytes of the data as a [usize] + /// # Examples + /// ``` + /// use http::handling::response::ResponseBody; + /// let data = "DATA"; + /// assert_eq!(4, data.get_len()); + /// ``` + fn get_len(&self) -> usize; +} + +impl ResponseBody for Body { + fn get_data(&self) -> Vec<u8> { + self.body() + } + fn get_mime(&self) -> Mime { + self.mime_type() + } + + fn get_len(&self) -> usize { + self.get_data().len() + } +} + +impl ResponseBody for &str { + fn get_data(&self) -> Vec<u8> { + self.as_bytes().to_vec() + } + + fn get_mime(&self) -> Mime { + Mime::TextPlain + } + + fn get_len(&self) -> usize { + self.len() + } +} + +impl ResponseBody for String { + fn get_data(&self) -> Vec<u8> { + self.as_bytes().to_vec() + } + + fn get_mime(&self) -> Mime { + Mime::TextPlain + } + + fn get_len(&self) -> usize { + self.len() + } +} diff --git a/core/http/src/handling/routes.rs b/core/http/src/handling/routes.rs new file mode 100644 index 0000000000000000000000000000000000000000..02a81a3ac8bfab8712c48018e8589abbcef9b8e6 --- /dev/null +++ b/core/http/src/handling/routes.rs @@ -0,0 +1,160 @@ +use crate::{ + handling::{ + methods::Method, + request::{MediaType, Request}, + response::{Outcome, Response, Status}, + }, + utils::mime::Mime, +}; + +/// A RouteBuilder struct +pub struct RoutBuilder { + /// An optional name of the route + name: Option<&'static str>, + /// The [Method] via which the route is accesable + method: Method, + /// The path of the route, allows special cases: + /// # Examples + /// ``` + /// "/home"; // Only /home + /// "/<home>/something"; + /// // Variable content the users provides this acts for /<anything>/something + /// "/<home..>"; + /// // All Information after this sequence is irrelvent + /// // Matches: /a, /a/b/c ... + /// ``` + path: &'static str, + /// The Handler function for this route, which gets called when the request need the route. + /// Inputs to the function are an [Request] and the [Data] which represents the body of the + /// [Request]. The Outcome is expected to be an [Outcome], which is a [Response], A [Status] if + /// something went wrong and a [Status] page is need or a [Outcome::Forward] of the requests + /// [Data] for the next [Route] to take care of. + handler: fn(Request, Data) -> Outcome<Response, Status, Data>, + /// The Specific answer format of the [Route] as a [MediaType]. Optional + format: Option<MediaType>, + /// The Optional Rank of the Route, dependent on its specificness. so the rank of a uri `"/home"` would be + /// ranked high, whereas a uri of `"/<anything..>"` would be ranked the lowest + /// If not given generated based on parematers. + rank: Option<isize>, +} + +/// A struct to define Routes on the Server +#[derive(Clone, Copy)] +pub struct Route<'a> { + /// An optional name of the route + pub name: Option<&'static str>, + /// The [Method] via which the route is accesable + pub method: Method, + /// The Uri of the route, allows special cases: + /// # Examples + /// ``` + /// "/home"; // Only /home + /// "/<home>/something"; + /// // Variable content the users provides this acts for /<anything>/something + /// "/<home..>"; + /// // All Information after this sequence is irrelvent + /// // Matches: /a, /a/b/c ... + /// ``` + pub uri: Uri<'a>, + /// The Handler function for this route, which gets called when the request need the route. + /// Inputs to the function are an [Request] and the [Data] which represents the body of the + /// [Request]. The Outcome is expected to be an [Outcome], which is a [Response], A [Status] if + /// something went wrong and a [Status] page is need or a [Outcome::Forward] of the requests + /// [Data] for the next [Route] to take care of. + pub handler: fn(Request, Data) -> Outcome<Response, Status, Data>, + /// The Rank of the Route, dependent on its specificness. so the rank of a uri `"/home"` would be + /// ranked high, whereas a uri of `"/<anything..>"` would be ranked the lowest + pub rank: isize, + /// The Specific answer format of the [Route] as a [MediaType]. Optional + pub format: Option<MediaType>, +} + +impl Route<'_> { + /// generates a Route from a Routebuilder + //TODO: ranking + pub fn from(routeinfo: RoutBuilder) -> Self { + let rank = routeinfo.rank.unwrap_or(0); + Route { + name: routeinfo.name, + method: routeinfo.method, + uri: routeinfo.path, + handler: routeinfo.handler, + rank, + format: routeinfo.format, + } + } + /// Matches a [Request] Uri with a [Route] Uri. Respecting special cases like `?` and `<a..>` + pub fn compare_uri(&self, uri: Uri) -> bool { + let mut iter_comp_str = uri.split('/'); + for true_str in self.uri.split('/') { + let comp_str = if let Some(str) = iter_comp_str.next() { + str + } else { + return false; + }; + if (true_str.starts_with('<') && true_str.ends_with("..>")) + || (comp_str.starts_with(true_str) && comp_str.contains('?')) + { + return true; + } + if true_str.starts_with('<') && true_str.ends_with('>') { + continue; + } + if true_str != comp_str { + return false; + } + } + true + } +} + +/// Alias for using a &'a str for Uri +pub type Uri<'a> = &'a str; + +#[derive(Debug, Clone)] +/// A basic Body type for respones +pub struct Body { + /// The Response body + body: Vec<u8>, + /// The Mime Type + mime_type: Mime, +} + +impl Body { + /// New body of a Response + pub fn new(body: Vec<u8>, mime_type: Mime) -> Self { + Self { body, mime_type } + } + /// Sets the `mime_type` of the Body + pub fn set_mime_type(&mut self, mime_type: Mime) { + self.mime_type = mime_type; + } + /// Reassigns the body + pub fn set_body(&mut self, body: Vec<u8>) { + self.body = body; + } + /// mime_type of the body + pub fn mime_type(&self) -> Mime { + self.mime_type + } + /// cloned body as [`Vec<u8>`] + pub fn body(&self) -> Vec<u8> { + self.body.clone() + } +} + +#[derive(Debug, Clone)] +/// Data of the Body of a [Request] +pub struct Data { + /// The Data + pub buffer: Vec<u8>, + /// For Split Data if it is complete + pub is_complete: bool, +} + +impl Data { + /// Checks if the buffer.oen() is -0 + pub fn is_empty(&self) -> bool { + self.buffer.len() == 0 + } +} diff --git a/core/http/src/lib.rs b/core/http/src/lib.rs index 7d12d9af8195bf5e19d10c7b592b359ccd014149..1d6353a848ca924e164ae17aa09e4861f6d30cdc 100644 --- a/core/http/src/lib.rs +++ b/core/http/src/lib.rs @@ -1,14 +1,10 @@ -pub fn add(left: usize, right: usize) -> usize { - left + right -} +pub mod handlers; +pub mod handling; +mod setup; + +pub mod utils; #[cfg(test)] -mod tests { - use super::*; +mod tests {} - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); - } -} +pub use setup::build; diff --git a/core/http/src/setup.rs b/core/http/src/setup.rs new file mode 100644 index 0000000000000000000000000000000000000000..9802f0edd3498c8a6ac71a53b5ba66ac29642afc --- /dev/null +++ b/core/http/src/setup.rs @@ -0,0 +1,238 @@ +use std::thread::available_parallelism; + +use tokio::{ + net::TcpListener, + select, + signal::unix::{signal, SignalKind, Signal}, +}; + +#[cfg(feature = "secure")] +use tokio_native_tls::{native_tls::{Identity, self}, TlsAcceptor}; + +use crate::{ + handlers::handler::handle_connection, + handling::routes::{Route, Uri}, +}; +#[cfg(feature = "secure")] +use crate::handling::response::{Response, Status}; + + +#[derive(Clone)] +/// Represnts a [MountPoint] that can be mounted in the config +pub struct MountPoint<'a> { + /// The prefix of the [MountPoint] + pub mountpoint: Uri<'a>, + /// All Routes mounted on the [MountPoint]. The Routes are all prefixed by the mountpoints + /// mountpoint + pub routes: Vec<Route<'a>>, +} + +/// A server configuration that is run +pub struct Config { + /// Contains an Optional [`Vec<MountPoint>`]. which contains all [MountPoint]s on the Server. + /// Which contain all the [Route]s + mountpoints: Option<Vec<MountPoint<'static>>>, + /// Contains a [tokio::net::TcpListener] that is bound for the server + address: TcpListener, + #[cfg(feature = "secure")] + to_secure_redirect: TcpListener, + #[cfg(feature = "secure")] + tls_acceptor: TlsAcceptor, +} + +impl<'a> Config { + /// Utility that checks if the given mointpoint is already taken. takes in the uri of the to be + /// mounted mountpoint + fn check_mountpoint_taken(&self, to_insert: Uri) -> bool { + if let Some(to_check) = &self.mountpoints { + for i in to_check.iter() { + if i.mountpoint == to_insert { + return true; // Found a duplicate &str + } + } + }; + false + } + /// mounts a [MountPoint] on the [Config] takes in a blank [MountPoint] and the [Route]s to be + /// mounted, mounts them and inserts the new [MountPoint]. Also sorts by rank. + pub fn mount(mut self, mountpoint: Uri<'static>, mut routes: Vec<Route<'static>>) -> Self { + if self.check_mountpoint_taken(mountpoint) { + eprintln!("\x1b[31mTrying to reassign a mountpoint, mountpoint `{mountpoint}` already taken.\x1b[0m"); + return self; + } + routes.sort_by(|a, b| a.rank.cmp(&b.rank)); + let mut mount_message = format!(" >> \x1b[35m{}\x1b[0m\n", mountpoint); + for (index, route) in routes.iter().enumerate() { + let indent_sign = match index { + i if i == routes.len() - 1 => "└─", + _ => "├─", + }; + + mount_message += &format!( + " \x1b[35m{indent_sign}\x1b[0m \x1b[36m(\x1b[0m{}\x1b[36m)\x1b[0m \x1b[32m{}\x1b[0m \x1b[34;4m{}\x1b[24m{}\x1b[0m\n", + route.name.unwrap_or(""), + route.method, + mountpoint, + route.uri + ) + } + + println!("{mount_message}"); + let mut temp_mountpoints = None; + std::mem::swap(&mut self.mountpoints, &mut temp_mountpoints); + + if let Some(mut mountpoints) = temp_mountpoints { + mountpoints.push(MountPoint { mountpoint, routes }); + self.mountpoints = Some(mountpoints); + } else { + self.mountpoints = Some(vec![MountPoint { mountpoint, routes }]); + } + self + } + /// # Launches/Starts the webserver + /// Launches a Webserver Configuration + /// + /// Is Async + /// + /// Is Blocking -> Can be interrupted with ^C + /// + /// # Panics + /// Panics if there are no Mountpoints in the Confiuration to lauch, as well as when the there + /// is no interrupt signal + pub async fn launch(self) { + { + #[cfg(feature = "secure")] { + println!( + "Server launched from https://{} and http://{}", + self.address.local_addr().unwrap(), self.to_secure_redirect.local_addr().unwrap() + ); + } + #[cfg(not(feature = "secure"))] { + println!("Server launched from http://{}", self.address.local_addr().unwrap()) + } + } + let mut sigint = signal(SignalKind::interrupt()).unwrap(); + let location_string = format!("Location: https://{}", self.address.local_addr().unwrap()); + loop { + if !self.selector(&mut sigint, &location_string).await { + break; + } + } + } + #[cfg(feature = "secure")] + async fn selector(&self, sigint: &mut Signal, location_string: &str) -> bool{ + select! { + _ = sigint.recv() => { + println!("Shutting down..."); + return false; + } + Ok((socket, _)) = self.address.accept() => { + let mountpoints = self.mountpoints.clone().unwrap(); + let Ok(socket) = self.tls_acceptor.accept(socket).await else { + eprintln!("\x1b[31mClient used http, not https\x1b[0m"); + return true; + }; + tokio::spawn(async move { handle_connection(socket, mountpoints).await; }); + } + Ok((socket, _)) = self.to_secure_redirect.accept() => { + let redirect_response = Response { + headers: vec![location_string.to_string()], + cookies: None, + status: Some(Status::MovedPermanently), + body: Box::new(""), + }; + tokio::spawn(async move { let _ = redirect_response.write(socket, None).await; }); + } + } + true + } + #[cfg(not(feature = "secure"))] + async fn selector(&self, sigint: &mut Signal, _location_string: &str) -> bool { + select! { + _ = sigint.recv() => { + println!("Shutting down..."); + return false; + } + Ok((socket, _)) = self.address.accept() => { + let mountpoints = self.mountpoints.clone().unwrap(); + tokio::spawn(async move { handle_connection(socket, mountpoints).await; }); + } + } + true + } + +} + +/// # Creates a Webserver Config which can be launched with the launch function +/// Takes the IP and Port as an argument +/// +/// Prints out the configuration test +/// +/// Is async +/// +/// # Example +/// ``` +/// async fn example() { +/// let _ = http::build("127.0.0.1:8080", "127.0.0.1:8443"); +/// } +/// ``` +/// # Panics +/// Panics if the IP is not bindable, or other forms of system errors or it's not a valid +/// IP-Address +#[cfg(feature = "secure")] +pub async fn build(ip: &str, ip_http: &str) -> Config { + let Ok(listener) = TcpListener::bind(ip).await else { + panic!("\x1b[31mCould't bind Listener to address\x1b[0m"); + }; + let ip_vec = ip.splitn(2, ':').collect::<Vec<&str>>(); + if ip_vec.len() != 2 { + panic!("Invalid IP Address"); + } + let Ok(listener_http) = TcpListener::bind(ip_http).await else { + panic!("\x1b[31mCould't bind Listener to address\x1b[0m"); + }; + let identity = Identity::from_pkcs12(include_bytes!("certificates/identity.pfx"), "1234").unwrap(); + + let port = ip_vec[1]; + let ip = ip_vec[0]; + let workers = available_parallelism().unwrap().get(); + println!( +"\x1b[34mâš™ Configuration\x1b[0m + >> \x1b[34mIp\x1b[0m: {ip} + >> \x1b[34mPort\x1b[0m: {port} + >> \x1b[34mWorkers\x1b[0m: {workers} +\x1b[32m Security\x1b[0m + >> \x1b[32mHttp to Https Redirect: http://{ip_http} -> https://{ip}:{port}\x1b[0m +\x1b[35m🛪 Mountpoints\x1b[0m" + ); + Config { + mountpoints: None, + address: listener, + to_secure_redirect: listener_http, + tls_acceptor: native_tls::TlsAcceptor::builder(identity).build().unwrap().into() + } +} +#[cfg(not(feature = "secure"))] +pub async fn build(ip: &str) -> Config { + let Ok(listener) = TcpListener::bind(ip).await else { + panic!("\x1b[31mCould't bind Listener to address\x1b[0m"); + }; + let ip_vec = ip.splitn(2, ':').collect::<Vec<&str>>(); + if ip_vec.len() != 2 { + panic!("Invalid IP Address"); + } + let port = ip_vec[1]; + let ip = ip_vec[0]; + let workers = available_parallelism().unwrap().get(); + println!( +"\x1b[34mâš™ Configuration\x1b[0m + >> \x1b[34mIp\x1b[0m: {ip} + >> \x1b[34mPort\x1b[0m: {port} + >> \x1b[34mWorkers\x1b[0m: {workers} +\x1b[35m🛪 Mountpoints\x1b[0m" + ); + Config { + mountpoints: None, + address: listener, + } +} diff --git a/core/http/src/utils/mime/map.rs b/core/http/src/utils/mime/map.rs new file mode 100644 index 0000000000000000000000000000000000000000..7cb4db211a5df5f5c02bb13c1118e79397996b04 --- /dev/null +++ b/core/http/src/utils/mime/map.rs @@ -0,0 +1,2023 @@ +use super::mime_enum::Mime; + +/// Map with the string version of the Mime types and the values being corresponding [Mime]s +pub static MIME_MAP: phf::Map<&'static str, Mime> = phf::phf_map! { + "application/1d-interleaved-parityfec" => Mime::Application1dInterleavedParityfec, + "application/3gpdash-qoe-report+xml" => Mime::Application3gpdashQoeReportXml, + "application/3gppHal+json" => Mime::Application3gpphalJson, + "application/3gppHalForms+json" => Mime::Application3gpphalformsJson, + "application/3gpp-ims+xml" => Mime::Application3gppImsXml, + "application/A2L" => Mime::ApplicationA2l, + "application/ace+cbor" => Mime::ApplicationAceCbor, + "application/ace+json" => Mime::ApplicationAceJson, + "application/activemessage" => Mime::ApplicationActivemessage, + "application/activity+json" => Mime::ApplicationActivityJson, + "application/aif+cbor" => Mime::ApplicationAifCbor, + "application/aif+json" => Mime::ApplicationAifJson, + "application/alto-cdni+json" => Mime::ApplicationAltoCdniJson, + "application/alto-cdnifilter+json" => Mime::ApplicationAltoCdnifilterJson, + "application/alto-costmap+json" => Mime::ApplicationAltoCostmapJson, + "application/alto-costmapfilter+json" => Mime::ApplicationAltoCostmapfilterJson, + "application/alto-directory+json" => Mime::ApplicationAltoDirectoryJson, + "application/alto-endpointprop+json" => Mime::ApplicationAltoEndpointpropJson, + "application/alto-endpointpropparams+json" => Mime::ApplicationAltoEndpointpropparamsJson, + "application/alto-endpointcost+json" => Mime::ApplicationAltoEndpointcostJson, + "application/alto-endpointcostparams+json" => Mime::ApplicationAltoEndpointcostparamsJson, + "application/alto-error+json" => Mime::ApplicationAltoErrorJson, + "application/alto-networkmapfilter+json" => Mime::ApplicationAltoNetworkmapfilterJson, + "application/alto-networkmap+json" => Mime::ApplicationAltoNetworkmapJson, + "application/alto-propmap+json" => Mime::ApplicationAltoPropmapJson, + "application/alto-propmapparams+json" => Mime::ApplicationAltoPropmapparamsJson, + "application/alto-updatestreamcontrol+json" => Mime::ApplicationAltoUpdatestreamcontrolJson, + "application/alto-updatestreamparams+json" => Mime::ApplicationAltoUpdatestreamparamsJson, + "application/AML" => Mime::ApplicationAml, + "application/andrew-inset" => Mime::ApplicationAndrewInset, + "application/applefile" => Mime::ApplicationApplefile, + "application/at+jwt" => Mime::ApplicationAtJwt, + "application/ATF" => Mime::ApplicationAtf, + "application/ATFX" => Mime::ApplicationAtfx, + "application/atom+xml" => Mime::ApplicationAtomXml, + "application/atomcat+xml" => Mime::ApplicationAtomcatXml, + "application/atomdeleted+xml" => Mime::ApplicationAtomdeletedXml, + "application/atomicmail" => Mime::ApplicationAtomicmail, + "application/atomsvc+xml" => Mime::ApplicationAtomsvcXml, + "application/atsc-dwd+xml" => Mime::ApplicationAtscDwdXml, + "application/atsc-dynamic-event-message" => Mime::ApplicationAtscDynamicEventMessage, + "application/atsc-held+xml" => Mime::ApplicationAtscHeldXml, + "application/atsc-rdt+json" => Mime::ApplicationAtscRdtJson, + "application/atsc-rsat+xml" => Mime::ApplicationAtscRsatXml, + "application/ATXML" => Mime::ApplicationAtxml, + "application/auth-policy+xml" => Mime::ApplicationAuthPolicyXml, + "application/automationml-aml+xml" => Mime::ApplicationAutomationmlAmlXml, + "application/automationml-amlx+zip" => Mime::ApplicationAutomationmlAmlxZip, + "application/bacnet-xdd+zip" => Mime::ApplicationBacnetXddZip, + "application/batch-SMTP" => Mime::ApplicationBatchSmtp, + "application/beep+xml" => Mime::ApplicationBeepXml, + "application/calendar+json" => Mime::ApplicationCalendarJson, + "application/calendar+xml" => Mime::ApplicationCalendarXml, + "application/call-completion" => Mime::ApplicationCallCompletion, + "application/CALS-1840" => Mime::ApplicationCals1840, + "application/captive+json" => Mime::ApplicationCaptiveJson, + "application/cbor" => Mime::ApplicationCbor, + "application/cbor-seq" => Mime::ApplicationCborSeq, + "application/cccex" => Mime::ApplicationCccex, + "application/ccmp+xml" => Mime::ApplicationCcmpXml, + "application/ccxml+xml" => Mime::ApplicationCcxmlXml, + "application/cda+xml" => Mime::ApplicationCdaXml, + "application/CDFX+XML" => Mime::ApplicationCdfxXml, + "application/cdmi-capability" => Mime::ApplicationCdmiCapability, + "application/cdmi-container" => Mime::ApplicationCdmiContainer, + "application/cdmi-domain" => Mime::ApplicationCdmiDomain, + "application/cdmi-object" => Mime::ApplicationCdmiObject, + "application/cdmi-queue" => Mime::ApplicationCdmiQueue, + "application/cdni" => Mime::ApplicationCdni, + "application/CEA" => Mime::ApplicationCea, + "application/cea-2018+xml" => Mime::ApplicationCea2018Xml, + "application/cellml+xml" => Mime::ApplicationCellmlXml, + "application/cfw" => Mime::ApplicationCfw, + "application/city+json" => Mime::ApplicationCityJson, + "application/clr" => Mime::ApplicationClr, + "application/clue_info+xml" => Mime::ApplicationClueInfoXml, + "application/clue+xml" => Mime::ApplicationClueXml, + "application/cms" => Mime::ApplicationCms, + "application/cnrp+xml" => Mime::ApplicationCnrpXml, + "application/coap-group+json" => Mime::ApplicationCoapGroupJson, + "application/coap-payload" => Mime::ApplicationCoapPayload, + "application/commonground" => Mime::ApplicationCommonground, + "application/concise-problem-details+cbor" => Mime::ApplicationConciseProblemDetailsCbor, + "application/conference-info+xml" => Mime::ApplicationConferenceInfoXml, + "application/cpl+xml" => Mime::ApplicationCplXml, + "application/cose" => Mime::ApplicationCose, + "application/cose-key" => Mime::ApplicationCoseKey, + "application/cose-key-set" => Mime::ApplicationCoseKeySet, + "application/cose-x509" => Mime::ApplicationCoseX509, + "application/csrattrs" => Mime::ApplicationCsrattrs, + "application/csta+xml" => Mime::ApplicationCstaXml, + "application/CSTAdata+xml" => Mime::ApplicationCstadataXml, + "application/csvm+json" => Mime::ApplicationCsvmJson, + "application/cwl" => Mime::ApplicationCwl, + "application/cwl+json" => Mime::ApplicationCwlJson, + "application/cwt" => Mime::ApplicationCwt, + "application/cybercash" => Mime::ApplicationCybercash, + "application/dash+xml" => Mime::ApplicationDashXml, + "application/dash-patch+xml" => Mime::ApplicationDashPatchXml, + "application/dashdelta" => Mime::ApplicationDashdelta, + "application/davmount+xml" => Mime::ApplicationDavmountXml, + "application/dca-rft" => Mime::ApplicationDcaRft, + "application/DCD" => Mime::ApplicationDcd, + "application/dec-dx" => Mime::ApplicationDecDx, + "application/dialog-info+xml" => Mime::ApplicationDialogInfoXml, + "application/dicom" => Mime::ApplicationDicom, + "application/dicom+json" => Mime::ApplicationDicomJson, + "application/dicom+xml" => Mime::ApplicationDicomXml, + "application/DII" => Mime::ApplicationDii, + "application/DIT" => Mime::ApplicationDit, + "application/dns" => Mime::ApplicationDns, + "application/dns+json" => Mime::ApplicationDnsJson, + "application/dns-message" => Mime::ApplicationDnsMessage, + "application/dots+cbor" => Mime::ApplicationDotsCbor, + "application/dpop+jwt" => Mime::ApplicationDpopJwt, + "application/dskpp+xml" => Mime::ApplicationDskppXml, + "application/dssc+der" => Mime::ApplicationDsscDer, + "application/dssc+xml" => Mime::ApplicationDsscXml, + "application/dvcs" => Mime::ApplicationDvcs, + "application/EDI-consent" => Mime::ApplicationEdiConsent, + "application/EDIFACT" => Mime::ApplicationEdifact, + "application/EDI-X12" => Mime::ApplicationEdiX12, + "application/efi" => Mime::ApplicationEfi, + "application/elm+json" => Mime::ApplicationElmJson, + "application/elm+xml" => Mime::ApplicationElmXml, + "application/EmergencyCallData.cap+xml" => Mime::ApplicationEmergencycalldataCapXml, + "application/EmergencyCallData.Comment+xml" => Mime::ApplicationEmergencycalldataCommentXml, + "application/EmergencyCallData.Control+xml" => Mime::ApplicationEmergencycalldataControlXml, + "application/EmergencyCallData.DeviceInfo+xml" => Mime::ApplicationEmergencycalldataDeviceinfoXml, + "application/EmergencyCallData.eCall.MSD" => Mime::ApplicationEmergencycalldataEcallMsd, + "application/EmergencyCallData.LegacyESN+json" => Mime::ApplicationEmergencycalldataLegacyesnJson, + "application/EmergencyCallData.ProviderInfo+xml" => Mime::ApplicationEmergencycalldataProviderinfoXml, + "application/EmergencyCallData.ServiceInfo+xml" => Mime::ApplicationEmergencycalldataServiceinfoXml, + "application/EmergencyCallData.SubscriberInfo+xml" => Mime::ApplicationEmergencycalldataSubscriberinfoXml, + "application/EmergencyCallData.VEDS+xml" => Mime::ApplicationEmergencycalldataVedsXml, + "application/emma+xml" => Mime::ApplicationEmmaXml, + "application/emotionml+xml" => Mime::ApplicationEmotionmlXml, + "application/encaprtp" => Mime::ApplicationEncaprtp, + "application/epp+xml" => Mime::ApplicationEppXml, + "application/epub+zip" => Mime::ApplicationEpubZip, + "application/eshop" => Mime::ApplicationEshop, + "application/example" => Mime::ApplicationExample, + "application/exi" => Mime::ApplicationExi, + "application/expect-ct-report+json" => Mime::ApplicationExpectCtReportJson, + "application/express" => Mime::ApplicationExpress, + "application/fastinfoset" => Mime::ApplicationFastinfoset, + "application/fastsoap" => Mime::ApplicationFastsoap, + "application/fdf" => Mime::ApplicationFdf, + "application/fdt+xml" => Mime::ApplicationFdtXml, + "application/fhir+json" => Mime::ApplicationFhirJson, + "application/fhir+xml" => Mime::ApplicationFhirXml, + "application/fits" => Mime::ApplicationFits, + "application/flexfec" => Mime::ApplicationFlexfec, + "application/font-tdpfr" => Mime::ApplicationFontTdpfr, + "application/framework-attributes+xml" => Mime::ApplicationFrameworkAttributesXml, + "application/geo+json" => Mime::ApplicationGeoJson, + "application/geo+json-seq" => Mime::ApplicationGeoJsonSeq, + "application/geopackage+sqlite3" => Mime::ApplicationGeopackageSqlite3, + "application/geoxacml+xml" => Mime::ApplicationGeoxacmlXml, + "application/gltf-buffer" => Mime::ApplicationGltfBuffer, + "application/gml+xml" => Mime::ApplicationGmlXml, + "application/gzip" => Mime::ApplicationGzip, + "application/H224" => Mime::ApplicationH224, + "application/held+xml" => Mime::ApplicationHeldXml, + "application/hl7v2+xml" => Mime::ApplicationHl7v2Xml, + "application/http" => Mime::ApplicationHttp, + "application/hyperstudio" => Mime::ApplicationHyperstudio, + "application/ibe-key-request+xml" => Mime::ApplicationIbeKeyRequestXml, + "application/ibe-pkg-reply+xml" => Mime::ApplicationIbePkgReplyXml, + "application/ibe-pp-data" => Mime::ApplicationIbePpData, + "application/iges" => Mime::ApplicationIges, + "application/im-iscomposing+xml" => Mime::ApplicationImIscomposingXml, + "application/index" => Mime::ApplicationIndex, + "application/index.cmd" => Mime::ApplicationIndexCmd, + "application/index.obj" => Mime::ApplicationIndexObj, + "application/index.response" => Mime::ApplicationIndexResponse, + "application/index.vnd" => Mime::ApplicationIndexVnd, + "application/inkml+xml" => Mime::ApplicationInkmlXml, + "application/IOTP" => Mime::ApplicationIotp, + "application/ipfix" => Mime::ApplicationIpfix, + "application/ipp" => Mime::ApplicationIpp, + "application/ISUP" => Mime::ApplicationIsup, + "application/its+xml" => Mime::ApplicationItsXml, + "application/java-archive" => Mime::ApplicationJavaArchive, + "application/jf2feed+json" => Mime::ApplicationJf2feedJson, + "application/jose" => Mime::ApplicationJose, + "application/jose+json" => Mime::ApplicationJoseJson, + "application/jrd+json" => Mime::ApplicationJrdJson, + "application/jscalendar+json" => Mime::ApplicationJscalendarJson, + "application/json" => Mime::ApplicationJson, + "application/json-patch+json" => Mime::ApplicationJsonPatchJson, + "application/json-seq" => Mime::ApplicationJsonSeq, + "application/jwk+json" => Mime::ApplicationJwkJson, + "application/jwk-set+json" => Mime::ApplicationJwkSetJson, + "application/jwt" => Mime::ApplicationJwt, + "application/kpml-request+xml" => Mime::ApplicationKpmlRequestXml, + "application/kpml-response+xml" => Mime::ApplicationKpmlResponseXml, + "application/ld+json" => Mime::ApplicationLdJson, + "application/lgr+xml" => Mime::ApplicationLgrXml, + "application/link-format" => Mime::ApplicationLinkFormat, + "application/linkset" => Mime::ApplicationLinkset, + "application/linkset+json" => Mime::ApplicationLinksetJson, + "application/load-control+xml" => Mime::ApplicationLoadControlXml, + "application/logout+jwt" => Mime::ApplicationLogoutJwt, + "application/lost+xml" => Mime::ApplicationLostXml, + "application/lostsync+xml" => Mime::ApplicationLostsyncXml, + "application/lpf+zip" => Mime::ApplicationLpfZip, + "application/LXF" => Mime::ApplicationLxf, + "application/mac-binhex40" => Mime::ApplicationMacBinhex40, + "application/macwriteii" => Mime::ApplicationMacwriteii, + "application/mads+xml" => Mime::ApplicationMadsXml, + "application/manifest+json" => Mime::ApplicationManifestJson, + "application/marc" => Mime::ApplicationMarc, + "application/marcxml+xml" => Mime::ApplicationMarcxmlXml, + "application/mathematica" => Mime::ApplicationMathematica, + "application/mathml+xml" => Mime::ApplicationMathmlXml, + "application/mathml-content+xml" => Mime::ApplicationMathmlContentXml, + "application/mathml-presentation+xml" => Mime::ApplicationMathmlPresentationXml, + "application/mbms-associated-procedure-description+xml" => Mime::ApplicationMbmsAssociatedProcedureDescriptionXml, + "application/mbms-deregister+xml" => Mime::ApplicationMbmsDeregisterXml, + "application/mbms-envelope+xml" => Mime::ApplicationMbmsEnvelopeXml, + "application/mbms-msk-response+xml" => Mime::ApplicationMbmsMskResponseXml, + "application/mbms-msk+xml" => Mime::ApplicationMbmsMskXml, + "application/mbms-protection-description+xml" => Mime::ApplicationMbmsProtectionDescriptionXml, + "application/mbms-reception-report+xml" => Mime::ApplicationMbmsReceptionReportXml, + "application/mbms-register-response+xml" => Mime::ApplicationMbmsRegisterResponseXml, + "application/mbms-register+xml" => Mime::ApplicationMbmsRegisterXml, + "application/mbms-schedule+xml" => Mime::ApplicationMbmsScheduleXml, + "application/mbms-user-service-description+xml" => Mime::ApplicationMbmsUserServiceDescriptionXml, + "application/mbox" => Mime::ApplicationMbox, + "application/media_control+xml" => Mime::ApplicationMediaControlXml, + "application/media-policy-dataset+xml" => Mime::ApplicationMediaPolicyDatasetXml, + "application/mediaservercontrol+xml" => Mime::ApplicationMediaservercontrolXml, + "application/merge-patch+json" => Mime::ApplicationMergePatchJson, + "application/metalink4+xml" => Mime::ApplicationMetalink4Xml, + "application/mets+xml" => Mime::ApplicationMetsXml, + "application/MF4" => Mime::ApplicationMf4, + "application/mikey" => Mime::ApplicationMikey, + "application/mipc" => Mime::ApplicationMipc, + "application/missing-blocks+cbor-seq" => Mime::ApplicationMissingBlocksCborSeq, + "application/mmt-aei+xml" => Mime::ApplicationMmtAeiXml, + "application/mmt-usd+xml" => Mime::ApplicationMmtUsdXml, + "application/mods+xml" => Mime::ApplicationModsXml, + "application/moss-keys" => Mime::ApplicationMossKeys, + "application/moss-signature" => Mime::ApplicationMossSignature, + "application/mosskey-data" => Mime::ApplicationMosskeyData, + "application/mosskey-request" => Mime::ApplicationMosskeyRequest, + "application/mp21" => Mime::ApplicationMp21, + "application/mp4" => Mime::ApplicationMp4, + "application/mpeg4-generic" => Mime::ApplicationMpeg4Generic, + "application/mpeg4-iod" => Mime::ApplicationMpeg4Iod, + "application/mpeg4-iod-xmt" => Mime::ApplicationMpeg4IodXmt, + "application/mrb-consumer+xml" => Mime::ApplicationMrbConsumerXml, + "application/mrb-publish+xml" => Mime::ApplicationMrbPublishXml, + "application/msc-ivr+xml" => Mime::ApplicationMscIvrXml, + "application/msc-mixer+xml" => Mime::ApplicationMscMixerXml, + "application/msword" => Mime::ApplicationMsword, + "application/mud+json" => Mime::ApplicationMudJson, + "application/multipart-core" => Mime::ApplicationMultipartCore, + "application/mxf" => Mime::ApplicationMxf, + "application/n-quads" => Mime::ApplicationNQuads, + "application/n-triples" => Mime::ApplicationNTriples, + "application/nasdata" => Mime::ApplicationNasdata, + "application/news-checkgroups" => Mime::ApplicationNewsCheckgroups, + "application/news-groupinfo" => Mime::ApplicationNewsGroupinfo, + "application/news-transmission" => Mime::ApplicationNewsTransmission, + "application/nlsml+xml" => Mime::ApplicationNlsmlXml, + "application/node" => Mime::ApplicationNode, + "application/nss" => Mime::ApplicationNss, + "application/oauth-authz-req+jwt" => Mime::ApplicationOauthAuthzReqJwt, + "application/oblivious-dns-message" => Mime::ApplicationObliviousDnsMessage, + "application/ocsp-request" => Mime::ApplicationOcspRequest, + "application/ocsp-response" => Mime::ApplicationOcspResponse, + "application/octet-stream" => Mime::ApplicationOctetStream, + "application/ODA" => Mime::ApplicationOda, + "application/odm+xml" => Mime::ApplicationOdmXml, + "application/ODX" => Mime::ApplicationOdx, + "application/oebps-package+xml" => Mime::ApplicationOebpsPackageXml, + "application/ogg" => Mime::ApplicationOgg, + "application/ohttp-keys" => Mime::ApplicationOhttpKeys, + "application/opc-nodeset+xml" => Mime::ApplicationOpcNodesetXml, + "application/oscore" => Mime::ApplicationOscore, + "application/oxps" => Mime::ApplicationOxps, + "application/p21" => Mime::ApplicationP21, + "application/p21+zip" => Mime::ApplicationP21Zip, + "application/p2p-overlay+xml" => Mime::ApplicationP2pOverlayXml, + "application/parityfec" => Mime::ApplicationParityfec, + "application/passport" => Mime::ApplicationPassport, + "application/patch-ops-error+xml" => Mime::ApplicationPatchOpsErrorXml, + "application/pdf" => Mime::ApplicationPdf, + "application/PDX" => Mime::ApplicationPdx, + "application/pem-certificate-chain" => Mime::ApplicationPemCertificateChain, + "application/pgp-encrypted" => Mime::ApplicationPgpEncrypted, + "application/pgp-keys" => Mime::ApplicationPgpKeys, + "application/pgp-signature" => Mime::ApplicationPgpSignature, + "application/pidf-diff+xml" => Mime::ApplicationPidfDiffXml, + "application/pidf+xml" => Mime::ApplicationPidfXml, + "application/pkcs10" => Mime::ApplicationPkcs10, + "application/pkcs7-mime" => Mime::ApplicationPkcs7Mime, + "application/pkcs7-signature" => Mime::ApplicationPkcs7Signature, + "application/pkcs8" => Mime::ApplicationPkcs8, + "application/pkcs8-encrypted" => Mime::ApplicationPkcs8Encrypted, + "application/pkcs12" => Mime::ApplicationPkcs12, + "application/pkix-attr-cert" => Mime::ApplicationPkixAttrCert, + "application/pkix-cert" => Mime::ApplicationPkixCert, + "application/pkix-crl" => Mime::ApplicationPkixCrl, + "application/pkix-pkipath" => Mime::ApplicationPkixPkipath, + "application/pkixcmp" => Mime::ApplicationPkixcmp, + "application/pls+xml" => Mime::ApplicationPlsXml, + "application/poc-settings+xml" => Mime::ApplicationPocSettingsXml, + "application/postscript" => Mime::ApplicationPostscript, + "application/ppsp-tracker+json" => Mime::ApplicationPpspTrackerJson, + "application/problem+json" => Mime::ApplicationProblemJson, + "application/problem+xml" => Mime::ApplicationProblemXml, + "application/provenance+xml" => Mime::ApplicationProvenanceXml, + "application/prs.alvestrand.titrax-sheet" => Mime::ApplicationPrsAlvestrandTitraxSheet, + "application/prs.cww" => Mime::ApplicationPrsCww, + "application/prs.cyn" => Mime::ApplicationPrsCyn, + "application/prs.hpub+zip" => Mime::ApplicationPrsHpubZip, + "application/prs.implied-document+xml" => Mime::ApplicationPrsImpliedDocumentXml, + "application/prs.implied-executable" => Mime::ApplicationPrsImpliedExecutable, + "application/prs.implied-structure" => Mime::ApplicationPrsImpliedStructure, + "application/prs.nprend" => Mime::ApplicationPrsNprend, + "application/prs.plucker" => Mime::ApplicationPrsPlucker, + "application/prs.rdf-xml-crypt" => Mime::ApplicationPrsRdfXmlCrypt, + "application/prs.xsf+xml" => Mime::ApplicationPrsXsfXml, + "application/pskc+xml" => Mime::ApplicationPskcXml, + "application/pvd+json" => Mime::ApplicationPvdJson, + "application/rdf+xml" => Mime::ApplicationRdfXml, + "application/route-apd+xml" => Mime::ApplicationRouteApdXml, + "application/route-s-tsid+xml" => Mime::ApplicationRouteSTsidXml, + "application/route-usd+xml" => Mime::ApplicationRouteUsdXml, + "application/QSIG" => Mime::ApplicationQsig, + "application/raptorfec" => Mime::ApplicationRaptorfec, + "application/rdap+json" => Mime::ApplicationRdapJson, + "application/reginfo+xml" => Mime::ApplicationReginfoXml, + "application/relax-ng-compact-syntax" => Mime::ApplicationRelaxNgCompactSyntax, + "application/reputon+json" => Mime::ApplicationReputonJson, + "application/resource-lists-diff+xml" => Mime::ApplicationResourceListsDiffXml, + "application/resource-lists+xml" => Mime::ApplicationResourceListsXml, + "application/rfc+xml" => Mime::ApplicationRfcXml, + "application/riscos" => Mime::ApplicationRiscos, + "application/rlmi+xml" => Mime::ApplicationRlmiXml, + "application/rls-services+xml" => Mime::ApplicationRlsServicesXml, + "application/rpki-checklist" => Mime::ApplicationRpkiChecklist, + "application/rpki-ghostbusters" => Mime::ApplicationRpkiGhostbusters, + "application/rpki-manifest" => Mime::ApplicationRpkiManifest, + "application/rpki-publication" => Mime::ApplicationRpkiPublication, + "application/rpki-roa" => Mime::ApplicationRpkiRoa, + "application/rpki-updown" => Mime::ApplicationRpkiUpdown, + "application/rtf" => Mime::ApplicationRtf, + "application/rtploopback" => Mime::ApplicationRtploopback, + "application/rtx" => Mime::ApplicationRtx, + "application/samlassertion+xml" => Mime::ApplicationSamlassertionXml, + "application/samlmetadata+xml" => Mime::ApplicationSamlmetadataXml, + "application/sarif-external-properties+json" => Mime::ApplicationSarifExternalPropertiesJson, + "application/sarif+json" => Mime::ApplicationSarifJson, + "application/sbe" => Mime::ApplicationSbe, + "application/sbml+xml" => Mime::ApplicationSbmlXml, + "application/scaip+xml" => Mime::ApplicationScaipXml, + "application/scim+json" => Mime::ApplicationScimJson, + "application/scvp-cv-request" => Mime::ApplicationScvpCvRequest, + "application/scvp-cv-response" => Mime::ApplicationScvpCvResponse, + "application/scvp-vp-request" => Mime::ApplicationScvpVpRequest, + "application/scvp-vp-response" => Mime::ApplicationScvpVpResponse, + "application/sdp" => Mime::ApplicationSdp, + "application/secevent+jwt" => Mime::ApplicationSeceventJwt, + "application/senml-etch+cbor" => Mime::ApplicationSenmlEtchCbor, + "application/senml-etch+json" => Mime::ApplicationSenmlEtchJson, + "application/senml-exi" => Mime::ApplicationSenmlExi, + "application/senml+cbor" => Mime::ApplicationSenmlCbor, + "application/senml+json" => Mime::ApplicationSenmlJson, + "application/senml+xml" => Mime::ApplicationSenmlXml, + "application/sensml-exi" => Mime::ApplicationSensmlExi, + "application/sensml+cbor" => Mime::ApplicationSensmlCbor, + "application/sensml+json" => Mime::ApplicationSensmlJson, + "application/sensml+xml" => Mime::ApplicationSensmlXml, + "application/sep-exi" => Mime::ApplicationSepExi, + "application/sep+xml" => Mime::ApplicationSepXml, + "application/session-info" => Mime::ApplicationSessionInfo, + "application/set-payment" => Mime::ApplicationSetPayment, + "application/set-payment-initiation" => Mime::ApplicationSetPaymentInitiation, + "application/set-registration" => Mime::ApplicationSetRegistration, + "application/set-registration-initiation" => Mime::ApplicationSetRegistrationInitiation, + "application/SGML" => Mime::ApplicationSgml, + "application/sgml-open-catalog" => Mime::ApplicationSgmlOpenCatalog, + "application/shf+xml" => Mime::ApplicationShfXml, + "application/sieve" => Mime::ApplicationSieve, + "application/simple-filter+xml" => Mime::ApplicationSimpleFilterXml, + "application/simple-message-summary" => Mime::ApplicationSimpleMessageSummary, + "application/simpleSymbolContainer" => Mime::ApplicationSimplesymbolcontainer, + "application/sipc" => Mime::ApplicationSipc, + "application/slate" => Mime::ApplicationSlate, + "application/smil+xml" => Mime::ApplicationSmilXml, + "application/smpte336m" => Mime::ApplicationSmpte336m, + "application/soap+fastinfoset" => Mime::ApplicationSoapFastinfoset, + "application/soap+xml" => Mime::ApplicationSoapXml, + "application/sparql-query" => Mime::ApplicationSparqlQuery, + "application/spdx+json" => Mime::ApplicationSpdxJson, + "application/sparql-results+xml" => Mime::ApplicationSparqlResultsXml, + "application/spirits-event+xml" => Mime::ApplicationSpiritsEventXml, + "application/sql" => Mime::ApplicationSql, + "application/srgs" => Mime::ApplicationSrgs, + "application/srgs+xml" => Mime::ApplicationSrgsXml, + "application/sru+xml" => Mime::ApplicationSruXml, + "application/ssml+xml" => Mime::ApplicationSsmlXml, + "application/stix+json" => Mime::ApplicationStixJson, + "application/swid+cbor" => Mime::ApplicationSwidCbor, + "application/swid+xml" => Mime::ApplicationSwidXml, + "application/tamp-apex-update" => Mime::ApplicationTampApexUpdate, + "application/tamp-apex-update-confirm" => Mime::ApplicationTampApexUpdateConfirm, + "application/tamp-community-update" => Mime::ApplicationTampCommunityUpdate, + "application/tamp-community-update-confirm" => Mime::ApplicationTampCommunityUpdateConfirm, + "application/tamp-error" => Mime::ApplicationTampError, + "application/tamp-sequence-adjust" => Mime::ApplicationTampSequenceAdjust, + "application/tamp-sequence-adjust-confirm" => Mime::ApplicationTampSequenceAdjustConfirm, + "application/tamp-status-query" => Mime::ApplicationTampStatusQuery, + "application/tamp-status-response" => Mime::ApplicationTampStatusResponse, + "application/tamp-update" => Mime::ApplicationTampUpdate, + "application/tamp-update-confirm" => Mime::ApplicationTampUpdateConfirm, + "application/taxii+json" => Mime::ApplicationTaxiiJson, + "application/td+json" => Mime::ApplicationTdJson, + "application/tei+xml" => Mime::ApplicationTeiXml, + "application/TETRA_ISI" => Mime::ApplicationTetraIsi, + "application/thraud+xml" => Mime::ApplicationThraudXml, + "application/timestamp-query" => Mime::ApplicationTimestampQuery, + "application/timestamp-reply" => Mime::ApplicationTimestampReply, + "application/timestamped-data" => Mime::ApplicationTimestampedData, + "application/tlsrpt+gzip" => Mime::ApplicationTlsrptGzip, + "application/tlsrpt+json" => Mime::ApplicationTlsrptJson, + "application/tm+json" => Mime::ApplicationTmJson, + "application/tnauthlist" => Mime::ApplicationTnauthlist, + "application/token-introspection+jwt" => Mime::ApplicationTokenIntrospectionJwt, + "application/trickle-ice-sdpfrag" => Mime::ApplicationTrickleIceSdpfrag, + "application/trig" => Mime::ApplicationTrig, + "application/ttml+xml" => Mime::ApplicationTtmlXml, + "application/tve-trigger" => Mime::ApplicationTveTrigger, + "application/tzif" => Mime::ApplicationTzif, + "application/tzif-leap" => Mime::ApplicationTzifLeap, + "application/ulpfec" => Mime::ApplicationUlpfec, + "application/urc-grpsheet+xml" => Mime::ApplicationUrcGrpsheetXml, + "application/urc-ressheet+xml" => Mime::ApplicationUrcRessheetXml, + "application/urc-targetdesc+xml" => Mime::ApplicationUrcTargetdescXml, + "application/urc-uisocketdesc+xml" => Mime::ApplicationUrcUisocketdescXml, + "application/vcard+json" => Mime::ApplicationVcardJson, + "application/vcard+xml" => Mime::ApplicationVcardXml, + "application/vemmi" => Mime::ApplicationVemmi, + "application/vnd.1000minds.decision-model+xml" => Mime::ApplicationVnd1000mindsDecisionModelXml, + "application/vnd.1ob" => Mime::ApplicationVnd1ob, + "application/vnd.3gpp.5gnas" => Mime::ApplicationVnd3gpp5gnas, + "application/vnd.3gpp.access-transfer-events+xml" => Mime::ApplicationVnd3gppAccessTransferEventsXml, + "application/vnd.3gpp.bsf+xml" => Mime::ApplicationVnd3gppBsfXml, + "application/vnd.3gpp.crs+xml" => Mime::ApplicationVnd3gppCrsXml, + "application/vnd.3gpp.current-location-discovery+xml" => Mime::ApplicationVnd3gppCurrentLocationDiscoveryXml, + "application/vnd.3gpp.GMOP+xml" => Mime::ApplicationVnd3gppGmopXml, + "application/vnd.3gpp.gtpc" => Mime::ApplicationVnd3gppGtpc, + "application/vnd.3gpp.interworking-data" => Mime::ApplicationVnd3gppInterworkingData, + "application/vnd.3gpp.lpp" => Mime::ApplicationVnd3gppLpp, + "application/vnd.3gpp.mc-signalling-ear" => Mime::ApplicationVnd3gppMcSignallingEar, + "application/vnd.3gpp.mcdata-affiliation-command+xml" => Mime::ApplicationVnd3gppMcdataAffiliationCommandXml, + "application/vnd.3gpp.mcdata-info+xml" => Mime::ApplicationVnd3gppMcdataInfoXml, + "application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml" => Mime::ApplicationVnd3gppMcdataMsgstoreCtrlRequestXml, + "application/vnd.3gpp.mcdata-payload" => Mime::ApplicationVnd3gppMcdataPayload, + "application/vnd.3gpp.mcdata-regroup+xml" => Mime::ApplicationVnd3gppMcdataRegroupXml, + "application/vnd.3gpp.mcdata-service-config+xml" => Mime::ApplicationVnd3gppMcdataServiceConfigXml, + "application/vnd.3gpp.mcdata-signalling" => Mime::ApplicationVnd3gppMcdataSignalling, + "application/vnd.3gpp.mcdata-ue-config+xml" => Mime::ApplicationVnd3gppMcdataUeConfigXml, + "application/vnd.3gpp.mcdata-user-profile+xml" => Mime::ApplicationVnd3gppMcdataUserProfileXml, + "application/vnd.3gpp.mcptt-affiliation-command+xml" => Mime::ApplicationVnd3gppMcpttAffiliationCommandXml, + "application/vnd.3gpp.mcptt-floor-request+xml" => Mime::ApplicationVnd3gppMcpttFloorRequestXml, + "application/vnd.3gpp.mcptt-info+xml" => Mime::ApplicationVnd3gppMcpttInfoXml, + "application/vnd.3gpp.mcptt-location-info+xml" => Mime::ApplicationVnd3gppMcpttLocationInfoXml, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml" => Mime::ApplicationVnd3gppMcpttMbmsUsageInfoXml, + "application/vnd.3gpp.mcptt-regroup+xml" => Mime::ApplicationVnd3gppMcpttRegroupXml, + "application/vnd.3gpp.mcptt-service-config+xml" => Mime::ApplicationVnd3gppMcpttServiceConfigXml, + "application/vnd.3gpp.mcptt-signed+xml" => Mime::ApplicationVnd3gppMcpttSignedXml, + "application/vnd.3gpp.mcptt-ue-config+xml" => Mime::ApplicationVnd3gppMcpttUeConfigXml, + "application/vnd.3gpp.mcptt-ue-init-config+xml" => Mime::ApplicationVnd3gppMcpttUeInitConfigXml, + "application/vnd.3gpp.mcptt-user-profile+xml" => Mime::ApplicationVnd3gppMcpttUserProfileXml, + "application/vnd.3gpp.mcvideo-affiliation-command+xml" => Mime::ApplicationVnd3gppMcvideoAffiliationCommandXml, + "application/vnd.3gpp.mcvideo-info+xml" => Mime::ApplicationVnd3gppMcvideoInfoXml, + "application/vnd.3gpp.mcvideo-location-info+xml" => Mime::ApplicationVnd3gppMcvideoLocationInfoXml, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml" => Mime::ApplicationVnd3gppMcvideoMbmsUsageInfoXml, + "application/vnd.3gpp.mcvideo-regroup+xml" => Mime::ApplicationVnd3gppMcvideoRegroupXml, + "application/vnd.3gpp.mcvideo-service-config+xml" => Mime::ApplicationVnd3gppMcvideoServiceConfigXml, + "application/vnd.3gpp.mcvideo-transmission-request+xml" => Mime::ApplicationVnd3gppMcvideoTransmissionRequestXml, + "application/vnd.3gpp.mcvideo-ue-config+xml" => Mime::ApplicationVnd3gppMcvideoUeConfigXml, + "application/vnd.3gpp.mcvideo-user-profile+xml" => Mime::ApplicationVnd3gppMcvideoUserProfileXml, + "application/vnd.3gpp.mid-call+xml" => Mime::ApplicationVnd3gppMidCallXml, + "application/vnd.3gpp.ngap" => Mime::ApplicationVnd3gppNgap, + "application/vnd.3gpp.pfcp" => Mime::ApplicationVnd3gppPfcp, + "application/vnd.3gpp.pic-bw-large" => Mime::ApplicationVnd3gppPicBwLarge, + "application/vnd.3gpp.pic-bw-small" => Mime::ApplicationVnd3gppPicBwSmall, + "application/vnd.3gpp.pic-bw-var" => Mime::ApplicationVnd3gppPicBwVar, + "application/vnd.3gpp-prose-pc3a+xml" => Mime::ApplicationVnd3gppProsePc3aXml, + "application/vnd.3gpp-prose-pc3ach+xml" => Mime::ApplicationVnd3gppProsePc3achXml, + "application/vnd.3gpp-prose-pc3ch+xml" => Mime::ApplicationVnd3gppProsePc3chXml, + "application/vnd.3gpp-prose-pc8+xml" => Mime::ApplicationVnd3gppProsePc8Xml, + "application/vnd.3gpp-prose+xml" => Mime::ApplicationVnd3gppProseXml, + "application/vnd.3gpp.s1ap" => Mime::ApplicationVnd3gppS1ap, + "application/vnd.3gpp.seal-group-doc+xml" => Mime::ApplicationVnd3gppSealGroupDocXml, + "application/vnd.3gpp.seal-info+xml" => Mime::ApplicationVnd3gppSealInfoXml, + "application/vnd.3gpp.seal-location-info+xml" => Mime::ApplicationVnd3gppSealLocationInfoXml, + "application/vnd.3gpp.seal-mbms-usage-info+xml" => Mime::ApplicationVnd3gppSealMbmsUsageInfoXml, + "application/vnd.3gpp.seal-network-QoS-management-info+xml" => Mime::ApplicationVnd3gppSealNetworkQosManagementInfoXml, + "application/vnd.3gpp.seal-ue-config-info+xml" => Mime::ApplicationVnd3gppSealUeConfigInfoXml, + "application/vnd.3gpp.seal-unicast-info+xml" => Mime::ApplicationVnd3gppSealUnicastInfoXml, + "application/vnd.3gpp.seal-user-profile-info+xml" => Mime::ApplicationVnd3gppSealUserProfileInfoXml, + "application/vnd.3gpp.sms" => Mime::ApplicationVnd3gppSms, + "application/vnd.3gpp.sms+xml" => Mime::ApplicationVnd3gppSmsXml, + "application/vnd.3gpp.srvcc-ext+xml" => Mime::ApplicationVnd3gppSrvccExtXml, + "application/vnd.3gpp.SRVCC-info+xml" => Mime::ApplicationVnd3gppSrvccInfoXml, + "application/vnd.3gpp.state-and-event-info+xml" => Mime::ApplicationVnd3gppStateAndEventInfoXml, + "application/vnd.3gpp.ussd+xml" => Mime::ApplicationVnd3gppUssdXml, + "application/vnd.3gpp.vae-info+xml" => Mime::ApplicationVnd3gppVaeInfoXml, + "application/vnd.3gpp-v2x-local-service-information" => Mime::ApplicationVnd3gppV2xLocalServiceInformation, + "application/vnd.3gpp2.bcmcsinfo+xml" => Mime::ApplicationVnd3gpp2BcmcsinfoXml, + "application/vnd.3gpp2.sms" => Mime::ApplicationVnd3gpp2Sms, + "application/vnd.3gpp2.tcap" => Mime::ApplicationVnd3gpp2Tcap, + "application/vnd.3gpp.v2x" => Mime::ApplicationVnd3gppV2x, + "application/vnd.3lightssoftware.imagescal" => Mime::ApplicationVnd3lightssoftwareImagescal, + "application/vnd.3M.Post-it-Notes" => Mime::ApplicationVnd3mPostItNotes, + "application/vnd.accpac.simply.aso" => Mime::ApplicationVndAccpacSimplyAso, + "application/vnd.accpac.simply.imp" => Mime::ApplicationVndAccpacSimplyImp, + "application/vnd.acm.addressxfer+json" => Mime::ApplicationVndAcmAddressxferJson, + "application/vnd.acucobol" => Mime::ApplicationVndAcucobol, + "application/vnd.acucorp" => Mime::ApplicationVndAcucorp, + "application/vnd.adobe.flash.movie" => Mime::ApplicationVndAdobeFlashMovie, + "application/vnd.adobe.formscentral.fcdt" => Mime::ApplicationVndAdobeFormscentralFcdt, + "application/vnd.adobe.fxp" => Mime::ApplicationVndAdobeFxp, + "application/vnd.adobe.partial-upload" => Mime::ApplicationVndAdobePartialUpload, + "application/vnd.adobe.xdp+xml" => Mime::ApplicationVndAdobeXdpXml, + "application/vnd.aether.imp" => Mime::ApplicationVndAetherImp, + "application/vnd.afpc.afplinedata" => Mime::ApplicationVndAfpcAfplinedata, + "application/vnd.afpc.afplinedata-pagedef" => Mime::ApplicationVndAfpcAfplinedataPagedef, + "application/vnd.afpc.cmoca-cmresource" => Mime::ApplicationVndAfpcCmocaCmresource, + "application/vnd.afpc.foca-charset" => Mime::ApplicationVndAfpcFocaCharset, + "application/vnd.afpc.foca-codedfont" => Mime::ApplicationVndAfpcFocaCodedfont, + "application/vnd.afpc.foca-codepage" => Mime::ApplicationVndAfpcFocaCodepage, + "application/vnd.afpc.modca" => Mime::ApplicationVndAfpcModca, + "application/vnd.afpc.modca-cmtable" => Mime::ApplicationVndAfpcModcaCmtable, + "application/vnd.afpc.modca-formdef" => Mime::ApplicationVndAfpcModcaFormdef, + "application/vnd.afpc.modca-mediummap" => Mime::ApplicationVndAfpcModcaMediummap, + "application/vnd.afpc.modca-objectcontainer" => Mime::ApplicationVndAfpcModcaObjectcontainer, + "application/vnd.afpc.modca-overlay" => Mime::ApplicationVndAfpcModcaOverlay, + "application/vnd.afpc.modca-pagesegment" => Mime::ApplicationVndAfpcModcaPagesegment, + "application/vnd.age" => Mime::ApplicationVndAge, + "application/vnd.ah-barcode" => Mime::ApplicationVndAhBarcode, + "application/vnd.ahead.space" => Mime::ApplicationVndAheadSpace, + "application/vnd.airzip.filesecure.azf" => Mime::ApplicationVndAirzipFilesecureAzf, + "application/vnd.airzip.filesecure.azs" => Mime::ApplicationVndAirzipFilesecureAzs, + "application/vnd.amadeus+json" => Mime::ApplicationVndAmadeusJson, + "application/vnd.amazon.mobi8-ebook" => Mime::ApplicationVndAmazonMobi8Ebook, + "application/vnd.americandynamics.acc" => Mime::ApplicationVndAmericandynamicsAcc, + "application/vnd.amiga.ami" => Mime::ApplicationVndAmigaAmi, + "application/vnd.amundsen.maze+xml" => Mime::ApplicationVndAmundsenMazeXml, + "application/vnd.android.ota" => Mime::ApplicationVndAndroidOta, + "application/vnd.anki" => Mime::ApplicationVndAnki, + "application/vnd.anser-web-certificate-issue-initiation" => Mime::ApplicationVndAnserWebCertificateIssueInitiation, + "application/vnd.antix.game-component" => Mime::ApplicationVndAntixGameComponent, + "application/vnd.apache.arrow.file" => Mime::ApplicationVndApacheArrowFile, + "application/vnd.apache.arrow.stream" => Mime::ApplicationVndApacheArrowStream, + "application/vnd.apache.thrift.binary" => Mime::ApplicationVndApacheThriftBinary, + "application/vnd.apache.thrift.compact" => Mime::ApplicationVndApacheThriftCompact, + "application/vnd.apache.thrift.json" => Mime::ApplicationVndApacheThriftJson, + "application/vnd.apexlang" => Mime::ApplicationVndApexlang, + "application/vnd.api+json" => Mime::ApplicationVndApiJson, + "application/vnd.aplextor.warrp+json" => Mime::ApplicationVndAplextorWarrpJson, + "application/vnd.apothekende.reservation+json" => Mime::ApplicationVndApothekendeReservationJson, + "application/vnd.apple.installer+xml" => Mime::ApplicationVndAppleInstallerXml, + "application/vnd.apple.keynote" => Mime::ApplicationVndAppleKeynote, + "application/vnd.apple.mpegurl" => Mime::ApplicationVndAppleMpegurl, + "application/vnd.apple.numbers" => Mime::ApplicationVndAppleNumbers, + "application/vnd.apple.pages" => Mime::ApplicationVndApplePages, + "application/vnd.aristanetworks.swi" => Mime::ApplicationVndAristanetworksSwi, + "application/vnd.artisan+json" => Mime::ApplicationVndArtisanJson, + "application/vnd.artsquare" => Mime::ApplicationVndArtsquare, + "application/vnd.astraea-software.iota" => Mime::ApplicationVndAstraeaSoftwareIota, + "application/vnd.audiograph" => Mime::ApplicationVndAudiograph, + "application/vnd.autopackage" => Mime::ApplicationVndAutopackage, + "application/vnd.avalon+json" => Mime::ApplicationVndAvalonJson, + "application/vnd.avistar+xml" => Mime::ApplicationVndAvistarXml, + "application/vnd.balsamiq.bmml+xml" => Mime::ApplicationVndBalsamiqBmmlXml, + "application/vnd.banana-accounting" => Mime::ApplicationVndBananaAccounting, + "application/vnd.bbf.usp.error" => Mime::ApplicationVndBbfUspError, + "application/vnd.bbf.usp.msg" => Mime::ApplicationVndBbfUspMsg, + "application/vnd.bbf.usp.msg+json" => Mime::ApplicationVndBbfUspMsgJson, + "application/vnd.balsamiq.bmpr" => Mime::ApplicationVndBalsamiqBmpr, + "application/vnd.bekitzur-stech+json" => Mime::ApplicationVndBekitzurStechJson, + "application/vnd.belightsoft.lhzd+zip" => Mime::ApplicationVndBelightsoftLhzdZip, + "application/vnd.belightsoft.lhzl+zip" => Mime::ApplicationVndBelightsoftLhzlZip, + "application/vnd.bint.med-content" => Mime::ApplicationVndBintMedContent, + "application/vnd.biopax.rdf+xml" => Mime::ApplicationVndBiopaxRdfXml, + "application/vnd.blink-idb-value-wrapper" => Mime::ApplicationVndBlinkIdbValueWrapper, + "application/vnd.blueice.multipass" => Mime::ApplicationVndBlueiceMultipass, + "application/vnd.bluetooth.ep.oob" => Mime::ApplicationVndBluetoothEpOob, + "application/vnd.bluetooth.le.oob" => Mime::ApplicationVndBluetoothLeOob, + "application/vnd.bmi" => Mime::ApplicationVndBmi, + "application/vnd.bpf" => Mime::ApplicationVndBpf, + "application/vnd.bpf3" => Mime::ApplicationVndBpf3, + "application/vnd.businessobjects" => Mime::ApplicationVndBusinessobjects, + "application/vnd.byu.uapi+json" => Mime::ApplicationVndByuUapiJson, + "application/vnd.cab-jscript" => Mime::ApplicationVndCabJscript, + "application/vnd.canon-cpdl" => Mime::ApplicationVndCanonCpdl, + "application/vnd.canon-lips" => Mime::ApplicationVndCanonLips, + "application/vnd.capasystems-pg+json" => Mime::ApplicationVndCapasystemsPgJson, + "application/vnd.cendio.thinlinc.clientconf" => Mime::ApplicationVndCendioThinlincClientconf, + "application/vnd.century-systems.tcp_stream" => Mime::ApplicationVndCenturySystemsTcpStream, + "application/vnd.chemdraw+xml" => Mime::ApplicationVndChemdrawXml, + "application/vnd.chess-pgn" => Mime::ApplicationVndChessPgn, + "application/vnd.chipnuts.karaoke-mmd" => Mime::ApplicationVndChipnutsKaraokeMmd, + "application/vnd.ciedi" => Mime::ApplicationVndCiedi, + "application/vnd.cinderella" => Mime::ApplicationVndCinderella, + "application/vnd.cirpack.isdn-ext" => Mime::ApplicationVndCirpackIsdnExt, + "application/vnd.citationstyles.style+xml" => Mime::ApplicationVndCitationstylesStyleXml, + "application/vnd.claymore" => Mime::ApplicationVndClaymore, + "application/vnd.cloanto.rp9" => Mime::ApplicationVndCloantoRp9, + "application/vnd.clonk.c4group" => Mime::ApplicationVndClonkC4group, + "application/vnd.cluetrust.cartomobile-config" => Mime::ApplicationVndCluetrustCartomobileConfig, + "application/vnd.cluetrust.cartomobile-config-pkg" => Mime::ApplicationVndCluetrustCartomobileConfigPkg, + "application/vnd.cncf.helm.chart.content.v1.tar+gzip" => Mime::ApplicationVndCncfHelmChartContentV1TarGzip, + "application/vnd.cncf.helm.chart.provenance.v1.prov" => Mime::ApplicationVndCncfHelmChartProvenanceV1Prov, + "application/vnd.cncf.helm.config.v1+json" => Mime::ApplicationVndCncfHelmConfigV1Json, + "application/vnd.coffeescript" => Mime::ApplicationVndCoffeescript, + "application/vnd.collabio.xodocuments.document" => Mime::ApplicationVndCollabioXodocumentsDocument, + "application/vnd.collabio.xodocuments.document-template" => Mime::ApplicationVndCollabioXodocumentsDocumentTemplate, + "application/vnd.collabio.xodocuments.presentation" => Mime::ApplicationVndCollabioXodocumentsPresentation, + "application/vnd.collabio.xodocuments.presentation-template" => Mime::ApplicationVndCollabioXodocumentsPresentationTemplate, + "application/vnd.collabio.xodocuments.spreadsheet" => Mime::ApplicationVndCollabioXodocumentsSpreadsheet, + "application/vnd.collabio.xodocuments.spreadsheet-template" => Mime::ApplicationVndCollabioXodocumentsSpreadsheetTemplate, + "application/vnd.collection.doc+json" => Mime::ApplicationVndCollectionDocJson, + "application/vnd.collection+json" => Mime::ApplicationVndCollectionJson, + "application/vnd.collection.next+json" => Mime::ApplicationVndCollectionNextJson, + "application/vnd.comicbook-rar" => Mime::ApplicationVndComicbookRar, + "application/vnd.comicbook+zip" => Mime::ApplicationVndComicbookZip, + "application/vnd.commerce-battelle" => Mime::ApplicationVndCommerceBattelle, + "application/vnd.commonspace" => Mime::ApplicationVndCommonspace, + "application/vnd.coreos.ignition+json" => Mime::ApplicationVndCoreosIgnitionJson, + "application/vnd.cosmocaller" => Mime::ApplicationVndCosmocaller, + "application/vnd.contact.cmsg" => Mime::ApplicationVndContactCmsg, + "application/vnd.crick.clicker" => Mime::ApplicationVndCrickClicker, + "application/vnd.crick.clicker.keyboard" => Mime::ApplicationVndCrickClickerKeyboard, + "application/vnd.crick.clicker.palette" => Mime::ApplicationVndCrickClickerPalette, + "application/vnd.crick.clicker.template" => Mime::ApplicationVndCrickClickerTemplate, + "application/vnd.crick.clicker.wordbank" => Mime::ApplicationVndCrickClickerWordbank, + "application/vnd.criticaltools.wbs+xml" => Mime::ApplicationVndCriticaltoolsWbsXml, + "application/vnd.cryptii.pipe+json" => Mime::ApplicationVndCryptiiPipeJson, + "application/vnd.crypto-shade-file" => Mime::ApplicationVndCryptoShadeFile, + "application/vnd.cryptomator.encrypted" => Mime::ApplicationVndCryptomatorEncrypted, + "application/vnd.cryptomator.vault" => Mime::ApplicationVndCryptomatorVault, + "application/vnd.ctc-posml" => Mime::ApplicationVndCtcPosml, + "application/vnd.ctct.ws+xml" => Mime::ApplicationVndCtctWsXml, + "application/vnd.cups-pdf" => Mime::ApplicationVndCupsPdf, + "application/vnd.cups-postscript" => Mime::ApplicationVndCupsPostscript, + "application/vnd.cups-ppd" => Mime::ApplicationVndCupsPpd, + "application/vnd.cups-raster" => Mime::ApplicationVndCupsRaster, + "application/vnd.cups-raw" => Mime::ApplicationVndCupsRaw, + "application/vnd.curl" => Mime::ApplicationVndCurl, + "application/vnd.cyan.dean.root+xml" => Mime::ApplicationVndCyanDeanRootXml, + "application/vnd.cybank" => Mime::ApplicationVndCybank, + "application/vnd.cyclonedx+json" => Mime::ApplicationVndCyclonedxJson, + "application/vnd.cyclonedx+xml" => Mime::ApplicationVndCyclonedxXml, + "application/vnd.d2l.coursepackage1p0+zip" => Mime::ApplicationVndD2lCoursepackage1p0Zip, + "application/vnd.d3m-dataset" => Mime::ApplicationVndD3mDataset, + "application/vnd.d3m-problem" => Mime::ApplicationVndD3mProblem, + "application/vnd.dart" => Mime::ApplicationVndDart, + "application/vnd.data-vision.rdz" => Mime::ApplicationVndDataVisionRdz, + "application/vnd.datalog" => Mime::ApplicationVndDatalog, + "application/vnd.datapackage+json" => Mime::ApplicationVndDatapackageJson, + "application/vnd.dataresource+json" => Mime::ApplicationVndDataresourceJson, + "application/vnd.dbf" => Mime::ApplicationVndDbf, + "application/vnd.debian.binary-package" => Mime::ApplicationVndDebianBinaryPackage, + "application/vnd.dece.data" => Mime::ApplicationVndDeceData, + "application/vnd.dece.ttml+xml" => Mime::ApplicationVndDeceTtmlXml, + "application/vnd.dece.unspecified" => Mime::ApplicationVndDeceUnspecified, + "application/vnd.dece.zip" => Mime::ApplicationVndDeceZip, + "application/vnd.denovo.fcselayout-link" => Mime::ApplicationVndDenovoFcselayoutLink, + "application/vnd.desmume.movie" => Mime::ApplicationVndDesmumeMovie, + "application/vnd.dir-bi.plate-dl-nosuffix" => Mime::ApplicationVndDirBiPlateDlNosuffix, + "application/vnd.dm.delegation+xml" => Mime::ApplicationVndDmDelegationXml, + "application/vnd.dna" => Mime::ApplicationVndDna, + "application/vnd.document+json" => Mime::ApplicationVndDocumentJson, + "application/vnd.dolby.mobile.1" => Mime::ApplicationVndDolbyMobile1, + "application/vnd.dolby.mobile.2" => Mime::ApplicationVndDolbyMobile2, + "application/vnd.doremir.scorecloud-binary-document" => Mime::ApplicationVndDoremirScorecloudBinaryDocument, + "application/vnd.dpgraph" => Mime::ApplicationVndDpgraph, + "application/vnd.dreamfactory" => Mime::ApplicationVndDreamfactory, + "application/vnd.drive+json" => Mime::ApplicationVndDriveJson, + "application/vnd.dtg.local" => Mime::ApplicationVndDtgLocal, + "application/vnd.dtg.local.flash" => Mime::ApplicationVndDtgLocalFlash, + "application/vnd.dtg.local.html" => Mime::ApplicationVndDtgLocalHtml, + "application/vnd.dvb.ait" => Mime::ApplicationVndDvbAit, + "application/vnd.dvb.dvbisl+xml" => Mime::ApplicationVndDvbDvbislXml, + "application/vnd.dvb.dvbj" => Mime::ApplicationVndDvbDvbj, + "application/vnd.dvb.esgcontainer" => Mime::ApplicationVndDvbEsgcontainer, + "application/vnd.dvb.ipdcdftnotifaccess" => Mime::ApplicationVndDvbIpdcdftnotifaccess, + "application/vnd.dvb.ipdcesgaccess" => Mime::ApplicationVndDvbIpdcesgaccess, + "application/vnd.dvb.ipdcesgaccess2" => Mime::ApplicationVndDvbIpdcesgaccess2, + "application/vnd.dvb.ipdcesgpdd" => Mime::ApplicationVndDvbIpdcesgpdd, + "application/vnd.dvb.ipdcroaming" => Mime::ApplicationVndDvbIpdcroaming, + "application/vnd.dvb.iptv.alfec-base" => Mime::ApplicationVndDvbIptvAlfecBase, + "application/vnd.dvb.iptv.alfec-enhancement" => Mime::ApplicationVndDvbIptvAlfecEnhancement, + "application/vnd.dvb.notif-aggregate-root+xml" => Mime::ApplicationVndDvbNotifAggregateRootXml, + "application/vnd.dvb.notif-container+xml" => Mime::ApplicationVndDvbNotifContainerXml, + "application/vnd.dvb.notif-generic+xml" => Mime::ApplicationVndDvbNotifGenericXml, + "application/vnd.dvb.notif-ia-msglist+xml" => Mime::ApplicationVndDvbNotifIaMsglistXml, + "application/vnd.dvb.notif-ia-registration-request+xml" => Mime::ApplicationVndDvbNotifIaRegistrationRequestXml, + "application/vnd.dvb.notif-ia-registration-response+xml" => Mime::ApplicationVndDvbNotifIaRegistrationResponseXml, + "application/vnd.dvb.notif-init+xml" => Mime::ApplicationVndDvbNotifInitXml, + "application/vnd.dvb.pfr" => Mime::ApplicationVndDvbPfr, + "application/vnd.dvb.service" => Mime::ApplicationVndDvbService, + "application/vnd.dxr" => Mime::ApplicationVndDxr, + "application/vnd.dynageo" => Mime::ApplicationVndDynageo, + "application/vnd.dzr" => Mime::ApplicationVndDzr, + "application/vnd.easykaraoke.cdgdownload" => Mime::ApplicationVndEasykaraokeCdgdownload, + "application/vnd.ecip.rlp" => Mime::ApplicationVndEcipRlp, + "application/vnd.ecdis-update" => Mime::ApplicationVndEcdisUpdate, + "application/vnd.eclipse.ditto+json" => Mime::ApplicationVndEclipseDittoJson, + "application/vnd.ecowin.chart" => Mime::ApplicationVndEcowinChart, + "application/vnd.ecowin.filerequest" => Mime::ApplicationVndEcowinFilerequest, + "application/vnd.ecowin.fileupdate" => Mime::ApplicationVndEcowinFileupdate, + "application/vnd.ecowin.series" => Mime::ApplicationVndEcowinSeries, + "application/vnd.ecowin.seriesrequest" => Mime::ApplicationVndEcowinSeriesrequest, + "application/vnd.ecowin.seriesupdate" => Mime::ApplicationVndEcowinSeriesupdate, + "application/vnd.efi.img" => Mime::ApplicationVndEfiImg, + "application/vnd.efi.iso" => Mime::ApplicationVndEfiIso, + "application/vnd.eln+zip" => Mime::ApplicationVndElnZip, + "application/vnd.emclient.accessrequest+xml" => Mime::ApplicationVndEmclientAccessrequestXml, + "application/vnd.enliven" => Mime::ApplicationVndEnliven, + "application/vnd.enphase.envoy" => Mime::ApplicationVndEnphaseEnvoy, + "application/vnd.eprints.data+xml" => Mime::ApplicationVndEprintsDataXml, + "application/vnd.epson.esf" => Mime::ApplicationVndEpsonEsf, + "application/vnd.epson.msf" => Mime::ApplicationVndEpsonMsf, + "application/vnd.epson.quickanime" => Mime::ApplicationVndEpsonQuickanime, + "application/vnd.epson.salt" => Mime::ApplicationVndEpsonSalt, + "application/vnd.epson.ssf" => Mime::ApplicationVndEpsonSsf, + "application/vnd.ericsson.quickcall" => Mime::ApplicationVndEricssonQuickcall, + "application/vnd.espass-espass+zip" => Mime::ApplicationVndEspassEspassZip, + "application/vnd.eszigno3+xml" => Mime::ApplicationVndEszigno3Xml, + "application/vnd.etsi.aoc+xml" => Mime::ApplicationVndEtsiAocXml, + "application/vnd.etsi.asic-s+zip" => Mime::ApplicationVndEtsiAsicSZip, + "application/vnd.etsi.asic-e+zip" => Mime::ApplicationVndEtsiAsicEZip, + "application/vnd.etsi.cug+xml" => Mime::ApplicationVndEtsiCugXml, + "application/vnd.etsi.iptvcommand+xml" => Mime::ApplicationVndEtsiIptvcommandXml, + "application/vnd.etsi.iptvdiscovery+xml" => Mime::ApplicationVndEtsiIptvdiscoveryXml, + "application/vnd.etsi.iptvprofile+xml" => Mime::ApplicationVndEtsiIptvprofileXml, + "application/vnd.etsi.iptvsad-bc+xml" => Mime::ApplicationVndEtsiIptvsadBcXml, + "application/vnd.etsi.iptvsad-cod+xml" => Mime::ApplicationVndEtsiIptvsadCodXml, + "application/vnd.etsi.iptvsad-npvr+xml" => Mime::ApplicationVndEtsiIptvsadNpvrXml, + "application/vnd.etsi.iptvservice+xml" => Mime::ApplicationVndEtsiIptvserviceXml, + "application/vnd.etsi.iptvsync+xml" => Mime::ApplicationVndEtsiIptvsyncXml, + "application/vnd.etsi.iptvueprofile+xml" => Mime::ApplicationVndEtsiIptvueprofileXml, + "application/vnd.etsi.mcid+xml" => Mime::ApplicationVndEtsiMcidXml, + "application/vnd.etsi.mheg5" => Mime::ApplicationVndEtsiMheg5, + "application/vnd.etsi.overload-control-policy-dataset+xml" => Mime::ApplicationVndEtsiOverloadControlPolicyDatasetXml, + "application/vnd.etsi.pstn+xml" => Mime::ApplicationVndEtsiPstnXml, + "application/vnd.etsi.sci+xml" => Mime::ApplicationVndEtsiSciXml, + "application/vnd.etsi.simservs+xml" => Mime::ApplicationVndEtsiSimservsXml, + "application/vnd.etsi.timestamp-token" => Mime::ApplicationVndEtsiTimestampToken, + "application/vnd.etsi.tsl+xml" => Mime::ApplicationVndEtsiTslXml, + "application/vnd.etsi.tsl.der" => Mime::ApplicationVndEtsiTslDer, + "application/vnd.eu.kasparian.car+json" => Mime::ApplicationVndEuKasparianCarJson, + "application/vnd.eudora.data" => Mime::ApplicationVndEudoraData, + "application/vnd.evolv.ecig.profile" => Mime::ApplicationVndEvolvEcigProfile, + "application/vnd.evolv.ecig.settings" => Mime::ApplicationVndEvolvEcigSettings, + "application/vnd.evolv.ecig.theme" => Mime::ApplicationVndEvolvEcigTheme, + "application/vnd.exstream-empower+zip" => Mime::ApplicationVndExstreamEmpowerZip, + "application/vnd.exstream-package" => Mime::ApplicationVndExstreamPackage, + "application/vnd.ezpix-album" => Mime::ApplicationVndEzpixAlbum, + "application/vnd.ezpix-package" => Mime::ApplicationVndEzpixPackage, + "application/vnd.f-secure.mobile" => Mime::ApplicationVndFSecureMobile, + "application/vnd.fastcopy-disk-image" => Mime::ApplicationVndFastcopyDiskImage, + "application/vnd.familysearch.gedcom+zip" => Mime::ApplicationVndFamilysearchGedcomZip, + "application/vnd.fdsn.mseed" => Mime::ApplicationVndFdsnMseed, + "application/vnd.fdsn.seed" => Mime::ApplicationVndFdsnSeed, + "application/vnd.ffsns" => Mime::ApplicationVndFfsns, + "application/vnd.ficlab.flb+zip" => Mime::ApplicationVndFiclabFlbZip, + "application/vnd.filmit.zfc" => Mime::ApplicationVndFilmitZfc, + "application/vnd.fints" => Mime::ApplicationVndFints, + "application/vnd.firemonkeys.cloudcell" => Mime::ApplicationVndFiremonkeysCloudcell, + "application/vnd.FloGraphIt" => Mime::ApplicationVndFlographit, + "application/vnd.fluxtime.clip" => Mime::ApplicationVndFluxtimeClip, + "application/vnd.font-fontforge-sfd" => Mime::ApplicationVndFontFontforgeSfd, + "application/vnd.framemaker" => Mime::ApplicationVndFramemaker, + "application/vnd.fsc.weblaunch" => Mime::ApplicationVndFscWeblaunch, + "application/vnd.fujifilm.fb.docuworks" => Mime::ApplicationVndFujifilmFbDocuworks, + "application/vnd.fujifilm.fb.docuworks.binder" => Mime::ApplicationVndFujifilmFbDocuworksBinder, + "application/vnd.fujifilm.fb.docuworks.container" => Mime::ApplicationVndFujifilmFbDocuworksContainer, + "application/vnd.fujifilm.fb.jfi+xml" => Mime::ApplicationVndFujifilmFbJfiXml, + "application/vnd.fujitsu.oasys" => Mime::ApplicationVndFujitsuOasys, + "application/vnd.fujitsu.oasys2" => Mime::ApplicationVndFujitsuOasys2, + "application/vnd.fujitsu.oasys3" => Mime::ApplicationVndFujitsuOasys3, + "application/vnd.fujitsu.oasysgp" => Mime::ApplicationVndFujitsuOasysgp, + "application/vnd.fujitsu.oasysprs" => Mime::ApplicationVndFujitsuOasysprs, + "application/vnd.fujixerox.ART4" => Mime::ApplicationVndFujixeroxArt4, + "application/vnd.fujixerox.ART-EX" => Mime::ApplicationVndFujixeroxArtEx, + "application/vnd.fujixerox.ddd" => Mime::ApplicationVndFujixeroxDdd, + "application/vnd.fujixerox.docuworks" => Mime::ApplicationVndFujixeroxDocuworks, + "application/vnd.fujixerox.docuworks.binder" => Mime::ApplicationVndFujixeroxDocuworksBinder, + "application/vnd.fujixerox.docuworks.container" => Mime::ApplicationVndFujixeroxDocuworksContainer, + "application/vnd.fujixerox.HBPL" => Mime::ApplicationVndFujixeroxHbpl, + "application/vnd.fut-misnet" => Mime::ApplicationVndFutMisnet, + "application/vnd.futoin+cbor" => Mime::ApplicationVndFutoinCbor, + "application/vnd.futoin+json" => Mime::ApplicationVndFutoinJson, + "application/vnd.fuzzysheet" => Mime::ApplicationVndFuzzysheet, + "application/vnd.genomatix.tuxedo" => Mime::ApplicationVndGenomatixTuxedo, + "application/vnd.genozip" => Mime::ApplicationVndGenozip, + "application/vnd.gentics.grd+json" => Mime::ApplicationVndGenticsGrdJson, + "application/vnd.gentoo.catmetadata+xml" => Mime::ApplicationVndGentooCatmetadataXml, + "application/vnd.gentoo.ebuild" => Mime::ApplicationVndGentooEbuild, + "application/vnd.gentoo.eclass" => Mime::ApplicationVndGentooEclass, + "application/vnd.gentoo.gpkg" => Mime::ApplicationVndGentooGpkg, + "application/vnd.gentoo.manifest" => Mime::ApplicationVndGentooManifest, + "application/vnd.gentoo.xpak" => Mime::ApplicationVndGentooXpak, + "application/vnd.gentoo.pkgmetadata+xml" => Mime::ApplicationVndGentooPkgmetadataXml, + "application/vnd.geogebra.file" => Mime::ApplicationVndGeogebraFile, + "application/vnd.geogebra.slides" => Mime::ApplicationVndGeogebraSlides, + "application/vnd.geogebra.tool" => Mime::ApplicationVndGeogebraTool, + "application/vnd.geometry-explorer" => Mime::ApplicationVndGeometryExplorer, + "application/vnd.geonext" => Mime::ApplicationVndGeonext, + "application/vnd.geoplan" => Mime::ApplicationVndGeoplan, + "application/vnd.geospace" => Mime::ApplicationVndGeospace, + "application/vnd.gerber" => Mime::ApplicationVndGerber, + "application/vnd.globalplatform.card-content-mgt" => Mime::ApplicationVndGlobalplatformCardContentMgt, + "application/vnd.globalplatform.card-content-mgt-response" => Mime::ApplicationVndGlobalplatformCardContentMgtResponse, + "application/vnd.gnu.taler.exchange+json" => Mime::ApplicationVndGnuTalerExchangeJson, + "application/vnd.gnu.taler.merchant+json" => Mime::ApplicationVndGnuTalerMerchantJson, + "application/vnd.google-earth.kml+xml" => Mime::ApplicationVndGoogleEarthKmlXml, + "application/vnd.google-earth.kmz" => Mime::ApplicationVndGoogleEarthKmz, + "application/vnd.gov.sk.e-form+xml" => Mime::ApplicationVndGovSkEFormXml, + "application/vnd.gov.sk.e-form+zip" => Mime::ApplicationVndGovSkEFormZip, + "application/vnd.gov.sk.xmldatacontainer+xml" => Mime::ApplicationVndGovSkXmldatacontainerXml, + "application/vnd.gpxsee.map+xml" => Mime::ApplicationVndGpxseeMapXml, + "application/vnd.grafeq" => Mime::ApplicationVndGrafeq, + "application/vnd.gridmp" => Mime::ApplicationVndGridmp, + "application/vnd.groove-account" => Mime::ApplicationVndGrooveAccount, + "application/vnd.groove-help" => Mime::ApplicationVndGrooveHelp, + "application/vnd.groove-identity-message" => Mime::ApplicationVndGrooveIdentityMessage, + "application/vnd.groove-injector" => Mime::ApplicationVndGrooveInjector, + "application/vnd.groove-tool-message" => Mime::ApplicationVndGrooveToolMessage, + "application/vnd.groove-tool-template" => Mime::ApplicationVndGrooveToolTemplate, + "application/vnd.groove-vcard" => Mime::ApplicationVndGrooveVcard, + "application/vnd.hal+json" => Mime::ApplicationVndHalJson, + "application/vnd.hal+xml" => Mime::ApplicationVndHalXml, + "application/vnd.HandHeld-Entertainment+xml" => Mime::ApplicationVndHandheldEntertainmentXml, + "application/vnd.hbci" => Mime::ApplicationVndHbci, + "application/vnd.hc+json" => Mime::ApplicationVndHcJson, + "application/vnd.hcl-bireports" => Mime::ApplicationVndHclBireports, + "application/vnd.hdt" => Mime::ApplicationVndHdt, + "application/vnd.heroku+json" => Mime::ApplicationVndHerokuJson, + "application/vnd.hhe.lesson-player" => Mime::ApplicationVndHheLessonPlayer, + "application/vnd.hp-HPGL" => Mime::ApplicationVndHpHpgl, + "application/vnd.hp-hpid" => Mime::ApplicationVndHpHpid, + "application/vnd.hp-hps" => Mime::ApplicationVndHpHps, + "application/vnd.hp-jlyt" => Mime::ApplicationVndHpJlyt, + "application/vnd.hp-PCL" => Mime::ApplicationVndHpPcl, + "application/vnd.hp-PCLXL" => Mime::ApplicationVndHpPclxl, + "application/vnd.hsl" => Mime::ApplicationVndHsl, + "application/vnd.httphone" => Mime::ApplicationVndHttphone, + "application/vnd.hydrostatix.sof-data" => Mime::ApplicationVndHydrostatixSofData, + "application/vnd.hyper-item+json" => Mime::ApplicationVndHyperItemJson, + "application/vnd.hyper+json" => Mime::ApplicationVndHyperJson, + "application/vnd.hyperdrive+json" => Mime::ApplicationVndHyperdriveJson, + "application/vnd.hzn-3d-crossword" => Mime::ApplicationVndHzn3dCrossword, + "application/vnd.ibm.electronic-media" => Mime::ApplicationVndIbmElectronicMedia, + "application/vnd.ibm.MiniPay" => Mime::ApplicationVndIbmMinipay, + "application/vnd.ibm.rights-management" => Mime::ApplicationVndIbmRightsManagement, + "application/vnd.ibm.secure-container" => Mime::ApplicationVndIbmSecureContainer, + "application/vnd.iccprofile" => Mime::ApplicationVndIccprofile, + "application/vnd.ieee.1905" => Mime::ApplicationVndIeee1905, + "application/vnd.igloader" => Mime::ApplicationVndIgloader, + "application/vnd.imagemeter.folder+zip" => Mime::ApplicationVndImagemeterFolderZip, + "application/vnd.imagemeter.image+zip" => Mime::ApplicationVndImagemeterImageZip, + "application/vnd.immervision-ivp" => Mime::ApplicationVndImmervisionIvp, + "application/vnd.immervision-ivu" => Mime::ApplicationVndImmervisionIvu, + "application/vnd.ims.imsccv1p1" => Mime::ApplicationVndImsImsccv1p1, + "application/vnd.ims.imsccv1p2" => Mime::ApplicationVndImsImsccv1p2, + "application/vnd.ims.imsccv1p3" => Mime::ApplicationVndImsImsccv1p3, + "application/vnd.ims.lis.v2.result+json" => Mime::ApplicationVndImsLisV2ResultJson, + "application/vnd.ims.lti.v2.toolconsumerprofile+json" => Mime::ApplicationVndImsLtiV2ToolconsumerprofileJson, + "application/vnd.ims.lti.v2.toolproxy.id+json" => Mime::ApplicationVndImsLtiV2ToolproxyIdJson, + "application/vnd.ims.lti.v2.toolproxy+json" => Mime::ApplicationVndImsLtiV2ToolproxyJson, + "application/vnd.ims.lti.v2.toolsettings+json" => Mime::ApplicationVndImsLtiV2ToolsettingsJson, + "application/vnd.ims.lti.v2.toolsettings.simple+json" => Mime::ApplicationVndImsLtiV2ToolsettingsSimpleJson, + "application/vnd.informedcontrol.rms+xml" => Mime::ApplicationVndInformedcontrolRmsXml, + "application/vnd.infotech.project" => Mime::ApplicationVndInfotechProject, + "application/vnd.infotech.project+xml" => Mime::ApplicationVndInfotechProjectXml, + "application/vnd.innopath.wamp.notification" => Mime::ApplicationVndInnopathWampNotification, + "application/vnd.insors.igm" => Mime::ApplicationVndInsorsIgm, + "application/vnd.intercon.formnet" => Mime::ApplicationVndInterconFormnet, + "application/vnd.intergeo" => Mime::ApplicationVndIntergeo, + "application/vnd.intertrust.digibox" => Mime::ApplicationVndIntertrustDigibox, + "application/vnd.intertrust.nncp" => Mime::ApplicationVndIntertrustNncp, + "application/vnd.intu.qbo" => Mime::ApplicationVndIntuQbo, + "application/vnd.intu.qfx" => Mime::ApplicationVndIntuQfx, + "application/vnd.ipfs.ipns-record" => Mime::ApplicationVndIpfsIpnsRecord, + "application/vnd.ipld.car" => Mime::ApplicationVndIpldCar, + "application/vnd.ipld.dag-cbor" => Mime::ApplicationVndIpldDagCbor, + "application/vnd.ipld.dag-json" => Mime::ApplicationVndIpldDagJson, + "application/vnd.ipld.raw" => Mime::ApplicationVndIpldRaw, + "application/vnd.iptc.g2.catalogitem+xml" => Mime::ApplicationVndIptcG2CatalogitemXml, + "application/vnd.iptc.g2.conceptitem+xml" => Mime::ApplicationVndIptcG2ConceptitemXml, + "application/vnd.iptc.g2.knowledgeitem+xml" => Mime::ApplicationVndIptcG2KnowledgeitemXml, + "application/vnd.iptc.g2.newsitem+xml" => Mime::ApplicationVndIptcG2NewsitemXml, + "application/vnd.iptc.g2.newsmessage+xml" => Mime::ApplicationVndIptcG2NewsmessageXml, + "application/vnd.iptc.g2.packageitem+xml" => Mime::ApplicationVndIptcG2PackageitemXml, + "application/vnd.iptc.g2.planningitem+xml" => Mime::ApplicationVndIptcG2PlanningitemXml, + "application/vnd.ipunplugged.rcprofile" => Mime::ApplicationVndIpunpluggedRcprofile, + "application/vnd.irepository.package+xml" => Mime::ApplicationVndIrepositoryPackageXml, + "application/vnd.is-xpr" => Mime::ApplicationVndIsXpr, + "application/vnd.isac.fcs" => Mime::ApplicationVndIsacFcs, + "application/vnd.jam" => Mime::ApplicationVndJam, + "application/vnd.iso11783-10+zip" => Mime::ApplicationVndIso1178310Zip, + "application/vnd.japannet-directory-service" => Mime::ApplicationVndJapannetDirectoryService, + "application/vnd.japannet-jpnstore-wakeup" => Mime::ApplicationVndJapannetJpnstoreWakeup, + "application/vnd.japannet-payment-wakeup" => Mime::ApplicationVndJapannetPaymentWakeup, + "application/vnd.japannet-registration" => Mime::ApplicationVndJapannetRegistration, + "application/vnd.japannet-registration-wakeup" => Mime::ApplicationVndJapannetRegistrationWakeup, + "application/vnd.japannet-setstore-wakeup" => Mime::ApplicationVndJapannetSetstoreWakeup, + "application/vnd.japannet-verification" => Mime::ApplicationVndJapannetVerification, + "application/vnd.japannet-verification-wakeup" => Mime::ApplicationVndJapannetVerificationWakeup, + "application/vnd.jcp.javame.midlet-rms" => Mime::ApplicationVndJcpJavameMidletRms, + "application/vnd.jisp" => Mime::ApplicationVndJisp, + "application/vnd.joost.joda-archive" => Mime::ApplicationVndJoostJodaArchive, + "application/vnd.jsk.isdn-ngn" => Mime::ApplicationVndJskIsdnNgn, + "application/vnd.kahootz" => Mime::ApplicationVndKahootz, + "application/vnd.kde.karbon" => Mime::ApplicationVndKdeKarbon, + "application/vnd.kde.kchart" => Mime::ApplicationVndKdeKchart, + "application/vnd.kde.kformula" => Mime::ApplicationVndKdeKformula, + "application/vnd.kde.kivio" => Mime::ApplicationVndKdeKivio, + "application/vnd.kde.kontour" => Mime::ApplicationVndKdeKontour, + "application/vnd.kde.kpresenter" => Mime::ApplicationVndKdeKpresenter, + "application/vnd.kde.kspread" => Mime::ApplicationVndKdeKspread, + "application/vnd.kde.kword" => Mime::ApplicationVndKdeKword, + "application/vnd.kenameaapp" => Mime::ApplicationVndKenameaapp, + "application/vnd.kidspiration" => Mime::ApplicationVndKidspiration, + "application/vnd.Kinar" => Mime::ApplicationVndKinar, + "application/vnd.koan" => Mime::ApplicationVndKoan, + "application/vnd.kodak-descriptor" => Mime::ApplicationVndKodakDescriptor, + "application/vnd.las" => Mime::ApplicationVndLas, + "application/vnd.las.las+json" => Mime::ApplicationVndLasLasJson, + "application/vnd.las.las+xml" => Mime::ApplicationVndLasLasXml, + "application/vnd.laszip" => Mime::ApplicationVndLaszip, + "application/vnd.leap+json" => Mime::ApplicationVndLeapJson, + "application/vnd.liberty-request+xml" => Mime::ApplicationVndLibertyRequestXml, + "application/vnd.llamagraphics.life-balance.desktop" => Mime::ApplicationVndLlamagraphicsLifeBalanceDesktop, + "application/vnd.llamagraphics.life-balance.exchange+xml" => Mime::ApplicationVndLlamagraphicsLifeBalanceExchangeXml, + "application/vnd.logipipe.circuit+zip" => Mime::ApplicationVndLogipipeCircuitZip, + "application/vnd.loom" => Mime::ApplicationVndLoom, + "application/vnd.lotus-1-2-3" => Mime::ApplicationVndLotus123, + "application/vnd.lotus-approach" => Mime::ApplicationVndLotusApproach, + "application/vnd.lotus-freelance" => Mime::ApplicationVndLotusFreelance, + "application/vnd.lotus-notes" => Mime::ApplicationVndLotusNotes, + "application/vnd.lotus-organizer" => Mime::ApplicationVndLotusOrganizer, + "application/vnd.lotus-screencam" => Mime::ApplicationVndLotusScreencam, + "application/vnd.lotus-wordpro" => Mime::ApplicationVndLotusWordpro, + "application/vnd.macports.portpkg" => Mime::ApplicationVndMacportsPortpkg, + "application/vnd.mapbox-vector-tile" => Mime::ApplicationVndMapboxVectorTile, + "application/vnd.marlin.drm.actiontoken+xml" => Mime::ApplicationVndMarlinDrmActiontokenXml, + "application/vnd.marlin.drm.conftoken+xml" => Mime::ApplicationVndMarlinDrmConftokenXml, + "application/vnd.marlin.drm.license+xml" => Mime::ApplicationVndMarlinDrmLicenseXml, + "application/vnd.marlin.drm.mdcf" => Mime::ApplicationVndMarlinDrmMdcf, + "application/vnd.mason+json" => Mime::ApplicationVndMasonJson, + "application/vnd.maxar.archive.3tz+zip" => Mime::ApplicationVndMaxarArchive3tzZip, + "application/vnd.maxmind.maxmind-db" => Mime::ApplicationVndMaxmindMaxmindDb, + "application/vnd.mcd" => Mime::ApplicationVndMcd, + "application/vnd.mdl" => Mime::ApplicationVndMdl, + "application/vnd.mdl-mbsdf" => Mime::ApplicationVndMdlMbsdf, + "application/vnd.medcalcdata" => Mime::ApplicationVndMedcalcdata, + "application/vnd.mediastation.cdkey" => Mime::ApplicationVndMediastationCdkey, + "application/vnd.medicalholodeck.recordxr" => Mime::ApplicationVndMedicalholodeckRecordxr, + "application/vnd.meridian-slingshot" => Mime::ApplicationVndMeridianSlingshot, + "application/vnd.MFER" => Mime::ApplicationVndMfer, + "application/vnd.mfmp" => Mime::ApplicationVndMfmp, + "application/vnd.micro+json" => Mime::ApplicationVndMicroJson, + "application/vnd.micrografx.flo" => Mime::ApplicationVndMicrografxFlo, + "application/vnd.micrografx.igx" => Mime::ApplicationVndMicrografxIgx, + "application/vnd.microsoft.portable-executable" => Mime::ApplicationVndMicrosoftPortableExecutable, + "application/vnd.microsoft.windows.thumbnail-cache" => Mime::ApplicationVndMicrosoftWindowsThumbnailCache, + "application/vnd.miele+json" => Mime::ApplicationVndMieleJson, + "application/vnd.mif" => Mime::ApplicationVndMif, + "application/vnd.minisoft-hp3000-save" => Mime::ApplicationVndMinisoftHp3000Save, + "application/vnd.mitsubishi.misty-guard.trustweb" => Mime::ApplicationVndMitsubishiMistyGuardTrustweb, + "application/vnd.Mobius.DAF" => Mime::ApplicationVndMobiusDaf, + "application/vnd.Mobius.DIS" => Mime::ApplicationVndMobiusDis, + "application/vnd.Mobius.MBK" => Mime::ApplicationVndMobiusMbk, + "application/vnd.Mobius.MQY" => Mime::ApplicationVndMobiusMqy, + "application/vnd.Mobius.MSL" => Mime::ApplicationVndMobiusMsl, + "application/vnd.Mobius.PLC" => Mime::ApplicationVndMobiusPlc, + "application/vnd.Mobius.TXF" => Mime::ApplicationVndMobiusTxf, + "application/vnd.modl" => Mime::ApplicationVndModl, + "application/vnd.mophun.application" => Mime::ApplicationVndMophunApplication, + "application/vnd.mophun.certificate" => Mime::ApplicationVndMophunCertificate, + "application/vnd.motorola.flexsuite" => Mime::ApplicationVndMotorolaFlexsuite, + "application/vnd.motorola.flexsuite.adsi" => Mime::ApplicationVndMotorolaFlexsuiteAdsi, + "application/vnd.motorola.flexsuite.fis" => Mime::ApplicationVndMotorolaFlexsuiteFis, + "application/vnd.motorola.flexsuite.gotap" => Mime::ApplicationVndMotorolaFlexsuiteGotap, + "application/vnd.motorola.flexsuite.kmr" => Mime::ApplicationVndMotorolaFlexsuiteKmr, + "application/vnd.motorola.flexsuite.ttc" => Mime::ApplicationVndMotorolaFlexsuiteTtc, + "application/vnd.motorola.flexsuite.wem" => Mime::ApplicationVndMotorolaFlexsuiteWem, + "application/vnd.motorola.iprm" => Mime::ApplicationVndMotorolaIprm, + "application/vnd.mozilla.xul+xml" => Mime::ApplicationVndMozillaXulXml, + "application/vnd.ms-artgalry" => Mime::ApplicationVndMsArtgalry, + "application/vnd.ms-asf" => Mime::ApplicationVndMsAsf, + "application/vnd.ms-cab-compressed" => Mime::ApplicationVndMsCabCompressed, + "application/vnd.ms-3mfdocument" => Mime::ApplicationVndMs3mfdocument, + "application/vnd.ms-excel" => Mime::ApplicationVndMsExcel, + "application/vnd.ms-excel.addin.macroEnabled.12" => Mime::ApplicationVndMsExcelAddinMacroenabled12, + "application/vnd.ms-excel.sheet.binary.macroEnabled.12" => Mime::ApplicationVndMsExcelSheetBinaryMacroenabled12, + "application/vnd.ms-excel.sheet.macroEnabled.12" => Mime::ApplicationVndMsExcelSheetMacroenabled12, + "application/vnd.ms-excel.template.macroEnabled.12" => Mime::ApplicationVndMsExcelTemplateMacroenabled12, + "application/vnd.ms-fontobject" => Mime::ApplicationVndMsFontobject, + "application/vnd.ms-htmlhelp" => Mime::ApplicationVndMsHtmlhelp, + "application/vnd.ms-ims" => Mime::ApplicationVndMsIms, + "application/vnd.ms-lrm" => Mime::ApplicationVndMsLrm, + "application/vnd.ms-office.activeX+xml" => Mime::ApplicationVndMsOfficeActivexXml, + "application/vnd.ms-officetheme" => Mime::ApplicationVndMsOfficetheme, + "application/vnd.ms-playready.initiator+xml" => Mime::ApplicationVndMsPlayreadyInitiatorXml, + "application/vnd.ms-powerpoint" => Mime::ApplicationVndMsPowerpoint, + "application/vnd.ms-powerpoint.addin.macroEnabled.12" => Mime::ApplicationVndMsPowerpointAddinMacroenabled12, + "application/vnd.ms-powerpoint.presentation.macroEnabled.12" => Mime::ApplicationVndMsPowerpointPresentationMacroenabled12, + "application/vnd.ms-powerpoint.slide.macroEnabled.12" => Mime::ApplicationVndMsPowerpointSlideMacroenabled12, + "application/vnd.ms-powerpoint.slideshow.macroEnabled.12" => Mime::ApplicationVndMsPowerpointSlideshowMacroenabled12, + "application/vnd.ms-powerpoint.template.macroEnabled.12" => Mime::ApplicationVndMsPowerpointTemplateMacroenabled12, + "application/vnd.ms-PrintDeviceCapabilities+xml" => Mime::ApplicationVndMsPrintdevicecapabilitiesXml, + "application/vnd.ms-PrintSchemaTicket+xml" => Mime::ApplicationVndMsPrintschematicketXml, + "application/vnd.ms-project" => Mime::ApplicationVndMsProject, + "application/vnd.ms-tnef" => Mime::ApplicationVndMsTnef, + "application/vnd.ms-windows.devicepairing" => Mime::ApplicationVndMsWindowsDevicepairing, + "application/vnd.ms-windows.nwprinting.oob" => Mime::ApplicationVndMsWindowsNwprintingOob, + "application/vnd.ms-windows.printerpairing" => Mime::ApplicationVndMsWindowsPrinterpairing, + "application/vnd.ms-windows.wsd.oob" => Mime::ApplicationVndMsWindowsWsdOob, + "application/vnd.ms-wmdrm.lic-chlg-req" => Mime::ApplicationVndMsWmdrmLicChlgReq, + "application/vnd.ms-wmdrm.lic-resp" => Mime::ApplicationVndMsWmdrmLicResp, + "application/vnd.ms-wmdrm.meter-chlg-req" => Mime::ApplicationVndMsWmdrmMeterChlgReq, + "application/vnd.ms-wmdrm.meter-resp" => Mime::ApplicationVndMsWmdrmMeterResp, + "application/vnd.ms-word.document.macroEnabled.12" => Mime::ApplicationVndMsWordDocumentMacroenabled12, + "application/vnd.ms-word.template.macroEnabled.12" => Mime::ApplicationVndMsWordTemplateMacroenabled12, + "application/vnd.ms-works" => Mime::ApplicationVndMsWorks, + "application/vnd.ms-wpl" => Mime::ApplicationVndMsWpl, + "application/vnd.ms-xpsdocument" => Mime::ApplicationVndMsXpsdocument, + "application/vnd.msa-disk-image" => Mime::ApplicationVndMsaDiskImage, + "application/vnd.mseq" => Mime::ApplicationVndMseq, + "application/vnd.msign" => Mime::ApplicationVndMsign, + "application/vnd.multiad.creator" => Mime::ApplicationVndMultiadCreator, + "application/vnd.multiad.creator.cif" => Mime::ApplicationVndMultiadCreatorCif, + "application/vnd.musician" => Mime::ApplicationVndMusician, + "application/vnd.music-niff" => Mime::ApplicationVndMusicNiff, + "application/vnd.muvee.style" => Mime::ApplicationVndMuveeStyle, + "application/vnd.mynfc" => Mime::ApplicationVndMynfc, + "application/vnd.nacamar.ybrid+json" => Mime::ApplicationVndNacamarYbridJson, + "application/vnd.ncd.control" => Mime::ApplicationVndNcdControl, + "application/vnd.ncd.reference" => Mime::ApplicationVndNcdReference, + "application/vnd.nearst.inv+json" => Mime::ApplicationVndNearstInvJson, + "application/vnd.nebumind.line" => Mime::ApplicationVndNebumindLine, + "application/vnd.nervana" => Mime::ApplicationVndNervana, + "application/vnd.netfpx" => Mime::ApplicationVndNetfpx, + "application/vnd.neurolanguage.nlu" => Mime::ApplicationVndNeurolanguageNlu, + "application/vnd.nimn" => Mime::ApplicationVndNimn, + "application/vnd.nintendo.snes.rom" => Mime::ApplicationVndNintendoSnesRom, + "application/vnd.nintendo.nitro.rom" => Mime::ApplicationVndNintendoNitroRom, + "application/vnd.nitf" => Mime::ApplicationVndNitf, + "application/vnd.noblenet-directory" => Mime::ApplicationVndNoblenetDirectory, + "application/vnd.noblenet-sealer" => Mime::ApplicationVndNoblenetSealer, + "application/vnd.noblenet-web" => Mime::ApplicationVndNoblenetWeb, + "application/vnd.nokia.catalogs" => Mime::ApplicationVndNokiaCatalogs, + "application/vnd.nokia.conml+wbxml" => Mime::ApplicationVndNokiaConmlWbxml, + "application/vnd.nokia.conml+xml" => Mime::ApplicationVndNokiaConmlXml, + "application/vnd.nokia.iptv.config+xml" => Mime::ApplicationVndNokiaIptvConfigXml, + "application/vnd.nokia.iSDS-radio-presets" => Mime::ApplicationVndNokiaIsdsRadioPresets, + "application/vnd.nokia.landmark+wbxml" => Mime::ApplicationVndNokiaLandmarkWbxml, + "application/vnd.nokia.landmark+xml" => Mime::ApplicationVndNokiaLandmarkXml, + "application/vnd.nokia.landmarkcollection+xml" => Mime::ApplicationVndNokiaLandmarkcollectionXml, + "application/vnd.nokia.ncd" => Mime::ApplicationVndNokiaNcd, + "application/vnd.nokia.n-gage.ac+xml" => Mime::ApplicationVndNokiaNGageAcXml, + "application/vnd.nokia.n-gage.data" => Mime::ApplicationVndNokiaNGageData, + "application/vnd.nokia.pcd+wbxml" => Mime::ApplicationVndNokiaPcdWbxml, + "application/vnd.nokia.pcd+xml" => Mime::ApplicationVndNokiaPcdXml, + "application/vnd.nokia.radio-preset" => Mime::ApplicationVndNokiaRadioPreset, + "application/vnd.nokia.radio-presets" => Mime::ApplicationVndNokiaRadioPresets, + "application/vnd.novadigm.EDM" => Mime::ApplicationVndNovadigmEdm, + "application/vnd.novadigm.EDX" => Mime::ApplicationVndNovadigmEdx, + "application/vnd.novadigm.EXT" => Mime::ApplicationVndNovadigmExt, + "application/vnd.ntt-local.content-share" => Mime::ApplicationVndNttLocalContentShare, + "application/vnd.ntt-local.file-transfer" => Mime::ApplicationVndNttLocalFileTransfer, + "application/vnd.ntt-local.ogw_remote-access" => Mime::ApplicationVndNttLocalOgwRemoteAccess, + "application/vnd.ntt-local.sip-ta_remote" => Mime::ApplicationVndNttLocalSipTaRemote, + "application/vnd.ntt-local.sip-ta_tcp_stream" => Mime::ApplicationVndNttLocalSipTaTcpStream, + "application/vnd.oasis.opendocument.base" => Mime::ApplicationVndOasisOpendocumentBase, + "application/vnd.oasis.opendocument.chart" => Mime::ApplicationVndOasisOpendocumentChart, + "application/vnd.oasis.opendocument.chart-template" => Mime::ApplicationVndOasisOpendocumentChartTemplate, + "application/vnd.oasis.opendocument.formula" => Mime::ApplicationVndOasisOpendocumentFormula, + "application/vnd.oasis.opendocument.formula-template" => Mime::ApplicationVndOasisOpendocumentFormulaTemplate, + "application/vnd.oasis.opendocument.graphics" => Mime::ApplicationVndOasisOpendocumentGraphics, + "application/vnd.oasis.opendocument.graphics-template" => Mime::ApplicationVndOasisOpendocumentGraphicsTemplate, + "application/vnd.oasis.opendocument.image" => Mime::ApplicationVndOasisOpendocumentImage, + "application/vnd.oasis.opendocument.image-template" => Mime::ApplicationVndOasisOpendocumentImageTemplate, + "application/vnd.oasis.opendocument.presentation" => Mime::ApplicationVndOasisOpendocumentPresentation, + "application/vnd.oasis.opendocument.presentation-template" => Mime::ApplicationVndOasisOpendocumentPresentationTemplate, + "application/vnd.oasis.opendocument.spreadsheet" => Mime::ApplicationVndOasisOpendocumentSpreadsheet, + "application/vnd.oasis.opendocument.spreadsheet-template" => Mime::ApplicationVndOasisOpendocumentSpreadsheetTemplate, + "application/vnd.oasis.opendocument.text" => Mime::ApplicationVndOasisOpendocumentText, + "application/vnd.oasis.opendocument.text-master" => Mime::ApplicationVndOasisOpendocumentTextMaster, + "application/vnd.oasis.opendocument.text-master-template" => Mime::ApplicationVndOasisOpendocumentTextMasterTemplate, + "application/vnd.oasis.opendocument.text-template" => Mime::ApplicationVndOasisOpendocumentTextTemplate, + "application/vnd.oasis.opendocument.text-web" => Mime::ApplicationVndOasisOpendocumentTextWeb, + "application/vnd.obn" => Mime::ApplicationVndObn, + "application/vnd.ocf+cbor" => Mime::ApplicationVndOcfCbor, + "application/vnd.oci.image.manifest.v1+json" => Mime::ApplicationVndOciImageManifestV1Json, + "application/vnd.oftn.l10n+json" => Mime::ApplicationVndOftnL10nJson, + "application/vnd.oipf.contentaccessdownload+xml" => Mime::ApplicationVndOipfContentaccessdownloadXml, + "application/vnd.oipf.contentaccessstreaming+xml" => Mime::ApplicationVndOipfContentaccessstreamingXml, + "application/vnd.oipf.cspg-hexbinary" => Mime::ApplicationVndOipfCspgHexbinary, + "application/vnd.oipf.dae.svg+xml" => Mime::ApplicationVndOipfDaeSvgXml, + "application/vnd.oipf.dae.xhtml+xml" => Mime::ApplicationVndOipfDaeXhtmlXml, + "application/vnd.oipf.mippvcontrolmessage+xml" => Mime::ApplicationVndOipfMippvcontrolmessageXml, + "application/vnd.oipf.pae.gem" => Mime::ApplicationVndOipfPaeGem, + "application/vnd.oipf.spdiscovery+xml" => Mime::ApplicationVndOipfSpdiscoveryXml, + "application/vnd.oipf.spdlist+xml" => Mime::ApplicationVndOipfSpdlistXml, + "application/vnd.oipf.ueprofile+xml" => Mime::ApplicationVndOipfUeprofileXml, + "application/vnd.oipf.userprofile+xml" => Mime::ApplicationVndOipfUserprofileXml, + "application/vnd.olpc-sugar" => Mime::ApplicationVndOlpcSugar, + "application/vnd.oma.bcast.associated-procedure-parameter+xml" => Mime::ApplicationVndOmaBcastAssociatedProcedureParameterXml, + "application/vnd.oma.bcast.drm-trigger+xml" => Mime::ApplicationVndOmaBcastDrmTriggerXml, + "application/vnd.oma.bcast.imd+xml" => Mime::ApplicationVndOmaBcastImdXml, + "application/vnd.oma.bcast.ltkm" => Mime::ApplicationVndOmaBcastLtkm, + "application/vnd.oma.bcast.notification+xml" => Mime::ApplicationVndOmaBcastNotificationXml, + "application/vnd.oma.bcast.provisioningtrigger" => Mime::ApplicationVndOmaBcastProvisioningtrigger, + "application/vnd.oma.bcast.sgboot" => Mime::ApplicationVndOmaBcastSgboot, + "application/vnd.oma.bcast.sgdd+xml" => Mime::ApplicationVndOmaBcastSgddXml, + "application/vnd.oma.bcast.sgdu" => Mime::ApplicationVndOmaBcastSgdu, + "application/vnd.oma.bcast.simple-symbol-container" => Mime::ApplicationVndOmaBcastSimpleSymbolContainer, + "application/vnd.oma.bcast.smartcard-trigger+xml" => Mime::ApplicationVndOmaBcastSmartcardTriggerXml, + "application/vnd.oma.bcast.sprov+xml" => Mime::ApplicationVndOmaBcastSprovXml, + "application/vnd.oma.bcast.stkm" => Mime::ApplicationVndOmaBcastStkm, + "application/vnd.oma.cab-address-book+xml" => Mime::ApplicationVndOmaCabAddressBookXml, + "application/vnd.oma.cab-feature-handler+xml" => Mime::ApplicationVndOmaCabFeatureHandlerXml, + "application/vnd.oma.cab-pcc+xml" => Mime::ApplicationVndOmaCabPccXml, + "application/vnd.oma.cab-subs-invite+xml" => Mime::ApplicationVndOmaCabSubsInviteXml, + "application/vnd.oma.cab-user-prefs+xml" => Mime::ApplicationVndOmaCabUserPrefsXml, + "application/vnd.oma.dcd" => Mime::ApplicationVndOmaDcd, + "application/vnd.oma.dcdc" => Mime::ApplicationVndOmaDcdc, + "application/vnd.oma.dd2+xml" => Mime::ApplicationVndOmaDd2Xml, + "application/vnd.oma.drm.risd+xml" => Mime::ApplicationVndOmaDrmRisdXml, + "application/vnd.oma.group-usage-list+xml" => Mime::ApplicationVndOmaGroupUsageListXml, + "application/vnd.oma.lwm2m+cbor" => Mime::ApplicationVndOmaLwm2mCbor, + "application/vnd.oma.lwm2m+json" => Mime::ApplicationVndOmaLwm2mJson, + "application/vnd.oma.lwm2m+tlv" => Mime::ApplicationVndOmaLwm2mTlv, + "application/vnd.oma.pal+xml" => Mime::ApplicationVndOmaPalXml, + "application/vnd.oma.poc.detailed-progress-report+xml" => Mime::ApplicationVndOmaPocDetailedProgressReportXml, + "application/vnd.oma.poc.final-report+xml" => Mime::ApplicationVndOmaPocFinalReportXml, + "application/vnd.oma.poc.groups+xml" => Mime::ApplicationVndOmaPocGroupsXml, + "application/vnd.oma.poc.invocation-descriptor+xml" => Mime::ApplicationVndOmaPocInvocationDescriptorXml, + "application/vnd.oma.poc.optimized-progress-report+xml" => Mime::ApplicationVndOmaPocOptimizedProgressReportXml, + "application/vnd.oma.push" => Mime::ApplicationVndOmaPush, + "application/vnd.oma.scidm.messages+xml" => Mime::ApplicationVndOmaScidmMessagesXml, + "application/vnd.oma.xcap-directory+xml" => Mime::ApplicationVndOmaXcapDirectoryXml, + "application/vnd.omads-email+xml" => Mime::ApplicationVndOmadsEmailXml, + "application/vnd.omads-file+xml" => Mime::ApplicationVndOmadsFileXml, + "application/vnd.omads-folder+xml" => Mime::ApplicationVndOmadsFolderXml, + "application/vnd.omaloc-supl-init" => Mime::ApplicationVndOmalocSuplInit, + "application/vnd.oma-scws-config" => Mime::ApplicationVndOmaScwsConfig, + "application/vnd.oma-scws-http-request" => Mime::ApplicationVndOmaScwsHttpRequest, + "application/vnd.oma-scws-http-response" => Mime::ApplicationVndOmaScwsHttpResponse, + "application/vnd.onepager" => Mime::ApplicationVndOnepager, + "application/vnd.onepagertamp" => Mime::ApplicationVndOnepagertamp, + "application/vnd.onepagertamx" => Mime::ApplicationVndOnepagertamx, + "application/vnd.onepagertat" => Mime::ApplicationVndOnepagertat, + "application/vnd.onepagertatp" => Mime::ApplicationVndOnepagertatp, + "application/vnd.onepagertatx" => Mime::ApplicationVndOnepagertatx, + "application/vnd.onvif.metadata" => Mime::ApplicationVndOnvifMetadata, + "application/vnd.openblox.game-binary" => Mime::ApplicationVndOpenbloxGameBinary, + "application/vnd.openblox.game+xml" => Mime::ApplicationVndOpenbloxGameXml, + "application/vnd.openeye.oeb" => Mime::ApplicationVndOpeneyeOeb, + "application/vnd.openstreetmap.data+xml" => Mime::ApplicationVndOpenstreetmapDataXml, + "application/vnd.opentimestamps.ots" => Mime::ApplicationVndOpentimestampsOts, + "application/vnd.openxmlformats-officedocument.custom-properties+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentCustomPropertiesXml, + "application/vnd.openxmlformats-officedocument.customXmlProperties+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentCustomxmlpropertiesXml, + "application/vnd.openxmlformats-officedocument.drawing+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingXml, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlChartXml, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlChartshapesXml, + "application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramcolorsXml, + "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramdataXml, + "application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramlayoutXml, + "application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramstyleXml, + "application/vnd.openxmlformats-officedocument.extended-properties+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentExtendedPropertiesXml, + "application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlCommentauthorsXml, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlCommentsXml, + "application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlHandoutmasterXml, + "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlNotesmasterXml, + "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlNotesslideXml, + "application/vnd.openxmlformats-officedocument.presentationml.presentation" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPresentation, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPresentationMainXml, + "application/vnd.openxmlformats-officedocument.presentationml.presProps+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPrespropsXml, + "application/vnd.openxmlformats-officedocument.presentationml.slide" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlide, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideXml, + "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlidelayoutXml, + "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlidemasterXml, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideshow, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideshowMainXml, + "application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideupdateinfoXml, + "application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTablestylesXml, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTagsXml, + "application/vnd.openxmlformats-officedocument.presentationml.template" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTemplate, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTemplateMainXml, + "application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlViewpropsXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlCalcchainXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlChartsheetXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlCommentsXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlConnectionsXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlDialogsheetXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlExternallinkXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivotcachedefinitionXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivotcacherecordsXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivottableXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlQuerytableXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlRevisionheadersXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlRevisionlogXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSharedstringsXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheetMainXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheetmetadataXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlStylesXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTableXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTablesinglecellsXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTemplate, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTemplateMainXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlUsernamesXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlVolatiledependenciesXml, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlWorksheetXml, + "application/vnd.openxmlformats-officedocument.theme+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentThemeXml, + "application/vnd.openxmlformats-officedocument.themeOverride+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentThemeoverrideXml, + "application/vnd.openxmlformats-officedocument.vmlDrawing" => Mime::ApplicationVndOpenxmlformatsOfficedocumentVmldrawing, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlCommentsXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocument, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocumentGlossaryXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocumentMainXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlEndnotesXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFonttableXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFooterXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFootnotesXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlNumberingXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlSettingsXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlStylesXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlTemplate, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlTemplateMainXml, + "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml" => Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlWebsettingsXml, + "application/vnd.openxmlformats-package.core-properties+xml" => Mime::ApplicationVndOpenxmlformatsPackageCorePropertiesXml, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml" => Mime::ApplicationVndOpenxmlformatsPackageDigitalSignatureXmlsignatureXml, + "application/vnd.openxmlformats-package.relationships+xml" => Mime::ApplicationVndOpenxmlformatsPackageRelationshipsXml, + "application/vnd.oracle.resource+json" => Mime::ApplicationVndOracleResourceJson, + "application/vnd.orange.indata" => Mime::ApplicationVndOrangeIndata, + "application/vnd.osa.netdeploy" => Mime::ApplicationVndOsaNetdeploy, + "application/vnd.osgeo.mapguide.package" => Mime::ApplicationVndOsgeoMapguidePackage, + "application/vnd.osgi.bundle" => Mime::ApplicationVndOsgiBundle, + "application/vnd.osgi.dp" => Mime::ApplicationVndOsgiDp, + "application/vnd.osgi.subsystem" => Mime::ApplicationVndOsgiSubsystem, + "application/vnd.otps.ct-kip+xml" => Mime::ApplicationVndOtpsCtKipXml, + "application/vnd.oxli.countgraph" => Mime::ApplicationVndOxliCountgraph, + "application/vnd.pagerduty+json" => Mime::ApplicationVndPagerdutyJson, + "application/vnd.palm" => Mime::ApplicationVndPalm, + "application/vnd.panoply" => Mime::ApplicationVndPanoply, + "application/vnd.paos.xml" => Mime::ApplicationVndPaosXml, + "application/vnd.patentdive" => Mime::ApplicationVndPatentdive, + "application/vnd.patientecommsdoc" => Mime::ApplicationVndPatientecommsdoc, + "application/vnd.pawaafile" => Mime::ApplicationVndPawaafile, + "application/vnd.pcos" => Mime::ApplicationVndPcos, + "application/vnd.pg.format" => Mime::ApplicationVndPgFormat, + "application/vnd.pg.osasli" => Mime::ApplicationVndPgOsasli, + "application/vnd.piaccess.application-licence" => Mime::ApplicationVndPiaccessApplicationLicence, + "application/vnd.picsel" => Mime::ApplicationVndPicsel, + "application/vnd.pmi.widget" => Mime::ApplicationVndPmiWidget, + "application/vnd.poc.group-advertisement+xml" => Mime::ApplicationVndPocGroupAdvertisementXml, + "application/vnd.pocketlearn" => Mime::ApplicationVndPocketlearn, + "application/vnd.powerbuilder6" => Mime::ApplicationVndPowerbuilder6, + "application/vnd.powerbuilder6-s" => Mime::ApplicationVndPowerbuilder6S, + "application/vnd.powerbuilder7" => Mime::ApplicationVndPowerbuilder7, + "application/vnd.powerbuilder75" => Mime::ApplicationVndPowerbuilder75, + "application/vnd.powerbuilder75-s" => Mime::ApplicationVndPowerbuilder75S, + "application/vnd.powerbuilder7-s" => Mime::ApplicationVndPowerbuilder7S, + "application/vnd.preminet" => Mime::ApplicationVndPreminet, + "application/vnd.previewsystems.box" => Mime::ApplicationVndPreviewsystemsBox, + "application/vnd.proteus.magazine" => Mime::ApplicationVndProteusMagazine, + "application/vnd.psfs" => Mime::ApplicationVndPsfs, + "application/vnd.pt.mundusmundi" => Mime::ApplicationVndPtMundusmundi, + "application/vnd.publishare-delta-tree" => Mime::ApplicationVndPublishareDeltaTree, + "application/vnd.pvi.ptid1" => Mime::ApplicationVndPviPtid1, + "application/vnd.pwg-multiplexed" => Mime::ApplicationVndPwgMultiplexed, + "application/vnd.pwg-xhtml-print+xml" => Mime::ApplicationVndPwgXhtmlPrintXml, + "application/vnd.qualcomm.brew-app-res" => Mime::ApplicationVndQualcommBrewAppRes, + "application/vnd.quarantainenet" => Mime::ApplicationVndQuarantainenet, + "application/vnd.Quark.QuarkXPress" => Mime::ApplicationVndQuarkQuarkxpress, + "application/vnd.quobject-quoxdocument" => Mime::ApplicationVndQuobjectQuoxdocument, + "application/vnd.radisys.moml+xml" => Mime::ApplicationVndRadisysMomlXml, + "application/vnd.radisys.msml-audit-conf+xml" => Mime::ApplicationVndRadisysMsmlAuditConfXml, + "application/vnd.radisys.msml-audit-conn+xml" => Mime::ApplicationVndRadisysMsmlAuditConnXml, + "application/vnd.radisys.msml-audit-dialog+xml" => Mime::ApplicationVndRadisysMsmlAuditDialogXml, + "application/vnd.radisys.msml-audit-stream+xml" => Mime::ApplicationVndRadisysMsmlAuditStreamXml, + "application/vnd.radisys.msml-audit+xml" => Mime::ApplicationVndRadisysMsmlAuditXml, + "application/vnd.radisys.msml-conf+xml" => Mime::ApplicationVndRadisysMsmlConfXml, + "application/vnd.radisys.msml-dialog-base+xml" => Mime::ApplicationVndRadisysMsmlDialogBaseXml, + "application/vnd.radisys.msml-dialog-fax-detect+xml" => Mime::ApplicationVndRadisysMsmlDialogFaxDetectXml, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml" => Mime::ApplicationVndRadisysMsmlDialogFaxSendrecvXml, + "application/vnd.radisys.msml-dialog-group+xml" => Mime::ApplicationVndRadisysMsmlDialogGroupXml, + "application/vnd.radisys.msml-dialog-speech+xml" => Mime::ApplicationVndRadisysMsmlDialogSpeechXml, + "application/vnd.radisys.msml-dialog-transform+xml" => Mime::ApplicationVndRadisysMsmlDialogTransformXml, + "application/vnd.radisys.msml-dialog+xml" => Mime::ApplicationVndRadisysMsmlDialogXml, + "application/vnd.radisys.msml+xml" => Mime::ApplicationVndRadisysMsmlXml, + "application/vnd.rainstor.data" => Mime::ApplicationVndRainstorData, + "application/vnd.rapid" => Mime::ApplicationVndRapid, + "application/vnd.rar" => Mime::ApplicationVndRar, + "application/vnd.realvnc.bed" => Mime::ApplicationVndRealvncBed, + "application/vnd.recordare.musicxml" => Mime::ApplicationVndRecordareMusicxml, + "application/vnd.recordare.musicxml+xml" => Mime::ApplicationVndRecordareMusicxmlXml, + "application/vnd.RenLearn.rlprint" => Mime::ApplicationVndRenlearnRlprint, + "application/vnd.resilient.logic" => Mime::ApplicationVndResilientLogic, + "application/vnd.restful+json" => Mime::ApplicationVndRestfulJson, + "application/vnd.rig.cryptonote" => Mime::ApplicationVndRigCryptonote, + "application/vnd.route66.link66+xml" => Mime::ApplicationVndRoute66Link66Xml, + "application/vnd.rs-274x" => Mime::ApplicationVndRs274x, + "application/vnd.ruckus.download" => Mime::ApplicationVndRuckusDownload, + "application/vnd.s3sms" => Mime::ApplicationVndS3sms, + "application/vnd.sailingtracker.track" => Mime::ApplicationVndSailingtrackerTrack, + "application/vnd.sar" => Mime::ApplicationVndSar, + "application/vnd.sbm.cid" => Mime::ApplicationVndSbmCid, + "application/vnd.sbm.mid2" => Mime::ApplicationVndSbmMid2, + "application/vnd.scribus" => Mime::ApplicationVndScribus, + "application/vnd.sealed.3df" => Mime::ApplicationVndSealed3df, + "application/vnd.sealed.csf" => Mime::ApplicationVndSealedCsf, + "application/vnd.sealed.doc" => Mime::ApplicationVndSealedDoc, + "application/vnd.sealed.eml" => Mime::ApplicationVndSealedEml, + "application/vnd.sealed.mht" => Mime::ApplicationVndSealedMht, + "application/vnd.sealed.net" => Mime::ApplicationVndSealedNet, + "application/vnd.sealed.ppt" => Mime::ApplicationVndSealedPpt, + "application/vnd.sealed.tiff" => Mime::ApplicationVndSealedTiff, + "application/vnd.sealed.xls" => Mime::ApplicationVndSealedXls, + "application/vnd.sealedmedia.softseal.html" => Mime::ApplicationVndSealedmediaSoftsealHtml, + "application/vnd.sealedmedia.softseal.pdf" => Mime::ApplicationVndSealedmediaSoftsealPdf, + "application/vnd.seemail" => Mime::ApplicationVndSeemail, + "application/vnd.seis+json" => Mime::ApplicationVndSeisJson, + "application/vnd.sema" => Mime::ApplicationVndSema, + "application/vnd.semd" => Mime::ApplicationVndSemd, + "application/vnd.semf" => Mime::ApplicationVndSemf, + "application/vnd.shade-save-file" => Mime::ApplicationVndShadeSaveFile, + "application/vnd.shana.informed.formdata" => Mime::ApplicationVndShanaInformedFormdata, + "application/vnd.shana.informed.formtemplate" => Mime::ApplicationVndShanaInformedFormtemplate, + "application/vnd.shana.informed.interchange" => Mime::ApplicationVndShanaInformedInterchange, + "application/vnd.shana.informed.package" => Mime::ApplicationVndShanaInformedPackage, + "application/vnd.shootproof+json" => Mime::ApplicationVndShootproofJson, + "application/vnd.shopkick+json" => Mime::ApplicationVndShopkickJson, + "application/vnd.shp" => Mime::ApplicationVndShp, + "application/vnd.shx" => Mime::ApplicationVndShx, + "application/vnd.sigrok.session" => Mime::ApplicationVndSigrokSession, + "application/vnd.SimTech-MindMapper" => Mime::ApplicationVndSimtechMindmapper, + "application/vnd.siren+json" => Mime::ApplicationVndSirenJson, + "application/vnd.smaf" => Mime::ApplicationVndSmaf, + "application/vnd.smart.notebook" => Mime::ApplicationVndSmartNotebook, + "application/vnd.smart.teacher" => Mime::ApplicationVndSmartTeacher, + "application/vnd.smintio.portals.archive" => Mime::ApplicationVndSmintioPortalsArchive, + "application/vnd.snesdev-page-table" => Mime::ApplicationVndSnesdevPageTable, + "application/vnd.software602.filler.form+xml" => Mime::ApplicationVndSoftware602FillerFormXml, + "application/vnd.software602.filler.form-xml-zip" => Mime::ApplicationVndSoftware602FillerFormXmlZip, + "application/vnd.solent.sdkm+xml" => Mime::ApplicationVndSolentSdkmXml, + "application/vnd.spotfire.dxp" => Mime::ApplicationVndSpotfireDxp, + "application/vnd.spotfire.sfs" => Mime::ApplicationVndSpotfireSfs, + "application/vnd.sqlite3" => Mime::ApplicationVndSqlite3, + "application/vnd.sss-cod" => Mime::ApplicationVndSssCod, + "application/vnd.sss-dtf" => Mime::ApplicationVndSssDtf, + "application/vnd.sss-ntf" => Mime::ApplicationVndSssNtf, + "application/vnd.stepmania.package" => Mime::ApplicationVndStepmaniaPackage, + "application/vnd.stepmania.stepchart" => Mime::ApplicationVndStepmaniaStepchart, + "application/vnd.street-stream" => Mime::ApplicationVndStreetStream, + "application/vnd.sun.wadl+xml" => Mime::ApplicationVndSunWadlXml, + "application/vnd.sus-calendar" => Mime::ApplicationVndSusCalendar, + "application/vnd.svd" => Mime::ApplicationVndSvd, + "application/vnd.swiftview-ics" => Mime::ApplicationVndSwiftviewIcs, + "application/vnd.sybyl.mol2" => Mime::ApplicationVndSybylMol2, + "application/vnd.sycle+xml" => Mime::ApplicationVndSycleXml, + "application/vnd.syft+json" => Mime::ApplicationVndSyftJson, + "application/vnd.syncml.dm.notification" => Mime::ApplicationVndSyncmlDmNotification, + "application/vnd.syncml.dmddf+xml" => Mime::ApplicationVndSyncmlDmddfXml, + "application/vnd.syncml.dmtnds+wbxml" => Mime::ApplicationVndSyncmlDmtndsWbxml, + "application/vnd.syncml.dmtnds+xml" => Mime::ApplicationVndSyncmlDmtndsXml, + "application/vnd.syncml.dmddf+wbxml" => Mime::ApplicationVndSyncmlDmddfWbxml, + "application/vnd.syncml.dm+wbxml" => Mime::ApplicationVndSyncmlDmWbxml, + "application/vnd.syncml.dm+xml" => Mime::ApplicationVndSyncmlDmXml, + "application/vnd.syncml.ds.notification" => Mime::ApplicationVndSyncmlDsNotification, + "application/vnd.syncml+xml" => Mime::ApplicationVndSyncmlXml, + "application/vnd.tableschema+json" => Mime::ApplicationVndTableschemaJson, + "application/vnd.tao.intent-module-archive" => Mime::ApplicationVndTaoIntentModuleArchive, + "application/vnd.tcpdump.pcap" => Mime::ApplicationVndTcpdumpPcap, + "application/vnd.think-cell.ppttc+json" => Mime::ApplicationVndThinkCellPpttcJson, + "application/vnd.tml" => Mime::ApplicationVndTml, + "application/vnd.tmd.mediaflex.api+xml" => Mime::ApplicationVndTmdMediaflexApiXml, + "application/vnd.tmobile-livetv" => Mime::ApplicationVndTmobileLivetv, + "application/vnd.tri.onesource" => Mime::ApplicationVndTriOnesource, + "application/vnd.trid.tpt" => Mime::ApplicationVndTridTpt, + "application/vnd.triscape.mxs" => Mime::ApplicationVndTriscapeMxs, + "application/vnd.trueapp" => Mime::ApplicationVndTrueapp, + "application/vnd.truedoc" => Mime::ApplicationVndTruedoc, + "application/vnd.ubisoft.webplayer" => Mime::ApplicationVndUbisoftWebplayer, + "application/vnd.ufdl" => Mime::ApplicationVndUfdl, + "application/vnd.uiq.theme" => Mime::ApplicationVndUiqTheme, + "application/vnd.umajin" => Mime::ApplicationVndUmajin, + "application/vnd.unity" => Mime::ApplicationVndUnity, + "application/vnd.uoml+xml" => Mime::ApplicationVndUomlXml, + "application/vnd.uplanet.alert" => Mime::ApplicationVndUplanetAlert, + "application/vnd.uplanet.alert-wbxml" => Mime::ApplicationVndUplanetAlertWbxml, + "application/vnd.uplanet.bearer-choice" => Mime::ApplicationVndUplanetBearerChoice, + "application/vnd.uplanet.bearer-choice-wbxml" => Mime::ApplicationVndUplanetBearerChoiceWbxml, + "application/vnd.uplanet.cacheop" => Mime::ApplicationVndUplanetCacheop, + "application/vnd.uplanet.cacheop-wbxml" => Mime::ApplicationVndUplanetCacheopWbxml, + "application/vnd.uplanet.channel" => Mime::ApplicationVndUplanetChannel, + "application/vnd.uplanet.channel-wbxml" => Mime::ApplicationVndUplanetChannelWbxml, + "application/vnd.uplanet.list" => Mime::ApplicationVndUplanetList, + "application/vnd.uplanet.listcmd" => Mime::ApplicationVndUplanetListcmd, + "application/vnd.uplanet.listcmd-wbxml" => Mime::ApplicationVndUplanetListcmdWbxml, + "application/vnd.uplanet.list-wbxml" => Mime::ApplicationVndUplanetListWbxml, + "application/vnd.uri-map" => Mime::ApplicationVndUriMap, + "application/vnd.uplanet.signal" => Mime::ApplicationVndUplanetSignal, + "application/vnd.valve.source.material" => Mime::ApplicationVndValveSourceMaterial, + "application/vnd.vcx" => Mime::ApplicationVndVcx, + "application/vnd.vd-study" => Mime::ApplicationVndVdStudy, + "application/vnd.vectorworks" => Mime::ApplicationVndVectorworks, + "application/vnd.vel+json" => Mime::ApplicationVndVelJson, + "application/vnd.verimatrix.vcas" => Mime::ApplicationVndVerimatrixVcas, + "application/vnd.veritone.aion+json" => Mime::ApplicationVndVeritoneAionJson, + "application/vnd.veryant.thin" => Mime::ApplicationVndVeryantThin, + "application/vnd.ves.encrypted" => Mime::ApplicationVndVesEncrypted, + "application/vnd.vidsoft.vidconference" => Mime::ApplicationVndVidsoftVidconference, + "application/vnd.visio" => Mime::ApplicationVndVisio, + "application/vnd.visionary" => Mime::ApplicationVndVisionary, + "application/vnd.vividence.scriptfile" => Mime::ApplicationVndVividenceScriptfile, + "application/vnd.vsf" => Mime::ApplicationVndVsf, + "application/vnd.wap.sic" => Mime::ApplicationVndWapSic, + "application/vnd.wap.slc" => Mime::ApplicationVndWapSlc, + "application/vnd.wap.wbxml" => Mime::ApplicationVndWapWbxml, + "application/vnd.wap.wmlc" => Mime::ApplicationVndWapWmlc, + "application/vnd.wap.wmlscriptc" => Mime::ApplicationVndWapWmlscriptc, + "application/vnd.wasmflow.wafl" => Mime::ApplicationVndWasmflowWafl, + "application/vnd.webturbo" => Mime::ApplicationVndWebturbo, + "application/vnd.wfa.dpp" => Mime::ApplicationVndWfaDpp, + "application/vnd.wfa.p2p" => Mime::ApplicationVndWfaP2p, + "application/vnd.wfa.wsc" => Mime::ApplicationVndWfaWsc, + "application/vnd.windows.devicepairing" => Mime::ApplicationVndWindowsDevicepairing, + "application/vnd.wmc" => Mime::ApplicationVndWmc, + "application/vnd.wmf.bootstrap" => Mime::ApplicationVndWmfBootstrap, + "application/vnd.wolfram.mathematica" => Mime::ApplicationVndWolframMathematica, + "application/vnd.wolfram.mathematica.package" => Mime::ApplicationVndWolframMathematicaPackage, + "application/vnd.wolfram.player" => Mime::ApplicationVndWolframPlayer, + "application/vnd.wordlift" => Mime::ApplicationVndWordlift, + "application/vnd.wordperfect" => Mime::ApplicationVndWordperfect, + "application/vnd.wqd" => Mime::ApplicationVndWqd, + "application/vnd.wrq-hp3000-labelled" => Mime::ApplicationVndWrqHp3000Labelled, + "application/vnd.wt.stf" => Mime::ApplicationVndWtStf, + "application/vnd.wv.csp+xml" => Mime::ApplicationVndWvCspXml, + "application/vnd.wv.csp+wbxml" => Mime::ApplicationVndWvCspWbxml, + "application/vnd.wv.ssp+xml" => Mime::ApplicationVndWvSspXml, + "application/vnd.xacml+json" => Mime::ApplicationVndXacmlJson, + "application/vnd.xara" => Mime::ApplicationVndXara, + "application/vnd.xfdl" => Mime::ApplicationVndXfdl, + "application/vnd.xfdl.webform" => Mime::ApplicationVndXfdlWebform, + "application/vnd.xmi+xml" => Mime::ApplicationVndXmiXml, + "application/vnd.xmpie.cpkg" => Mime::ApplicationVndXmpieCpkg, + "application/vnd.xmpie.dpkg" => Mime::ApplicationVndXmpieDpkg, + "application/vnd.xmpie.plan" => Mime::ApplicationVndXmpiePlan, + "application/vnd.xmpie.ppkg" => Mime::ApplicationVndXmpiePpkg, + "application/vnd.xmpie.xlim" => Mime::ApplicationVndXmpieXlim, + "application/vnd.yamaha.hv-dic" => Mime::ApplicationVndYamahaHvDic, + "application/vnd.yamaha.hv-script" => Mime::ApplicationVndYamahaHvScript, + "application/vnd.yamaha.hv-voice" => Mime::ApplicationVndYamahaHvVoice, + "application/vnd.yamaha.openscoreformat.osfpvg+xml" => Mime::ApplicationVndYamahaOpenscoreformatOsfpvgXml, + "application/vnd.yamaha.openscoreformat" => Mime::ApplicationVndYamahaOpenscoreformat, + "application/vnd.yamaha.remote-setup" => Mime::ApplicationVndYamahaRemoteSetup, + "application/vnd.yamaha.smaf-audio" => Mime::ApplicationVndYamahaSmafAudio, + "application/vnd.yamaha.smaf-phrase" => Mime::ApplicationVndYamahaSmafPhrase, + "application/vnd.yamaha.through-ngn" => Mime::ApplicationVndYamahaThroughNgn, + "application/vnd.yamaha.tunnel-udpencap" => Mime::ApplicationVndYamahaTunnelUdpencap, + "application/vnd.yaoweme" => Mime::ApplicationVndYaoweme, + "application/vnd.yellowriver-custom-menu" => Mime::ApplicationVndYellowriverCustomMenu, + "application/vnd.zul" => Mime::ApplicationVndZul, + "application/vnd.zzazz.deck+xml" => Mime::ApplicationVndZzazzDeckXml, + "application/voicexml+xml" => Mime::ApplicationVoicexmlXml, + "application/voucher-cms+json" => Mime::ApplicationVoucherCmsJson, + "application/vq-rtcpxr" => Mime::ApplicationVqRtcpxr, + "application/wasm" => Mime::ApplicationWasm, + "application/watcherinfo+xml" => Mime::ApplicationWatcherinfoXml, + "application/webpush-options+json" => Mime::ApplicationWebpushOptionsJson, + "application/whoispp-query" => Mime::ApplicationWhoisppQuery, + "application/whoispp-response" => Mime::ApplicationWhoisppResponse, + "application/widget" => Mime::ApplicationWidget, + "application/wita" => Mime::ApplicationWita, + "application/wordperfect5.1" => Mime::ApplicationWordperfect51, + "application/wsdl+xml" => Mime::ApplicationWsdlXml, + "application/wspolicy+xml" => Mime::ApplicationWspolicyXml, + "application/x-pki-message" => Mime::ApplicationXPkiMessage, + "application/x-www-form-urlencoded" => Mime::ApplicationXWwwFormUrlencoded, + "application/x-x509-ca-cert" => Mime::ApplicationXX509CaCert, + "application/x-x509-ca-ra-cert" => Mime::ApplicationXX509CaRaCert, + "application/x-x509-next-ca-cert" => Mime::ApplicationXX509NextCaCert, + "application/x400-bp" => Mime::ApplicationX400Bp, + "application/xacml+xml" => Mime::ApplicationXacmlXml, + "application/xcap-att+xml" => Mime::ApplicationXcapAttXml, + "application/xcap-caps+xml" => Mime::ApplicationXcapCapsXml, + "application/xcap-diff+xml" => Mime::ApplicationXcapDiffXml, + "application/xcap-el+xml" => Mime::ApplicationXcapElXml, + "application/xcap-error+xml" => Mime::ApplicationXcapErrorXml, + "application/xcap-ns+xml" => Mime::ApplicationXcapNsXml, + "application/xcon-conference-info-diff+xml" => Mime::ApplicationXconConferenceInfoDiffXml, + "application/xcon-conference-info+xml" => Mime::ApplicationXconConferenceInfoXml, + "application/xenc+xml" => Mime::ApplicationXencXml, + "application/xfdf" => Mime::ApplicationXfdf, + "application/xhtml+xml" => Mime::ApplicationXhtmlXml, + "application/xliff+xml" => Mime::ApplicationXliffXml, + "application/xml" => Mime::ApplicationXml, + "application/xml-dtd" => Mime::ApplicationXmlDtd, + "application/xml-external-parsed-entity" => Mime::ApplicationXmlExternalParsedEntity, + "application/xml-patch+xml" => Mime::ApplicationXmlPatchXml, + "application/xmpp+xml" => Mime::ApplicationXmppXml, + "application/xop+xml" => Mime::ApplicationXopXml, + "application/xslt+xml" => Mime::ApplicationXsltXml, + "application/xv+xml" => Mime::ApplicationXvXml, + "application/yang" => Mime::ApplicationYang, + "application/yang-data+cbor" => Mime::ApplicationYangDataCbor, + "application/yang-data+json" => Mime::ApplicationYangDataJson, + "application/yang-data+xml" => Mime::ApplicationYangDataXml, + "application/yang-patch+json" => Mime::ApplicationYangPatchJson, + "application/yang-patch+xml" => Mime::ApplicationYangPatchXml, + "application/yin+xml" => Mime::ApplicationYinXml, + "application/zip" => Mime::ApplicationZip, + "application/zlib" => Mime::ApplicationZlib, + "application/zstd" => Mime::ApplicationZstd, + "audio/1d-interleaved-parityfec" => Mime::Audio1dInterleavedParityfec, + "audio/32kadpcm" => Mime::Audio32kadpcm, + "audio/3gpp" => Mime::Audio3gpp, + "audio/3gpp2" => Mime::Audio3gpp2, + "audio/aac" => Mime::AudioAac, + "audio/ac3" => Mime::AudioAc3, + "audio/AMR" => Mime::AudioAmr, + "audio/AMR-WB" => Mime::AudioAmrWb, + "audio/amr-wb+" => Mime::AudioAmrWbPlus, + "audio/aptx" => Mime::AudioAptx, + "audio/asc" => Mime::AudioAsc, + "audio/ATRAC-ADVANCED-LOSSLESS" => Mime::AudioAtracAdvancedLossless, + "audio/ATRAC-X" => Mime::AudioAtracX, + "audio/ATRAC3" => Mime::AudioAtrac3, + "audio/basic" => Mime::AudioBasic, + "audio/BV16" => Mime::AudioBv16, + "audio/BV32" => Mime::AudioBv32, + "audio/clearmode" => Mime::AudioClearmode, + "audio/CN" => Mime::AudioCn, + "audio/DAT12" => Mime::AudioDat12, + "audio/dls" => Mime::AudioDls, + "audio/dsr-es201108" => Mime::AudioDsrEs201108, + "audio/dsr-es202050" => Mime::AudioDsrEs202050, + "audio/dsr-es202211" => Mime::AudioDsrEs202211, + "audio/dsr-es202212" => Mime::AudioDsrEs202212, + "audio/DV" => Mime::AudioDv, + "audio/DVI4" => Mime::AudioDvi4, + "audio/eac3" => Mime::AudioEac3, + "audio/encaprtp" => Mime::AudioEncaprtp, + "audio/EVRC" => Mime::AudioEvrc, + "audio/EVRC-QCP" => Mime::AudioEvrcQcp, + "audio/EVRC0" => Mime::AudioEvrc0, + "audio/EVRC1" => Mime::AudioEvrc1, + "audio/EVRCB" => Mime::AudioEvrcb, + "audio/EVRCB0" => Mime::AudioEvrcb0, + "audio/EVRCB1" => Mime::AudioEvrcb1, + "audio/EVRCNW" => Mime::AudioEvrcnw, + "audio/EVRCNW0" => Mime::AudioEvrcnw0, + "audio/EVRCNW1" => Mime::AudioEvrcnw1, + "audio/EVRCWB" => Mime::AudioEvrcwb, + "audio/EVRCWB0" => Mime::AudioEvrcwb0, + "audio/EVRCWB1" => Mime::AudioEvrcwb1, + "audio/EVS" => Mime::AudioEvs, + "audio/example" => Mime::AudioExample, + "audio/flexfec" => Mime::AudioFlexfec, + "audio/fwdred" => Mime::AudioFwdred, + "audio/G711-0" => Mime::AudioG7110, + "audio/G719" => Mime::AudioG719, + "audio/G7221" => Mime::AudioG7221, + "audio/G722" => Mime::AudioG722, + "audio/G723" => Mime::AudioG723, + "audio/G726-16" => Mime::AudioG72616, + "audio/G726-24" => Mime::AudioG72624, + "audio/G726-32" => Mime::AudioG72632, + "audio/G726-40" => Mime::AudioG72640, + "audio/G728" => Mime::AudioG728, + "audio/G729" => Mime::AudioG729, + "audio/G7291" => Mime::AudioG7291, + "audio/G729D" => Mime::AudioG729d, + "audio/G729E" => Mime::AudioG729e, + "audio/GSM" => Mime::AudioGsm, + "audio/GSM-EFR" => Mime::AudioGsmEfr, + "audio/GSM-HR-08" => Mime::AudioGsmHr08, + "audio/iLBC" => Mime::AudioIlbc, + "audio/ip-mr_v2.5" => Mime::AudioIpMrV25 , + "audio/L8" => Mime::AudioL8, + "audio/L16" => Mime::AudioL16, + "audio/L20" => Mime::AudioL20, + "audio/L24" => Mime::AudioL24, + "audio/LPC" => Mime::AudioLpc, + "audio/MELP" => Mime::AudioMelp, + "audio/MELP600" => Mime::AudioMelp600, + "audio/MELP1200" => Mime::AudioMelp1200, + "audio/MELP2400" => Mime::AudioMelp2400, + "audio/mhas" => Mime::AudioMhas, + "audio/mobile-xmf" => Mime::AudioMobileXmf, + "audio/MPA" => Mime::AudioMpa, + "audio/mp4" => Mime::AudioMp4, + "audio/MP4A-LATM" => Mime::AudioMp4aLatm, + "audio/mpa-robust" => Mime::AudioMpaRobust, + "audio/mpeg" => Mime::AudioMpeg, + "audio/mpeg4-generic" => Mime::AudioMpeg4Generic, + "audio/ogg" => Mime::AudioOgg, + "audio/opus" => Mime::AudioOpus, + "audio/parityfec" => Mime::AudioParityfec, + "audio/PCMA" => Mime::AudioPcma, + "audio/PCMA-WB" => Mime::AudioPcmaWb, + "audio/PCMU" => Mime::AudioPcmu, + "audio/PCMU-WB" => Mime::AudioPcmuWb, + "audio/prs.sid" => Mime::AudioPrsSid, + "audio/QCELP" => Mime::AudioQcelp, + "audio/raptorfec" => Mime::AudioRaptorfec, + "audio/RED" => Mime::AudioRed, + "audio/rtp-enc-aescm128" => Mime::AudioRtpEncAescm128, + "audio/rtploopback" => Mime::AudioRtploopback, + "audio/rtp-midi" => Mime::AudioRtpMidi, + "audio/rtx" => Mime::AudioRtx, + "audio/scip" => Mime::AudioScip, + "audio/SMV" => Mime::AudioSmv, + "audio/SMV0" => Mime::AudioSmv0, + "audio/SMV-QCP" => Mime::AudioSmvQcp, + "audio/sofa" => Mime::AudioSofa, + "audio/sp-midi" => Mime::AudioSpMidi, + "audio/speex" => Mime::AudioSpeex, + "audio/t140c" => Mime::AudioT140c, + "audio/t38" => Mime::AudioT38, + "audio/telephone-event" => Mime::AudioTelephoneEvent, + "audio/tone" => Mime::AudioTone, + "audio/TETRA_ACELP" => Mime::AudioTetraAcelp, + "audio/TETRA_ACELP_BB" => Mime::AudioTetraAcelpBb , + "audio/TSVCIS" => Mime::AudioTsvcis, + "audio/UEMCLIP" => Mime::AudioUemclip, + "audio/ulpfec" => Mime::AudioUlpfec, + "audio/usac" => Mime::AudioUsac, + "audio/VDVI" => Mime::AudioVdvi, + "audio/VMR-WB" => Mime::AudioVmrWb, + "audio/vnd.3gpp.iufp" => Mime::AudioVnd3gppIufp, + "audio/vnd.4SB" => Mime::AudioVnd4sb, + "audio/vnd.audiokoz" => Mime::AudioVndAudiokoz, + "audio/vnd.CELP" => Mime::AudioVndCelp, + "audio/vnd.cisco.nse" => Mime::AudioVndCiscoNse, + "audio/vnd.cmles.radio-events" => Mime::AudioVndCmlesRadioEvents, + "audio/vnd.cns.anp1" => Mime::AudioVndCnsAnp1, + "audio/vnd.cns.inf1" => Mime::AudioVndCnsInf1, + "audio/vnd.dece.audio" => Mime::AudioVndDeceAudio, + "audio/vnd.digital-winds" => Mime::AudioVndDigitalWinds, + "audio/vnd.dlna.adts" => Mime::AudioVndDlnaAdts, + "audio/vnd.dolby.heaac.1" => Mime::AudioVndDolbyHeaac1, + "audio/vnd.dolby.heaac.2" => Mime::AudioVndDolbyHeaac2, + "audio/vnd.dolby.mlp" => Mime::AudioVndDolbyMlp, + "audio/vnd.dolby.mps" => Mime::AudioVndDolbyMps, + "audio/vnd.dolby.pl2" => Mime::AudioVndDolbyPl2, + "audio/vnd.dolby.pl2x" => Mime::AudioVndDolbyPl2x, + "audio/vnd.dolby.pl2z" => Mime::AudioVndDolbyPl2z, + "audio/vnd.dolby.pulse.1" => Mime::AudioVndDolbyPulse1, + "audio/vnd.dra" => Mime::AudioVndDra, + "audio/vnd.dts" => Mime::AudioVndDts, + "audio/vnd.dts.hd" => Mime::AudioVndDtsHd, + "audio/vnd.dts.uhd" => Mime::AudioVndDtsUhd, + "audio/vnd.dvb.file" => Mime::AudioVndDvbFile, + "audio/vnd.everad.plj" => Mime::AudioVndEveradPlj, + "audio/vnd.hns.audio" => Mime::AudioVndHnsAudio, + "audio/vnd.lucent.voice" => Mime::AudioVndLucentVoice, + "audio/vnd.ms-playready.media.pya" => Mime::AudioVndMsPlayreadyMediaPya, + "audio/vnd.nokia.mobile-xmf" => Mime::AudioVndNokiaMobileXmf, + "audio/vnd.nortel.vbk" => Mime::AudioVndNortelVbk, + "audio/vnd.nuera.ecelp4800" => Mime::AudioVndNueraEcelp4800, + "audio/vnd.nuera.ecelp7470" => Mime::AudioVndNueraEcelp7470, + "audio/vnd.nuera.ecelp9600" => Mime::AudioVndNueraEcelp9600, + "audio/vnd.octel.sbc" => Mime::AudioVndOctelSbc, + "audio/vnd.presonus.multitrack" => Mime::AudioVndPresonusMultitrack, + "audio/vnd.rhetorex.32kadpcm" => Mime::AudioVndRhetorex32kadpcm, + "audio/vnd.rip" => Mime::AudioVndRip, + "audio/vnd.sealedmedia.softseal.mpeg" => Mime::AudioVndSealedmediaSoftsealMpeg, + "audio/vnd.vmx.cvsd" => Mime::AudioVndVmxCvsd, + "audio/vorbis" => Mime::AudioVorbis, + "audio/vorbis-config" => Mime::AudioVorbisConfig, + "font/collection" => Mime::FontCollection, + "font/otf" => Mime::FontOtf, + "font/sfnt" => Mime::FontSfnt, + "font/ttf" => Mime::FontTtf, + "font/woff" => Mime::FontWoff, + "font/woff2" => Mime::FontWoff2, + "image/aces" => Mime::ImageAces, + "image/apng" => Mime::ImageApng, + "image/avci" => Mime::ImageAvci, + "image/avcs" => Mime::ImageAvcs, + "image/avif" => Mime::ImageAvif, + "image/bmp" => Mime::ImageBmp, + "image/cgm" => Mime::ImageCgm, + "image/dicom-rle" => Mime::ImageDicomRle, + "image/dpx" => Mime::ImageDpx, + "image/emf" => Mime::ImageEmf, + "image/example" => Mime::ImageExample, + "image/fits" => Mime::ImageFits, + "image/g3fax" => Mime::ImageG3fax, + "image/heic" => Mime::ImageHeic, + "image/heic-sequence" => Mime::ImageHeicSequence, + "image/heif" => Mime::ImageHeif, + "image/heif-sequence" => Mime::ImageHeifSequence, + "image/hej2k" => Mime::ImageHej2k, + "image/hsj2" => Mime::ImageHsj2, + "image/jls" => Mime::ImageJls, + "image/jp2" => Mime::ImageJp2, + "image/jpeg" => Mime::ImageJpeg, + "image/jph" => Mime::ImageJph, + "image/jphc" => Mime::ImageJphc, + "image/jpm" => Mime::ImageJpm, + "image/jpx" => Mime::ImageJpx, + "image/jxr" => Mime::ImageJxr, + "image/jxrA" => Mime::ImageJxra, + "image/jxrS" => Mime::ImageJxrs, + "image/jxs" => Mime::ImageJxs, + "image/jxsc" => Mime::ImageJxsc, + "image/jxsi" => Mime::ImageJxsi, + "image/jxss" => Mime::ImageJxss, + "image/ktx" => Mime::ImageKtx, + "image/ktx2" => Mime::ImageKtx2, + "image/naplps" => Mime::ImageNaplps, + "image/png" => Mime::ImagePng, + "image/prs.btif" => Mime::ImagePrsBtif, + "image/prs.pti" => Mime::ImagePrsPti, + "image/pwg-raster" => Mime::ImagePwgRaster, + "image/svg+xml" => Mime::ImageSvgXml, + "image/t38" => Mime::ImageT38, + "image/tiff" => Mime::ImageTiff, + "image/tiff-fx" => Mime::ImageTiffFx, + "image/vnd.adobe.photoshop" => Mime::ImageVndAdobePhotoshop, + "image/vnd.airzip.accelerator.azv" => Mime::ImageVndAirzipAcceleratorAzv, + "image/vnd.cns.inf2" => Mime::ImageVndCnsInf2, + "image/vnd.dece.graphic" => Mime::ImageVndDeceGraphic, + "image/vnd.djvu" => Mime::ImageVndDjvu, + "image/vnd.dwg" => Mime::ImageVndDwg, + "image/vnd.dxf" => Mime::ImageVndDxf, + "image/vnd.dvb.subtitle" => Mime::ImageVndDvbSubtitle, + "image/vnd.fastbidsheet" => Mime::ImageVndFastbidsheet, + "image/vnd.fpx" => Mime::ImageVndFpx, + "image/vnd.fst" => Mime::ImageVndFst, + "image/vnd.fujixerox.edmics-mmr" => Mime::ImageVndFujixeroxEdmicsMmr, + "image/vnd.fujixerox.edmics-rlc" => Mime::ImageVndFujixeroxEdmicsRlc, + "image/vnd.globalgraphics.pgb" => Mime::ImageVndGlobalgraphicsPgb, + "image/vnd.microsoft.icon" => Mime::ImageVndMicrosoftIcon, + "image/vnd.mix" => Mime::ImageVndMix, + "image/vnd.ms-modi" => Mime::ImageVndMsModi, + "image/vnd.mozilla.apng" => Mime::ImageVndMozillaApng, + "image/vnd.net-fpx" => Mime::ImageVndNetFpx, + "image/vnd.pco.b16" => Mime::ImageVndPcoB16, + "image/vnd.radiance" => Mime::ImageVndRadiance, + "image/vnd.sealed.png" => Mime::ImageVndSealedPng, + "image/vnd.sealedmedia.softseal.gif" => Mime::ImageVndSealedmediaSoftsealGif, + "image/vnd.sealedmedia.softseal.jpg" => Mime::ImageVndSealedmediaSoftsealJpg, + "image/vnd.svf" => Mime::ImageVndSvf, + "image/vnd.tencent.tap" => Mime::ImageVndTencentTap, + "image/vnd.valve.source.texture" => Mime::ImageVndValveSourceTexture, + "image/vnd.wap.wbmp" => Mime::ImageVndWapWbmp, + "image/vnd.xiff" => Mime::ImageVndXiff, + "image/vnd.zbrush.pcx" => Mime::ImageVndZbrushPcx, + "image/webp" => Mime::ImageWebp, + "image/wmf" => Mime::ImageWmf, + "message/bhttp" => Mime::MessageBhttp, + "message/CPIM" => Mime::MessageCpim, + "message/delivery-status" => Mime::MessageDeliveryStatus, + "message/disposition-notification" => Mime::MessageDispositionNotification, + "message/example" => Mime::MessageExample, + "message/feedback-report" => Mime::MessageFeedbackReport, + "message/global" => Mime::MessageGlobal, + "message/global-delivery-status" => Mime::MessageGlobalDeliveryStatus, + "message/global-disposition-notification" => Mime::MessageGlobalDispositionNotification, + "message/global-headers" => Mime::MessageGlobalHeaders, + "message/http" => Mime::MessageHttp, + "message/imdn+xml" => Mime::MessageImdnXml, + "message/mls" => Mime::MessageMls, + "message/ohttp-req" => Mime::MessageOhttpReq, + "message/ohttp-res" => Mime::MessageOhttpRes, + "message/sip" => Mime::MessageSip, + "message/sipfrag" => Mime::MessageSipfrag, + "message/tracking-status" => Mime::MessageTrackingStatus, + "message/vnd.wfa.wsc" => Mime::MessageVndWfaWsc, + "model/3mf" => Mime::Model3mf, + "model/e57" => Mime::ModelE57, + "model/example" => Mime::ModelExample, + "model/gltf-binary" => Mime::ModelGltfBinary, + "model/gltf+json" => Mime::ModelGltfJson, + "model/JT" => Mime::ModelJt, + "model/iges" => Mime::ModelIges, + "model/mtl" => Mime::ModelMtl, + "model/obj" => Mime::ModelObj, + "model/prc" => Mime::ModelPrc, + "model/step" => Mime::ModelStep, + "model/step+xml" => Mime::ModelStepXml, + "model/step+zip" => Mime::ModelStepZip, + "model/step-xml+zip" => Mime::ModelStepXmlZip, + "model/stl" => Mime::ModelStl, + "model/u3d" => Mime::ModelU3d, + "model/vnd.bary" => Mime::ModelVndBary, + "model/vnd.cld" => Mime::ModelVndCld, + "model/vnd.collada+xml" => Mime::ModelVndColladaXml, + "model/vnd.dwf" => Mime::ModelVndDwf, + "model/vnd.flatland.3dml" => Mime::ModelVndFlatland3dml, + "model/vnd.gdl" => Mime::ModelVndGdl, + "model/vnd.gs-gdl" => Mime::ModelVndGsGdl, + "model/vnd.gtw" => Mime::ModelVndGtw, + "model/vnd.moml+xml" => Mime::ModelVndMomlXml, + "model/vnd.mts" => Mime::ModelVndMts, + "model/vnd.opengex" => Mime::ModelVndOpengex, + "model/vnd.parasolid.transmit.binary" => Mime::ModelVndParasolidTransmitBinary, + "model/vnd.parasolid.transmit.text" => Mime::ModelVndParasolidTransmitText, + "model/vnd.pytha.pyox" => Mime::ModelVndPythaPyox, + "model/vnd.rosette.annotated-data-model" => Mime::ModelVndRosetteAnnotatedDataModel, + "model/vnd.sap.vds" => Mime::ModelVndSapVds, + "model/vnd.usda" => Mime::ModelVndUsda, + "model/vnd.usdz+zip" => Mime::ModelVndUsdzZip, + "model/vnd.valve.source.compiled-map" => Mime::ModelVndValveSourceCompiledMap, + "model/vnd.vtu" => Mime::ModelVndVtu, + "model/x3d-vrml" => Mime::ModelX3dVrml, + "model/x3d+fastinfoset" => Mime::ModelX3dFastinfoset, + "model/x3d+xml" => Mime::ModelX3dXml, + "multipart/appledouble" => Mime::MultipartAppledouble, + "multipart/byteranges" => Mime::MultipartByteranges, + "multipart/encrypted" => Mime::MultipartEncrypted, + "multipart/example" => Mime::MultipartExample, + "multipart/form-data" => Mime::MultipartFormData, + "multipart/header-set" => Mime::MultipartHeaderSet, + "multipart/multilingual" => Mime::MultipartMultilingual, + "multipart/related" => Mime::MultipartRelated, + "multipart/report" => Mime::MultipartReport, + "multipart/signed" => Mime::MultipartSigned, + "multipart/vnd.bint.med-plus" => Mime::MultipartVndBintMedPlus, + "multipart/voice-message" => Mime::MultipartVoiceMessage, + "multipart/x-mixed-replace" => Mime::MultipartXMixedReplace, + "text/1d-interleaved-parityfec" => Mime::Text1dInterleavedParityfec, + "text/cache-manifest" => Mime::TextCacheManifest, + "text/calendar" => Mime::TextCalendar, + "text/cql" => Mime::TextCql, + "text/cql-expression" => Mime::TextCqlExpression, + "text/cql-identifier" => Mime::TextCqlIdentifier, + "text/css" => Mime::TextCss, + "text/csv" => Mime::TextCsv, + "text/csv-schema" => Mime::TextCsvSchema, + "text/dns" => Mime::TextDns, + "text/encaprtp" => Mime::TextEncaprtp, + "text/example" => Mime::TextExample, + "text/fhirpath" => Mime::TextFhirpath, + "text/flexfec" => Mime::TextFlexfec, + "text/fwdred" => Mime::TextFwdred, + "text/gff3" => Mime::TextGff3, + "text/grammar-ref-list" => Mime::TextGrammarRefList, + "text/hl7v2" => Mime::TextHl7v2, + "text/html" => Mime::TextHtml, + "text/javascript" => Mime::TextJavascript, + "text/jcr-cnd" => Mime::TextJcrCnd, + "text/markdown" => Mime::TextMarkdown, + "text/mizar" => Mime::TextMizar, + "text/n3" => Mime::TextN3, + "text/parameters" => Mime::TextParameters, + "text/parityfec" => Mime::TextParityfec, + "text/plain" => Mime::TextPlain, + "text/provenance-notation" => Mime::TextProvenanceNotation, + "text/prs.fallenstein.rst" => Mime::TextPrsFallensteinRst, + "text/prs.lines.tag" => Mime::TextPrsLinesTag, + "text/prs.prop.logic" => Mime::TextPrsPropLogic, + "text/raptorfec" => Mime::TextRaptorfec, + "text/RED" => Mime::TextRed, + "text/rfc822-headers" => Mime::TextRfc822Headers, + "text/rtf" => Mime::TextRtf, + "text/rtp-enc-aescm128" => Mime::TextRtpEncAescm128, + "text/rtploopback" => Mime::TextRtploopback, + "text/rtx" => Mime::TextRtx, + "text/SGML" => Mime::TextSgml, + "text/shaclc" => Mime::TextShaclc, + "text/shex" => Mime::TextShex, + "text/spdx" => Mime::TextSpdx, + "text/strings" => Mime::TextStrings, + "text/t140" => Mime::TextT140, + "text/tab-separated-values" => Mime::TextTabSeparatedValues, + "text/troff" => Mime::TextTroff, + "text/turtle" => Mime::TextTurtle, + "text/ulpfec" => Mime::TextUlpfec, + "text/uri-list" => Mime::TextUriList, + "text/vcard" => Mime::TextVcard, + "text/vnd.a" => Mime::TextVndA, + "text/vnd.abc" => Mime::TextVndAbc, + "text/vnd.ascii-art" => Mime::TextVndAsciiArt, + "text/vnd.curl" => Mime::TextVndCurl, + "text/vnd.debian.copyright" => Mime::TextVndDebianCopyright, + "text/vnd.DMClientScript" => Mime::TextVndDmclientscript, + "text/vnd.dvb.subtitle" => Mime::TextVndDvbSubtitle, + "text/vnd.esmertec.theme-descriptor" => Mime::TextVndEsmertecThemeDescriptor, + "text/vnd.exchangeable" => Mime::TextVndExchangeable, + "text/vnd.familysearch.gedcom" => Mime::TextVndFamilysearchGedcom, + "text/vnd.ficlab.flt" => Mime::TextVndFiclabFlt, + "text/vnd.fly" => Mime::TextVndFly, + "text/vnd.fmi.flexstor" => Mime::TextVndFmiFlexstor, + "text/vnd.gml" => Mime::TextVndGml, + "text/vnd.graphviz" => Mime::TextVndGraphviz, + "text/vnd.hans" => Mime::TextVndHans, + "text/vnd.hgl" => Mime::TextVndHgl, + "text/vnd.in3d.3dml" => Mime::TextVndIn3d3dml, + "text/vnd.in3d.spot" => Mime::TextVndIn3dSpot, + "text/vnd.IPTC.NewsML" => Mime::TextVndIptcNewsml, + "text/vnd.IPTC.NITF" => Mime::TextVndIptcNitf, + "text/vnd.latex-z" => Mime::TextVndLatexZ, + "text/vnd.motorola.reflex" => Mime::TextVndMotorolaReflex, + "text/vnd.ms-mediapackage" => Mime::TextVndMsMediapackage, + "text/vnd.net2phone.commcenter.command" => Mime::TextVndNet2phoneCommcenterCommand, + "text/vnd.radisys.msml-basic-layout" => Mime::TextVndRadisysMsmlBasicLayout, + "text/vnd.senx.warpscript" => Mime::TextVndSenxWarpscript, + "text/vnd.sun.j2me.app-descriptor" => Mime::TextVndSunJ2meAppDescriptor, + "text/vnd.sosi" => Mime::TextVndSosi, + "text/vnd.trolltech.linguist" => Mime::TextVndTrolltechLinguist, + "text/vnd.wap.si" => Mime::TextVndWapSi, + "text/vnd.wap.sl" => Mime::TextVndWapSl, + "text/vnd.wap.wml" => Mime::TextVndWapWml, + "text/vnd.wap.wmlscript" => Mime::TextVndWapWmlscript, + "text/vtt" => Mime::TextVtt, + "text/wgsl" => Mime::TextWgsl, + "text/xml" => Mime::TextXml, + "text/xml-external-parsed-entity" => Mime::TextXmlExternalParsedEntity, + "video/1d-interleaved-parityfec" => Mime::Video1dInterleavedParityfec, + "video/3gpp" => Mime::Video3gpp, + "video/3gpp2" => Mime::Video3gpp2, + "video/3gpp-tt" => Mime::Video3gppTt, + "video/AV1" => Mime::VideoAv1, + "video/BMPEG" => Mime::VideoBmpeg, + "video/BT656" => Mime::VideoBt656, + "video/CelB" => Mime::VideoCelb, + "video/DV" => Mime::VideoDv, + "video/encaprtp" => Mime::VideoEncaprtp, + "video/example" => Mime::VideoExample, + "video/FFV1" => Mime::VideoFfv1, + "video/flexfec" => Mime::VideoFlexfec, + "video/H261" => Mime::VideoH261, + "video/H263" => Mime::VideoH263, + "video/H263-1998" => Mime::VideoH2631998, + "video/H263-2000" => Mime::VideoH2632000, + "video/H264" => Mime::VideoH264, + "video/H264-RCDO" => Mime::VideoH264Rcdo, + "video/H264-SVC" => Mime::VideoH264Svc, + "video/H265" => Mime::VideoH265, + "video/H266" => Mime::VideoH266, + "video/iso.segment" => Mime::VideoIsoSegment, + "video/JPEG" => Mime::VideoJpeg, + "video/jpeg2000" => Mime::VideoJpeg2000, + "video/jxsv" => Mime::VideoJxsv, + "video/mj2" => Mime::VideoMj2, + "video/MP1S" => Mime::VideoMp1s, + "video/MP2P" => Mime::VideoMp2p, + "video/MP2T" => Mime::VideoMp2t, + "video/mp4" => Mime::VideoMp4, + "video/MP4V-ES" => Mime::VideoMp4vEs, + "video/MPV" => Mime::VideoMpv, + "video/mpeg4-generic" => Mime::VideoMpeg4Generic, + "video/nv" => Mime::VideoNv, + "video/ogg" => Mime::VideoOgg, + "video/parityfec" => Mime::VideoParityfec, + "video/pointer" => Mime::VideoPointer, + "video/quicktime" => Mime::VideoQuicktime, + "video/raptorfec" => Mime::VideoRaptorfec, + "video/raw" => Mime::VideoRaw, + "video/rtp-enc-aescm128" => Mime::VideoRtpEncAescm128, + "video/rtploopback" => Mime::VideoRtploopback, + "video/rtx" => Mime::VideoRtx, + "video/scip" => Mime::VideoScip, + "video/smpte291" => Mime::VideoSmpte291, + "video/SMPTE292M" => Mime::VideoSmpte292m, + "video/ulpfec" => Mime::VideoUlpfec, + "video/vc1" => Mime::VideoVc1, + "video/vc2" => Mime::VideoVc2, + "video/vnd.CCTV" => Mime::VideoVndCctv, + "video/vnd.dece.hd" => Mime::VideoVndDeceHd, + "video/vnd.dece.mobile" => Mime::VideoVndDeceMobile, + "video/vnd.dece.mp4" => Mime::VideoVndDeceMp4, + "video/vnd.dece.pd" => Mime::VideoVndDecePd, + "video/vnd.dece.sd" => Mime::VideoVndDeceSd, + "video/vnd.dece.video" => Mime::VideoVndDeceVideo, + "video/vnd.directv.mpeg" => Mime::VideoVndDirectvMpeg, + "video/vnd.directv.mpeg-tts" => Mime::VideoVndDirectvMpegTts, + "video/vnd.dlna.mpeg-tts" => Mime::VideoVndDlnaMpegTts, + "video/vnd.dvb.file" => Mime::VideoVndDvbFile, + "video/vnd.fvt" => Mime::VideoVndFvt, + "video/vnd.hns.video" => Mime::VideoVndHnsVideo, + "video/vnd.iptvforum.1dparityfec-1010" => Mime::VideoVndIptvforum1dparityfec1010, + "video/vnd.iptvforum.1dparityfec-2005" => Mime::VideoVndIptvforum1dparityfec2005, + "video/vnd.iptvforum.2dparityfec-1010" => Mime::VideoVndIptvforum2dparityfec1010, + "video/vnd.iptvforum.2dparityfec-2005" => Mime::VideoVndIptvforum2dparityfec2005, + "video/vnd.iptvforum.ttsavc" => Mime::VideoVndIptvforumTtsavc, + "video/vnd.iptvforum.ttsmpeg2" => Mime::VideoVndIptvforumTtsmpeg2, + "video/vnd.motorola.video" => Mime::VideoVndMotorolaVideo, + "video/vnd.motorola.videop" => Mime::VideoVndMotorolaVideop, + "video/vnd.mpegurl" => Mime::VideoVndMpegurl, + "video/vnd.ms-playready.media.pyv" => Mime::VideoVndMsPlayreadyMediaPyv, + "video/vnd.nokia.interleaved-multimedia" => Mime::VideoVndNokiaInterleavedMultimedia, + "video/vnd.nokia.mp4vr" => Mime::VideoVndNokiaMp4vr, + "video/vnd.nokia.videovoip" => Mime::VideoVndNokiaVideovoip, + "video/vnd.objectvideo" => Mime::VideoVndObjectvideo, + "video/vnd.radgamettools.bink" => Mime::VideoVndRadgamettoolsBink, + "video/vnd.radgamettools.smacker" => Mime::VideoVndRadgamettoolsSmacker, + "video/vnd.sealed.mpeg1" => Mime::VideoVndSealedMpeg1, + "video/vnd.sealed.mpeg4" => Mime::VideoVndSealedMpeg4, + "video/vnd.sealed.swf" => Mime::VideoVndSealedSwf, + "video/vnd.sealedmedia.softseal.mov" => Mime::VideoVndSealedmediaSoftsealMov, + "video/vnd.uvvu.mp4" => Mime::VideoVndUvvuMp4, + "video/vnd.youtube.yt" => Mime::VideoVndYoutubeYt, + "video/vnd.vivo" => Mime::VideoVndVivo, + "video/VP8" => Mime::VideoVp8, + "video/VP9" => Mime::VideoVp9, +}; diff --git a/core/http/src/utils/mime/mime_enum.rs b/core/http/src/utils/mime/mime_enum.rs new file mode 100644 index 0000000000000000000000000000000000000000..1ad81818e94d55b3d09dde93cf38f8aa4b3e6941 --- /dev/null +++ b/core/http/src/utils/mime/mime_enum.rs @@ -0,0 +1,4103 @@ +use super::map::MIME_MAP; + +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] +/// An Enum of all Mime types +pub enum Mime { + Application1dInterleavedParityfec, + Application3gpdashQoeReportXml, + Application3gpphalJson, + Application3gpphalformsJson, + Application3gppImsXml, + ApplicationA2l, + ApplicationAceCbor, + ApplicationAceJson, + ApplicationActivemessage, + ApplicationActivityJson, + ApplicationAifCbor, + ApplicationAifJson, + ApplicationAltoCdniJson, + ApplicationAltoCdnifilterJson, + ApplicationAltoCostmapJson, + ApplicationAltoCostmapfilterJson, + ApplicationAltoDirectoryJson, + ApplicationAltoEndpointpropJson, + ApplicationAltoEndpointpropparamsJson, + ApplicationAltoEndpointcostJson, + ApplicationAltoEndpointcostparamsJson, + ApplicationAltoErrorJson, + ApplicationAltoNetworkmapfilterJson, + ApplicationAltoNetworkmapJson, + ApplicationAltoPropmapJson, + ApplicationAltoPropmapparamsJson, + ApplicationAltoUpdatestreamcontrolJson, + ApplicationAltoUpdatestreamparamsJson, + ApplicationAml, + ApplicationAndrewInset, + ApplicationApplefile, + ApplicationAtJwt, + ApplicationAtf, + ApplicationAtfx, + ApplicationAtomXml, + ApplicationAtomcatXml, + ApplicationAtomdeletedXml, + ApplicationAtomicmail, + ApplicationAtomsvcXml, + ApplicationAtscDwdXml, + ApplicationAtscDynamicEventMessage, + ApplicationAtscHeldXml, + ApplicationAtscRdtJson, + ApplicationAtscRsatXml, + ApplicationAtxml, + ApplicationAuthPolicyXml, + ApplicationAutomationmlAmlXml, + ApplicationAutomationmlAmlxZip, + ApplicationBacnetXddZip, + ApplicationBatchSmtp, + ApplicationBeepXml, + ApplicationCalendarJson, + ApplicationCalendarXml, + ApplicationCallCompletion, + ApplicationCals1840, + ApplicationCaptiveJson, + ApplicationCbor, + ApplicationCborSeq, + ApplicationCccex, + ApplicationCcmpXml, + ApplicationCcxmlXml, + ApplicationCdaXml, + ApplicationCdfxXml, + ApplicationCdmiCapability, + ApplicationCdmiContainer, + ApplicationCdmiDomain, + ApplicationCdmiObject, + ApplicationCdmiQueue, + ApplicationCdni, + ApplicationCea, + ApplicationCea2018Xml, + ApplicationCellmlXml, + ApplicationCfw, + ApplicationCityJson, + ApplicationClr, + ApplicationClueInfoXml, + ApplicationClueXml, + ApplicationCms, + ApplicationCnrpXml, + ApplicationCoapGroupJson, + ApplicationCoapPayload, + ApplicationCommonground, + ApplicationConciseProblemDetailsCbor, + ApplicationConferenceInfoXml, + ApplicationCplXml, + ApplicationCose, + ApplicationCoseKey, + ApplicationCoseKeySet, + ApplicationCoseX509, + ApplicationCsrattrs, + ApplicationCstaXml, + ApplicationCstadataXml, + ApplicationCsvmJson, + ApplicationCwl, + ApplicationCwlJson, + ApplicationCwt, + ApplicationCybercash, + ApplicationDashXml, + ApplicationDashPatchXml, + ApplicationDashdelta, + ApplicationDavmountXml, + ApplicationDcaRft, + ApplicationDcd, + ApplicationDecDx, + ApplicationDialogInfoXml, + ApplicationDicom, + ApplicationDicomJson, + ApplicationDicomXml, + ApplicationDii, + ApplicationDit, + ApplicationDns, + ApplicationDnsJson, + ApplicationDnsMessage, + ApplicationDotsCbor, + ApplicationDpopJwt, + ApplicationDskppXml, + ApplicationDsscDer, + ApplicationDsscXml, + ApplicationDvcs, + ApplicationEdiConsent, + ApplicationEdifact, + ApplicationEdiX12, + ApplicationEfi, + ApplicationElmJson, + ApplicationElmXml, + ApplicationEmergencycalldataCapXml, + ApplicationEmergencycalldataCommentXml, + ApplicationEmergencycalldataControlXml, + ApplicationEmergencycalldataDeviceinfoXml, + ApplicationEmergencycalldataEcallMsd, + ApplicationEmergencycalldataLegacyesnJson, + ApplicationEmergencycalldataProviderinfoXml, + ApplicationEmergencycalldataServiceinfoXml, + ApplicationEmergencycalldataSubscriberinfoXml, + ApplicationEmergencycalldataVedsXml, + ApplicationEmmaXml, + ApplicationEmotionmlXml, + ApplicationEncaprtp, + ApplicationEppXml, + ApplicationEpubZip, + ApplicationEshop, + ApplicationExample, + ApplicationExi, + ApplicationExpectCtReportJson, + ApplicationExpress, + ApplicationFastinfoset, + ApplicationFastsoap, + ApplicationFdf, + ApplicationFdtXml, + ApplicationFhirJson, + ApplicationFhirXml, + ApplicationFits, + ApplicationFlexfec, + ApplicationFontTdpfr, + ApplicationFrameworkAttributesXml, + ApplicationGeoJson, + ApplicationGeoJsonSeq, + ApplicationGeopackageSqlite3, + ApplicationGeoxacmlXml, + ApplicationGltfBuffer, + ApplicationGmlXml, + ApplicationGzip, + ApplicationH224, + ApplicationHeldXml, + ApplicationHl7v2Xml, + ApplicationHttp, + ApplicationHyperstudio, + ApplicationIbeKeyRequestXml, + ApplicationIbePkgReplyXml, + ApplicationIbePpData, + ApplicationIges, + ApplicationImIscomposingXml, + ApplicationIndex, + ApplicationIndexCmd, + ApplicationIndexObj, + ApplicationIndexResponse, + ApplicationIndexVnd, + ApplicationInkmlXml, + ApplicationIotp, + ApplicationIpfix, + ApplicationIpp, + ApplicationIsup, + ApplicationItsXml, + ApplicationJavaArchive, + ApplicationJf2feedJson, + ApplicationJose, + ApplicationJoseJson, + ApplicationJrdJson, + ApplicationJscalendarJson, + ApplicationJson, + ApplicationJsonPatchJson, + ApplicationJsonSeq, + ApplicationJwkJson, + ApplicationJwkSetJson, + ApplicationJwt, + ApplicationKpmlRequestXml, + ApplicationKpmlResponseXml, + ApplicationLdJson, + ApplicationLgrXml, + ApplicationLinkFormat, + ApplicationLinkset, + ApplicationLinksetJson, + ApplicationLoadControlXml, + ApplicationLogoutJwt, + ApplicationLostXml, + ApplicationLostsyncXml, + ApplicationLpfZip, + ApplicationLxf, + ApplicationMacBinhex40, + ApplicationMacwriteii, + ApplicationMadsXml, + ApplicationManifestJson, + ApplicationMarc, + ApplicationMarcxmlXml, + ApplicationMathematica, + ApplicationMathmlXml, + ApplicationMathmlContentXml, + ApplicationMathmlPresentationXml, + ApplicationMbmsAssociatedProcedureDescriptionXml, + ApplicationMbmsDeregisterXml, + ApplicationMbmsEnvelopeXml, + ApplicationMbmsMskResponseXml, + ApplicationMbmsMskXml, + ApplicationMbmsProtectionDescriptionXml, + ApplicationMbmsReceptionReportXml, + ApplicationMbmsRegisterResponseXml, + ApplicationMbmsRegisterXml, + ApplicationMbmsScheduleXml, + ApplicationMbmsUserServiceDescriptionXml, + ApplicationMbox, + ApplicationMediaControlXml, + ApplicationMediaPolicyDatasetXml, + ApplicationMediaservercontrolXml, + ApplicationMergePatchJson, + ApplicationMetalink4Xml, + ApplicationMetsXml, + ApplicationMf4, + ApplicationMikey, + ApplicationMipc, + ApplicationMissingBlocksCborSeq, + ApplicationMmtAeiXml, + ApplicationMmtUsdXml, + ApplicationModsXml, + ApplicationMossKeys, + ApplicationMossSignature, + ApplicationMosskeyData, + ApplicationMosskeyRequest, + ApplicationMp21, + ApplicationMp4, + ApplicationMpeg4Generic, + ApplicationMpeg4Iod, + ApplicationMpeg4IodXmt, + ApplicationMrbConsumerXml, + ApplicationMrbPublishXml, + ApplicationMscIvrXml, + ApplicationMscMixerXml, + ApplicationMsword, + ApplicationMudJson, + ApplicationMultipartCore, + ApplicationMxf, + ApplicationNQuads, + ApplicationNTriples, + ApplicationNasdata, + ApplicationNewsCheckgroups, + ApplicationNewsGroupinfo, + ApplicationNewsTransmission, + ApplicationNlsmlXml, + ApplicationNode, + ApplicationNss, + ApplicationOauthAuthzReqJwt, + ApplicationObliviousDnsMessage, + ApplicationOcspRequest, + ApplicationOcspResponse, + ApplicationOctetStream, + ApplicationOda, + ApplicationOdmXml, + ApplicationOdx, + ApplicationOebpsPackageXml, + ApplicationOgg, + ApplicationOhttpKeys, + ApplicationOpcNodesetXml, + ApplicationOscore, + ApplicationOxps, + ApplicationP21, + ApplicationP21Zip, + ApplicationP2pOverlayXml, + ApplicationParityfec, + ApplicationPassport, + ApplicationPatchOpsErrorXml, + ApplicationPdf, + ApplicationPdx, + ApplicationPemCertificateChain, + ApplicationPgpEncrypted, + ApplicationPgpKeys, + ApplicationPgpSignature, + ApplicationPidfDiffXml, + ApplicationPidfXml, + ApplicationPkcs10, + ApplicationPkcs7Mime, + ApplicationPkcs7Signature, + ApplicationPkcs8, + ApplicationPkcs8Encrypted, + ApplicationPkcs12, + ApplicationPkixAttrCert, + ApplicationPkixCert, + ApplicationPkixCrl, + ApplicationPkixPkipath, + ApplicationPkixcmp, + ApplicationPlsXml, + ApplicationPocSettingsXml, + ApplicationPostscript, + ApplicationPpspTrackerJson, + ApplicationProblemJson, + ApplicationProblemXml, + ApplicationProvenanceXml, + ApplicationPrsAlvestrandTitraxSheet, + ApplicationPrsCww, + ApplicationPrsCyn, + ApplicationPrsHpubZip, + ApplicationPrsImpliedDocumentXml, + ApplicationPrsImpliedExecutable, + ApplicationPrsImpliedStructure, + ApplicationPrsNprend, + ApplicationPrsPlucker, + ApplicationPrsRdfXmlCrypt, + ApplicationPrsXsfXml, + ApplicationPskcXml, + ApplicationPvdJson, + ApplicationRdfXml, + ApplicationRouteApdXml, + ApplicationRouteSTsidXml, + ApplicationRouteUsdXml, + ApplicationQsig, + ApplicationRaptorfec, + ApplicationRdapJson, + ApplicationReginfoXml, + ApplicationRelaxNgCompactSyntax, + ApplicationReputonJson, + ApplicationResourceListsDiffXml, + ApplicationResourceListsXml, + ApplicationRfcXml, + ApplicationRiscos, + ApplicationRlmiXml, + ApplicationRlsServicesXml, + ApplicationRpkiChecklist, + ApplicationRpkiGhostbusters, + ApplicationRpkiManifest, + ApplicationRpkiPublication, + ApplicationRpkiRoa, + ApplicationRpkiUpdown, + ApplicationRtf, + ApplicationRtploopback, + ApplicationRtx, + ApplicationSamlassertionXml, + ApplicationSamlmetadataXml, + ApplicationSarifExternalPropertiesJson, + ApplicationSarifJson, + ApplicationSbe, + ApplicationSbmlXml, + ApplicationScaipXml, + ApplicationScimJson, + ApplicationScvpCvRequest, + ApplicationScvpCvResponse, + ApplicationScvpVpRequest, + ApplicationScvpVpResponse, + ApplicationSdp, + ApplicationSeceventJwt, + ApplicationSenmlEtchCbor, + ApplicationSenmlEtchJson, + ApplicationSenmlExi, + ApplicationSenmlCbor, + ApplicationSenmlJson, + ApplicationSenmlXml, + ApplicationSensmlExi, + ApplicationSensmlCbor, + ApplicationSensmlJson, + ApplicationSensmlXml, + ApplicationSepExi, + ApplicationSepXml, + ApplicationSessionInfo, + ApplicationSetPayment, + ApplicationSetPaymentInitiation, + ApplicationSetRegistration, + ApplicationSetRegistrationInitiation, + ApplicationSgml, + ApplicationSgmlOpenCatalog, + ApplicationShfXml, + ApplicationSieve, + ApplicationSimpleFilterXml, + ApplicationSimpleMessageSummary, + ApplicationSimplesymbolcontainer, + ApplicationSipc, + ApplicationSlate, + ApplicationSmilXml, + ApplicationSmpte336m, + ApplicationSoapFastinfoset, + ApplicationSoapXml, + ApplicationSparqlQuery, + ApplicationSpdxJson, + ApplicationSparqlResultsXml, + ApplicationSpiritsEventXml, + ApplicationSql, + ApplicationSrgs, + ApplicationSrgsXml, + ApplicationSruXml, + ApplicationSsmlXml, + ApplicationStixJson, + ApplicationSwidCbor, + ApplicationSwidXml, + ApplicationTampApexUpdate, + ApplicationTampApexUpdateConfirm, + ApplicationTampCommunityUpdate, + ApplicationTampCommunityUpdateConfirm, + ApplicationTampError, + ApplicationTampSequenceAdjust, + ApplicationTampSequenceAdjustConfirm, + ApplicationTampStatusQuery, + ApplicationTampStatusResponse, + ApplicationTampUpdate, + ApplicationTampUpdateConfirm, + ApplicationTaxiiJson, + ApplicationTdJson, + ApplicationTeiXml, + ApplicationTetraIsi, + ApplicationThraudXml, + ApplicationTimestampQuery, + ApplicationTimestampReply, + ApplicationTimestampedData, + ApplicationTlsrptGzip, + ApplicationTlsrptJson, + ApplicationTmJson, + ApplicationTnauthlist, + ApplicationTokenIntrospectionJwt, + ApplicationTrickleIceSdpfrag, + ApplicationTrig, + ApplicationTtmlXml, + ApplicationTveTrigger, + ApplicationTzif, + ApplicationTzifLeap, + ApplicationUlpfec, + ApplicationUrcGrpsheetXml, + ApplicationUrcRessheetXml, + ApplicationUrcTargetdescXml, + ApplicationUrcUisocketdescXml, + ApplicationVcardJson, + ApplicationVcardXml, + ApplicationVemmi, + ApplicationVnd1000mindsDecisionModelXml, + ApplicationVnd1ob, + ApplicationVnd3gpp5gnas, + ApplicationVnd3gppAccessTransferEventsXml, + ApplicationVnd3gppBsfXml, + ApplicationVnd3gppCrsXml, + ApplicationVnd3gppCurrentLocationDiscoveryXml, + ApplicationVnd3gppGmopXml, + ApplicationVnd3gppGtpc, + ApplicationVnd3gppInterworkingData, + ApplicationVnd3gppLpp, + ApplicationVnd3gppMcSignallingEar, + ApplicationVnd3gppMcdataAffiliationCommandXml, + ApplicationVnd3gppMcdataInfoXml, + ApplicationVnd3gppMcdataMsgstoreCtrlRequestXml, + ApplicationVnd3gppMcdataPayload, + ApplicationVnd3gppMcdataRegroupXml, + ApplicationVnd3gppMcdataServiceConfigXml, + ApplicationVnd3gppMcdataSignalling, + ApplicationVnd3gppMcdataUeConfigXml, + ApplicationVnd3gppMcdataUserProfileXml, + ApplicationVnd3gppMcpttAffiliationCommandXml, + ApplicationVnd3gppMcpttFloorRequestXml, + ApplicationVnd3gppMcpttInfoXml, + ApplicationVnd3gppMcpttLocationInfoXml, + ApplicationVnd3gppMcpttMbmsUsageInfoXml, + ApplicationVnd3gppMcpttRegroupXml, + ApplicationVnd3gppMcpttServiceConfigXml, + ApplicationVnd3gppMcpttSignedXml, + ApplicationVnd3gppMcpttUeConfigXml, + ApplicationVnd3gppMcpttUeInitConfigXml, + ApplicationVnd3gppMcpttUserProfileXml, + ApplicationVnd3gppMcvideoAffiliationCommandXml, + ApplicationVnd3gppMcvideoInfoXml, + ApplicationVnd3gppMcvideoLocationInfoXml, + ApplicationVnd3gppMcvideoMbmsUsageInfoXml, + ApplicationVnd3gppMcvideoRegroupXml, + ApplicationVnd3gppMcvideoServiceConfigXml, + ApplicationVnd3gppMcvideoTransmissionRequestXml, + ApplicationVnd3gppMcvideoUeConfigXml, + ApplicationVnd3gppMcvideoUserProfileXml, + ApplicationVnd3gppMidCallXml, + ApplicationVnd3gppNgap, + ApplicationVnd3gppPfcp, + ApplicationVnd3gppPicBwLarge, + ApplicationVnd3gppPicBwSmall, + ApplicationVnd3gppPicBwVar, + ApplicationVnd3gppProsePc3aXml, + ApplicationVnd3gppProsePc3achXml, + ApplicationVnd3gppProsePc3chXml, + ApplicationVnd3gppProsePc8Xml, + ApplicationVnd3gppProseXml, + ApplicationVnd3gppS1ap, + ApplicationVnd3gppSealGroupDocXml, + ApplicationVnd3gppSealInfoXml, + ApplicationVnd3gppSealLocationInfoXml, + ApplicationVnd3gppSealMbmsUsageInfoXml, + ApplicationVnd3gppSealNetworkQosManagementInfoXml, + ApplicationVnd3gppSealUeConfigInfoXml, + ApplicationVnd3gppSealUnicastInfoXml, + ApplicationVnd3gppSealUserProfileInfoXml, + ApplicationVnd3gppSms, + ApplicationVnd3gppSmsXml, + ApplicationVnd3gppSrvccExtXml, + ApplicationVnd3gppSrvccInfoXml, + ApplicationVnd3gppStateAndEventInfoXml, + ApplicationVnd3gppUssdXml, + ApplicationVnd3gppVaeInfoXml, + ApplicationVnd3gppV2xLocalServiceInformation, + ApplicationVnd3gpp2BcmcsinfoXml, + ApplicationVnd3gpp2Sms, + ApplicationVnd3gpp2Tcap, + ApplicationVnd3gppV2x, + ApplicationVnd3lightssoftwareImagescal, + ApplicationVnd3mPostItNotes, + ApplicationVndAccpacSimplyAso, + ApplicationVndAccpacSimplyImp, + ApplicationVndAcmAddressxferJson, + ApplicationVndAcucobol, + ApplicationVndAcucorp, + ApplicationVndAdobeFlashMovie, + ApplicationVndAdobeFormscentralFcdt, + ApplicationVndAdobeFxp, + ApplicationVndAdobePartialUpload, + ApplicationVndAdobeXdpXml, + ApplicationVndAetherImp, + ApplicationVndAfpcAfplinedata, + ApplicationVndAfpcAfplinedataPagedef, + ApplicationVndAfpcCmocaCmresource, + ApplicationVndAfpcFocaCharset, + ApplicationVndAfpcFocaCodedfont, + ApplicationVndAfpcFocaCodepage, + ApplicationVndAfpcModca, + ApplicationVndAfpcModcaCmtable, + ApplicationVndAfpcModcaFormdef, + ApplicationVndAfpcModcaMediummap, + ApplicationVndAfpcModcaObjectcontainer, + ApplicationVndAfpcModcaOverlay, + ApplicationVndAfpcModcaPagesegment, + ApplicationVndAge, + ApplicationVndAhBarcode, + ApplicationVndAheadSpace, + ApplicationVndAirzipFilesecureAzf, + ApplicationVndAirzipFilesecureAzs, + ApplicationVndAmadeusJson, + ApplicationVndAmazonMobi8Ebook, + ApplicationVndAmericandynamicsAcc, + ApplicationVndAmigaAmi, + ApplicationVndAmundsenMazeXml, + ApplicationVndAndroidOta, + ApplicationVndAnki, + ApplicationVndAnserWebCertificateIssueInitiation, + ApplicationVndAntixGameComponent, + ApplicationVndApacheArrowFile, + ApplicationVndApacheArrowStream, + ApplicationVndApacheThriftBinary, + ApplicationVndApacheThriftCompact, + ApplicationVndApacheThriftJson, + ApplicationVndApexlang, + ApplicationVndApiJson, + ApplicationVndAplextorWarrpJson, + ApplicationVndApothekendeReservationJson, + ApplicationVndAppleInstallerXml, + ApplicationVndAppleKeynote, + ApplicationVndAppleMpegurl, + ApplicationVndAppleNumbers, + ApplicationVndApplePages, + ApplicationVndAristanetworksSwi, + ApplicationVndArtisanJson, + ApplicationVndArtsquare, + ApplicationVndAstraeaSoftwareIota, + ApplicationVndAudiograph, + ApplicationVndAutopackage, + ApplicationVndAvalonJson, + ApplicationVndAvistarXml, + ApplicationVndBalsamiqBmmlXml, + ApplicationVndBananaAccounting, + ApplicationVndBbfUspError, + ApplicationVndBbfUspMsg, + ApplicationVndBbfUspMsgJson, + ApplicationVndBalsamiqBmpr, + ApplicationVndBekitzurStechJson, + ApplicationVndBelightsoftLhzdZip, + ApplicationVndBelightsoftLhzlZip, + ApplicationVndBintMedContent, + ApplicationVndBiopaxRdfXml, + ApplicationVndBlinkIdbValueWrapper, + ApplicationVndBlueiceMultipass, + ApplicationVndBluetoothEpOob, + ApplicationVndBluetoothLeOob, + ApplicationVndBmi, + ApplicationVndBpf, + ApplicationVndBpf3, + ApplicationVndBusinessobjects, + ApplicationVndByuUapiJson, + ApplicationVndCabJscript, + ApplicationVndCanonCpdl, + ApplicationVndCanonLips, + ApplicationVndCapasystemsPgJson, + ApplicationVndCendioThinlincClientconf, + ApplicationVndCenturySystemsTcpStream, + ApplicationVndChemdrawXml, + ApplicationVndChessPgn, + ApplicationVndChipnutsKaraokeMmd, + ApplicationVndCiedi, + ApplicationVndCinderella, + ApplicationVndCirpackIsdnExt, + ApplicationVndCitationstylesStyleXml, + ApplicationVndClaymore, + ApplicationVndCloantoRp9, + ApplicationVndClonkC4group, + ApplicationVndCluetrustCartomobileConfig, + ApplicationVndCluetrustCartomobileConfigPkg, + ApplicationVndCncfHelmChartContentV1TarGzip, + ApplicationVndCncfHelmChartProvenanceV1Prov, + ApplicationVndCncfHelmConfigV1Json, + ApplicationVndCoffeescript, + ApplicationVndCollabioXodocumentsDocument, + ApplicationVndCollabioXodocumentsDocumentTemplate, + ApplicationVndCollabioXodocumentsPresentation, + ApplicationVndCollabioXodocumentsPresentationTemplate, + ApplicationVndCollabioXodocumentsSpreadsheet, + ApplicationVndCollabioXodocumentsSpreadsheetTemplate, + ApplicationVndCollectionDocJson, + ApplicationVndCollectionJson, + ApplicationVndCollectionNextJson, + ApplicationVndComicbookRar, + ApplicationVndComicbookZip, + ApplicationVndCommerceBattelle, + ApplicationVndCommonspace, + ApplicationVndCoreosIgnitionJson, + ApplicationVndCosmocaller, + ApplicationVndContactCmsg, + ApplicationVndCrickClicker, + ApplicationVndCrickClickerKeyboard, + ApplicationVndCrickClickerPalette, + ApplicationVndCrickClickerTemplate, + ApplicationVndCrickClickerWordbank, + ApplicationVndCriticaltoolsWbsXml, + ApplicationVndCryptiiPipeJson, + ApplicationVndCryptoShadeFile, + ApplicationVndCryptomatorEncrypted, + ApplicationVndCryptomatorVault, + ApplicationVndCtcPosml, + ApplicationVndCtctWsXml, + ApplicationVndCupsPdf, + ApplicationVndCupsPostscript, + ApplicationVndCupsPpd, + ApplicationVndCupsRaster, + ApplicationVndCupsRaw, + ApplicationVndCurl, + ApplicationVndCyanDeanRootXml, + ApplicationVndCybank, + ApplicationVndCyclonedxJson, + ApplicationVndCyclonedxXml, + ApplicationVndD2lCoursepackage1p0Zip, + ApplicationVndD3mDataset, + ApplicationVndD3mProblem, + ApplicationVndDart, + ApplicationVndDataVisionRdz, + ApplicationVndDatalog, + ApplicationVndDatapackageJson, + ApplicationVndDataresourceJson, + ApplicationVndDbf, + ApplicationVndDebianBinaryPackage, + ApplicationVndDeceData, + ApplicationVndDeceTtmlXml, + ApplicationVndDeceUnspecified, + ApplicationVndDeceZip, + ApplicationVndDenovoFcselayoutLink, + ApplicationVndDesmumeMovie, + ApplicationVndDirBiPlateDlNosuffix, + ApplicationVndDmDelegationXml, + ApplicationVndDna, + ApplicationVndDocumentJson, + ApplicationVndDolbyMobile1, + ApplicationVndDolbyMobile2, + ApplicationVndDoremirScorecloudBinaryDocument, + ApplicationVndDpgraph, + ApplicationVndDreamfactory, + ApplicationVndDriveJson, + ApplicationVndDtgLocal, + ApplicationVndDtgLocalFlash, + ApplicationVndDtgLocalHtml, + ApplicationVndDvbAit, + ApplicationVndDvbDvbislXml, + ApplicationVndDvbDvbj, + ApplicationVndDvbEsgcontainer, + ApplicationVndDvbIpdcdftnotifaccess, + ApplicationVndDvbIpdcesgaccess, + ApplicationVndDvbIpdcesgaccess2, + ApplicationVndDvbIpdcesgpdd, + ApplicationVndDvbIpdcroaming, + ApplicationVndDvbIptvAlfecBase, + ApplicationVndDvbIptvAlfecEnhancement, + ApplicationVndDvbNotifAggregateRootXml, + ApplicationVndDvbNotifContainerXml, + ApplicationVndDvbNotifGenericXml, + ApplicationVndDvbNotifIaMsglistXml, + ApplicationVndDvbNotifIaRegistrationRequestXml, + ApplicationVndDvbNotifIaRegistrationResponseXml, + ApplicationVndDvbNotifInitXml, + ApplicationVndDvbPfr, + ApplicationVndDvbService, + ApplicationVndDxr, + ApplicationVndDynageo, + ApplicationVndDzr, + ApplicationVndEasykaraokeCdgdownload, + ApplicationVndEcipRlp, + ApplicationVndEcdisUpdate, + ApplicationVndEclipseDittoJson, + ApplicationVndEcowinChart, + ApplicationVndEcowinFilerequest, + ApplicationVndEcowinFileupdate, + ApplicationVndEcowinSeries, + ApplicationVndEcowinSeriesrequest, + ApplicationVndEcowinSeriesupdate, + ApplicationVndEfiImg, + ApplicationVndEfiIso, + ApplicationVndElnZip, + ApplicationVndEmclientAccessrequestXml, + ApplicationVndEnliven, + ApplicationVndEnphaseEnvoy, + ApplicationVndEprintsDataXml, + ApplicationVndEpsonEsf, + ApplicationVndEpsonMsf, + ApplicationVndEpsonQuickanime, + ApplicationVndEpsonSalt, + ApplicationVndEpsonSsf, + ApplicationVndEricssonQuickcall, + ApplicationVndEspassEspassZip, + ApplicationVndEszigno3Xml, + ApplicationVndEtsiAocXml, + ApplicationVndEtsiAsicSZip, + ApplicationVndEtsiAsicEZip, + ApplicationVndEtsiCugXml, + ApplicationVndEtsiIptvcommandXml, + ApplicationVndEtsiIptvdiscoveryXml, + ApplicationVndEtsiIptvprofileXml, + ApplicationVndEtsiIptvsadBcXml, + ApplicationVndEtsiIptvsadCodXml, + ApplicationVndEtsiIptvsadNpvrXml, + ApplicationVndEtsiIptvserviceXml, + ApplicationVndEtsiIptvsyncXml, + ApplicationVndEtsiIptvueprofileXml, + ApplicationVndEtsiMcidXml, + ApplicationVndEtsiMheg5, + ApplicationVndEtsiOverloadControlPolicyDatasetXml, + ApplicationVndEtsiPstnXml, + ApplicationVndEtsiSciXml, + ApplicationVndEtsiSimservsXml, + ApplicationVndEtsiTimestampToken, + ApplicationVndEtsiTslXml, + ApplicationVndEtsiTslDer, + ApplicationVndEuKasparianCarJson, + ApplicationVndEudoraData, + ApplicationVndEvolvEcigProfile, + ApplicationVndEvolvEcigSettings, + ApplicationVndEvolvEcigTheme, + ApplicationVndExstreamEmpowerZip, + ApplicationVndExstreamPackage, + ApplicationVndEzpixAlbum, + ApplicationVndEzpixPackage, + ApplicationVndFSecureMobile, + ApplicationVndFastcopyDiskImage, + ApplicationVndFamilysearchGedcomZip, + ApplicationVndFdsnMseed, + ApplicationVndFdsnSeed, + ApplicationVndFfsns, + ApplicationVndFiclabFlbZip, + ApplicationVndFilmitZfc, + ApplicationVndFints, + ApplicationVndFiremonkeysCloudcell, + ApplicationVndFlographit, + ApplicationVndFluxtimeClip, + ApplicationVndFontFontforgeSfd, + ApplicationVndFramemaker, + ApplicationVndFscWeblaunch, + ApplicationVndFujifilmFbDocuworks, + ApplicationVndFujifilmFbDocuworksBinder, + ApplicationVndFujifilmFbDocuworksContainer, + ApplicationVndFujifilmFbJfiXml, + ApplicationVndFujitsuOasys, + ApplicationVndFujitsuOasys2, + ApplicationVndFujitsuOasys3, + ApplicationVndFujitsuOasysgp, + ApplicationVndFujitsuOasysprs, + ApplicationVndFujixeroxArt4, + ApplicationVndFujixeroxArtEx, + ApplicationVndFujixeroxDdd, + ApplicationVndFujixeroxDocuworks, + ApplicationVndFujixeroxDocuworksBinder, + ApplicationVndFujixeroxDocuworksContainer, + ApplicationVndFujixeroxHbpl, + ApplicationVndFutMisnet, + ApplicationVndFutoinCbor, + ApplicationVndFutoinJson, + ApplicationVndFuzzysheet, + ApplicationVndGenomatixTuxedo, + ApplicationVndGenozip, + ApplicationVndGenticsGrdJson, + ApplicationVndGentooCatmetadataXml, + ApplicationVndGentooEbuild, + ApplicationVndGentooEclass, + ApplicationVndGentooGpkg, + ApplicationVndGentooManifest, + ApplicationVndGentooXpak, + ApplicationVndGentooPkgmetadataXml, + ApplicationVndGeogebraFile, + ApplicationVndGeogebraSlides, + ApplicationVndGeogebraTool, + ApplicationVndGeometryExplorer, + ApplicationVndGeonext, + ApplicationVndGeoplan, + ApplicationVndGeospace, + ApplicationVndGerber, + ApplicationVndGlobalplatformCardContentMgt, + ApplicationVndGlobalplatformCardContentMgtResponse, + ApplicationVndGnuTalerExchangeJson, + ApplicationVndGnuTalerMerchantJson, + ApplicationVndGoogleEarthKmlXml, + ApplicationVndGoogleEarthKmz, + ApplicationVndGovSkEFormXml, + ApplicationVndGovSkEFormZip, + ApplicationVndGovSkXmldatacontainerXml, + ApplicationVndGpxseeMapXml, + ApplicationVndGrafeq, + ApplicationVndGridmp, + ApplicationVndGrooveAccount, + ApplicationVndGrooveHelp, + ApplicationVndGrooveIdentityMessage, + ApplicationVndGrooveInjector, + ApplicationVndGrooveToolMessage, + ApplicationVndGrooveToolTemplate, + ApplicationVndGrooveVcard, + ApplicationVndHalJson, + ApplicationVndHalXml, + ApplicationVndHandheldEntertainmentXml, + ApplicationVndHbci, + ApplicationVndHcJson, + ApplicationVndHclBireports, + ApplicationVndHdt, + ApplicationVndHerokuJson, + ApplicationVndHheLessonPlayer, + ApplicationVndHpHpgl, + ApplicationVndHpHpid, + ApplicationVndHpHps, + ApplicationVndHpJlyt, + ApplicationVndHpPcl, + ApplicationVndHpPclxl, + ApplicationVndHsl, + ApplicationVndHttphone, + ApplicationVndHydrostatixSofData, + ApplicationVndHyperItemJson, + ApplicationVndHyperJson, + ApplicationVndHyperdriveJson, + ApplicationVndHzn3dCrossword, + ApplicationVndIbmElectronicMedia, + ApplicationVndIbmMinipay, + ApplicationVndIbmRightsManagement, + ApplicationVndIbmSecureContainer, + ApplicationVndIccprofile, + ApplicationVndIeee1905, + ApplicationVndIgloader, + ApplicationVndImagemeterFolderZip, + ApplicationVndImagemeterImageZip, + ApplicationVndImmervisionIvp, + ApplicationVndImmervisionIvu, + ApplicationVndImsImsccv1p1, + ApplicationVndImsImsccv1p2, + ApplicationVndImsImsccv1p3, + ApplicationVndImsLisV2ResultJson, + ApplicationVndImsLtiV2ToolconsumerprofileJson, + ApplicationVndImsLtiV2ToolproxyIdJson, + ApplicationVndImsLtiV2ToolproxyJson, + ApplicationVndImsLtiV2ToolsettingsJson, + ApplicationVndImsLtiV2ToolsettingsSimpleJson, + ApplicationVndInformedcontrolRmsXml, + ApplicationVndInfotechProject, + ApplicationVndInfotechProjectXml, + ApplicationVndInnopathWampNotification, + ApplicationVndInsorsIgm, + ApplicationVndInterconFormnet, + ApplicationVndIntergeo, + ApplicationVndIntertrustDigibox, + ApplicationVndIntertrustNncp, + ApplicationVndIntuQbo, + ApplicationVndIntuQfx, + ApplicationVndIpfsIpnsRecord, + ApplicationVndIpldCar, + ApplicationVndIpldDagCbor, + ApplicationVndIpldDagJson, + ApplicationVndIpldRaw, + ApplicationVndIptcG2CatalogitemXml, + ApplicationVndIptcG2ConceptitemXml, + ApplicationVndIptcG2KnowledgeitemXml, + ApplicationVndIptcG2NewsitemXml, + ApplicationVndIptcG2NewsmessageXml, + ApplicationVndIptcG2PackageitemXml, + ApplicationVndIptcG2PlanningitemXml, + ApplicationVndIpunpluggedRcprofile, + ApplicationVndIrepositoryPackageXml, + ApplicationVndIsXpr, + ApplicationVndIsacFcs, + ApplicationVndJam, + ApplicationVndIso1178310Zip, + ApplicationVndJapannetDirectoryService, + ApplicationVndJapannetJpnstoreWakeup, + ApplicationVndJapannetPaymentWakeup, + ApplicationVndJapannetRegistration, + ApplicationVndJapannetRegistrationWakeup, + ApplicationVndJapannetSetstoreWakeup, + ApplicationVndJapannetVerification, + ApplicationVndJapannetVerificationWakeup, + ApplicationVndJcpJavameMidletRms, + ApplicationVndJisp, + ApplicationVndJoostJodaArchive, + ApplicationVndJskIsdnNgn, + ApplicationVndKahootz, + ApplicationVndKdeKarbon, + ApplicationVndKdeKchart, + ApplicationVndKdeKformula, + ApplicationVndKdeKivio, + ApplicationVndKdeKontour, + ApplicationVndKdeKpresenter, + ApplicationVndKdeKspread, + ApplicationVndKdeKword, + ApplicationVndKenameaapp, + ApplicationVndKidspiration, + ApplicationVndKinar, + ApplicationVndKoan, + ApplicationVndKodakDescriptor, + ApplicationVndLas, + ApplicationVndLasLasJson, + ApplicationVndLasLasXml, + ApplicationVndLaszip, + ApplicationVndLeapJson, + ApplicationVndLibertyRequestXml, + ApplicationVndLlamagraphicsLifeBalanceDesktop, + ApplicationVndLlamagraphicsLifeBalanceExchangeXml, + ApplicationVndLogipipeCircuitZip, + ApplicationVndLoom, + ApplicationVndLotus123, + ApplicationVndLotusApproach, + ApplicationVndLotusFreelance, + ApplicationVndLotusNotes, + ApplicationVndLotusOrganizer, + ApplicationVndLotusScreencam, + ApplicationVndLotusWordpro, + ApplicationVndMacportsPortpkg, + ApplicationVndMapboxVectorTile, + ApplicationVndMarlinDrmActiontokenXml, + ApplicationVndMarlinDrmConftokenXml, + ApplicationVndMarlinDrmLicenseXml, + ApplicationVndMarlinDrmMdcf, + ApplicationVndMasonJson, + ApplicationVndMaxarArchive3tzZip, + ApplicationVndMaxmindMaxmindDb, + ApplicationVndMcd, + ApplicationVndMdl, + ApplicationVndMdlMbsdf, + ApplicationVndMedcalcdata, + ApplicationVndMediastationCdkey, + ApplicationVndMedicalholodeckRecordxr, + ApplicationVndMeridianSlingshot, + ApplicationVndMfer, + ApplicationVndMfmp, + ApplicationVndMicroJson, + ApplicationVndMicrografxFlo, + ApplicationVndMicrografxIgx, + ApplicationVndMicrosoftPortableExecutable, + ApplicationVndMicrosoftWindowsThumbnailCache, + ApplicationVndMieleJson, + ApplicationVndMif, + ApplicationVndMinisoftHp3000Save, + ApplicationVndMitsubishiMistyGuardTrustweb, + ApplicationVndMobiusDaf, + ApplicationVndMobiusDis, + ApplicationVndMobiusMbk, + ApplicationVndMobiusMqy, + ApplicationVndMobiusMsl, + ApplicationVndMobiusPlc, + ApplicationVndMobiusTxf, + ApplicationVndModl, + ApplicationVndMophunApplication, + ApplicationVndMophunCertificate, + ApplicationVndMotorolaFlexsuite, + ApplicationVndMotorolaFlexsuiteAdsi, + ApplicationVndMotorolaFlexsuiteFis, + ApplicationVndMotorolaFlexsuiteGotap, + ApplicationVndMotorolaFlexsuiteKmr, + ApplicationVndMotorolaFlexsuiteTtc, + ApplicationVndMotorolaFlexsuiteWem, + ApplicationVndMotorolaIprm, + ApplicationVndMozillaXulXml, + ApplicationVndMsArtgalry, + ApplicationVndMsAsf, + ApplicationVndMsCabCompressed, + ApplicationVndMs3mfdocument, + ApplicationVndMsExcel, + ApplicationVndMsExcelAddinMacroenabled12, + ApplicationVndMsExcelSheetBinaryMacroenabled12, + ApplicationVndMsExcelSheetMacroenabled12, + ApplicationVndMsExcelTemplateMacroenabled12, + ApplicationVndMsFontobject, + ApplicationVndMsHtmlhelp, + ApplicationVndMsIms, + ApplicationVndMsLrm, + ApplicationVndMsOfficeActivexXml, + ApplicationVndMsOfficetheme, + ApplicationVndMsPlayreadyInitiatorXml, + ApplicationVndMsPowerpoint, + ApplicationVndMsPowerpointAddinMacroenabled12, + ApplicationVndMsPowerpointPresentationMacroenabled12, + ApplicationVndMsPowerpointSlideMacroenabled12, + ApplicationVndMsPowerpointSlideshowMacroenabled12, + ApplicationVndMsPowerpointTemplateMacroenabled12, + ApplicationVndMsPrintdevicecapabilitiesXml, + ApplicationVndMsPrintschematicketXml, + ApplicationVndMsProject, + ApplicationVndMsTnef, + ApplicationVndMsWindowsDevicepairing, + ApplicationVndMsWindowsNwprintingOob, + ApplicationVndMsWindowsPrinterpairing, + ApplicationVndMsWindowsWsdOob, + ApplicationVndMsWmdrmLicChlgReq, + ApplicationVndMsWmdrmLicResp, + ApplicationVndMsWmdrmMeterChlgReq, + ApplicationVndMsWmdrmMeterResp, + ApplicationVndMsWordDocumentMacroenabled12, + ApplicationVndMsWordTemplateMacroenabled12, + ApplicationVndMsWorks, + ApplicationVndMsWpl, + ApplicationVndMsXpsdocument, + ApplicationVndMsaDiskImage, + ApplicationVndMseq, + ApplicationVndMsign, + ApplicationVndMultiadCreator, + ApplicationVndMultiadCreatorCif, + ApplicationVndMusician, + ApplicationVndMusicNiff, + ApplicationVndMuveeStyle, + ApplicationVndMynfc, + ApplicationVndNacamarYbridJson, + ApplicationVndNcdControl, + ApplicationVndNcdReference, + ApplicationVndNearstInvJson, + ApplicationVndNebumindLine, + ApplicationVndNervana, + ApplicationVndNetfpx, + ApplicationVndNeurolanguageNlu, + ApplicationVndNimn, + ApplicationVndNintendoSnesRom, + ApplicationVndNintendoNitroRom, + ApplicationVndNitf, + ApplicationVndNoblenetDirectory, + ApplicationVndNoblenetSealer, + ApplicationVndNoblenetWeb, + ApplicationVndNokiaCatalogs, + ApplicationVndNokiaConmlWbxml, + ApplicationVndNokiaConmlXml, + ApplicationVndNokiaIptvConfigXml, + ApplicationVndNokiaIsdsRadioPresets, + ApplicationVndNokiaLandmarkWbxml, + ApplicationVndNokiaLandmarkXml, + ApplicationVndNokiaLandmarkcollectionXml, + ApplicationVndNokiaNcd, + ApplicationVndNokiaNGageAcXml, + ApplicationVndNokiaNGageData, + ApplicationVndNokiaPcdWbxml, + ApplicationVndNokiaPcdXml, + ApplicationVndNokiaRadioPreset, + ApplicationVndNokiaRadioPresets, + ApplicationVndNovadigmEdm, + ApplicationVndNovadigmEdx, + ApplicationVndNovadigmExt, + ApplicationVndNttLocalContentShare, + ApplicationVndNttLocalFileTransfer, + ApplicationVndNttLocalOgwRemoteAccess, + ApplicationVndNttLocalSipTaRemote, + ApplicationVndNttLocalSipTaTcpStream, + ApplicationVndOasisOpendocumentBase, + ApplicationVndOasisOpendocumentChart, + ApplicationVndOasisOpendocumentChartTemplate, + ApplicationVndOasisOpendocumentFormula, + ApplicationVndOasisOpendocumentFormulaTemplate, + ApplicationVndOasisOpendocumentGraphics, + ApplicationVndOasisOpendocumentGraphicsTemplate, + ApplicationVndOasisOpendocumentImage, + ApplicationVndOasisOpendocumentImageTemplate, + ApplicationVndOasisOpendocumentPresentation, + ApplicationVndOasisOpendocumentPresentationTemplate, + ApplicationVndOasisOpendocumentSpreadsheet, + ApplicationVndOasisOpendocumentSpreadsheetTemplate, + ApplicationVndOasisOpendocumentText, + ApplicationVndOasisOpendocumentTextMaster, + ApplicationVndOasisOpendocumentTextMasterTemplate, + ApplicationVndOasisOpendocumentTextTemplate, + ApplicationVndOasisOpendocumentTextWeb, + ApplicationVndObn, + ApplicationVndOcfCbor, + ApplicationVndOciImageManifestV1Json, + ApplicationVndOftnL10nJson, + ApplicationVndOipfContentaccessdownloadXml, + ApplicationVndOipfContentaccessstreamingXml, + ApplicationVndOipfCspgHexbinary, + ApplicationVndOipfDaeSvgXml, + ApplicationVndOipfDaeXhtmlXml, + ApplicationVndOipfMippvcontrolmessageXml, + ApplicationVndOipfPaeGem, + ApplicationVndOipfSpdiscoveryXml, + ApplicationVndOipfSpdlistXml, + ApplicationVndOipfUeprofileXml, + ApplicationVndOipfUserprofileXml, + ApplicationVndOlpcSugar, + ApplicationVndOmaBcastAssociatedProcedureParameterXml, + ApplicationVndOmaBcastDrmTriggerXml, + ApplicationVndOmaBcastImdXml, + ApplicationVndOmaBcastLtkm, + ApplicationVndOmaBcastNotificationXml, + ApplicationVndOmaBcastProvisioningtrigger, + ApplicationVndOmaBcastSgboot, + ApplicationVndOmaBcastSgddXml, + ApplicationVndOmaBcastSgdu, + ApplicationVndOmaBcastSimpleSymbolContainer, + ApplicationVndOmaBcastSmartcardTriggerXml, + ApplicationVndOmaBcastSprovXml, + ApplicationVndOmaBcastStkm, + ApplicationVndOmaCabAddressBookXml, + ApplicationVndOmaCabFeatureHandlerXml, + ApplicationVndOmaCabPccXml, + ApplicationVndOmaCabSubsInviteXml, + ApplicationVndOmaCabUserPrefsXml, + ApplicationVndOmaDcd, + ApplicationVndOmaDcdc, + ApplicationVndOmaDd2Xml, + ApplicationVndOmaDrmRisdXml, + ApplicationVndOmaGroupUsageListXml, + ApplicationVndOmaLwm2mCbor, + ApplicationVndOmaLwm2mJson, + ApplicationVndOmaLwm2mTlv, + ApplicationVndOmaPalXml, + ApplicationVndOmaPocDetailedProgressReportXml, + ApplicationVndOmaPocFinalReportXml, + ApplicationVndOmaPocGroupsXml, + ApplicationVndOmaPocInvocationDescriptorXml, + ApplicationVndOmaPocOptimizedProgressReportXml, + ApplicationVndOmaPush, + ApplicationVndOmaScidmMessagesXml, + ApplicationVndOmaXcapDirectoryXml, + ApplicationVndOmadsEmailXml, + ApplicationVndOmadsFileXml, + ApplicationVndOmadsFolderXml, + ApplicationVndOmalocSuplInit, + ApplicationVndOmaScwsConfig, + ApplicationVndOmaScwsHttpRequest, + ApplicationVndOmaScwsHttpResponse, + ApplicationVndOnepager, + ApplicationVndOnepagertamp, + ApplicationVndOnepagertamx, + ApplicationVndOnepagertat, + ApplicationVndOnepagertatp, + ApplicationVndOnepagertatx, + ApplicationVndOnvifMetadata, + ApplicationVndOpenbloxGameBinary, + ApplicationVndOpenbloxGameXml, + ApplicationVndOpeneyeOeb, + ApplicationVndOpenstreetmapDataXml, + ApplicationVndOpentimestampsOts, + ApplicationVndOpenxmlformatsOfficedocumentCustomPropertiesXml, + ApplicationVndOpenxmlformatsOfficedocumentCustomxmlpropertiesXml, + ApplicationVndOpenxmlformatsOfficedocumentDrawingXml, + ApplicationVndOpenxmlformatsOfficedocumentDrawingmlChartXml, + ApplicationVndOpenxmlformatsOfficedocumentDrawingmlChartshapesXml, + ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramcolorsXml, + ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramdataXml, + ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramlayoutXml, + ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramstyleXml, + ApplicationVndOpenxmlformatsOfficedocumentExtendedPropertiesXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlCommentauthorsXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlCommentsXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlHandoutmasterXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlNotesmasterXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlNotesslideXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPresentation, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPresentationMainXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPrespropsXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlide, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlidelayoutXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlidemasterXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideshow, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideshowMainXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideupdateinfoXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTablestylesXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTagsXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTemplate, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTemplateMainXml, + ApplicationVndOpenxmlformatsOfficedocumentPresentationmlViewpropsXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlCalcchainXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlChartsheetXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlCommentsXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlConnectionsXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlDialogsheetXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlExternallinkXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivotcachedefinitionXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivotcacherecordsXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivottableXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlQuerytableXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlRevisionheadersXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlRevisionlogXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSharedstringsXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheetMainXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheetmetadataXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlStylesXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTableXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTablesinglecellsXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTemplate, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTemplateMainXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlUsernamesXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlVolatiledependenciesXml, + ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlWorksheetXml, + ApplicationVndOpenxmlformatsOfficedocumentThemeXml, + ApplicationVndOpenxmlformatsOfficedocumentThemeoverrideXml, + ApplicationVndOpenxmlformatsOfficedocumentVmldrawing, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlCommentsXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocument, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocumentGlossaryXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocumentMainXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlEndnotesXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFonttableXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFooterXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFootnotesXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlNumberingXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlSettingsXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlStylesXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlTemplate, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlTemplateMainXml, + ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlWebsettingsXml, + ApplicationVndOpenxmlformatsPackageCorePropertiesXml, + ApplicationVndOpenxmlformatsPackageDigitalSignatureXmlsignatureXml, + ApplicationVndOpenxmlformatsPackageRelationshipsXml, + ApplicationVndOracleResourceJson, + ApplicationVndOrangeIndata, + ApplicationVndOsaNetdeploy, + ApplicationVndOsgeoMapguidePackage, + ApplicationVndOsgiBundle, + ApplicationVndOsgiDp, + ApplicationVndOsgiSubsystem, + ApplicationVndOtpsCtKipXml, + ApplicationVndOxliCountgraph, + ApplicationVndPagerdutyJson, + ApplicationVndPalm, + ApplicationVndPanoply, + ApplicationVndPaosXml, + ApplicationVndPatentdive, + ApplicationVndPatientecommsdoc, + ApplicationVndPawaafile, + ApplicationVndPcos, + ApplicationVndPgFormat, + ApplicationVndPgOsasli, + ApplicationVndPiaccessApplicationLicence, + ApplicationVndPicsel, + ApplicationVndPmiWidget, + ApplicationVndPocGroupAdvertisementXml, + ApplicationVndPocketlearn, + ApplicationVndPowerbuilder6, + ApplicationVndPowerbuilder6S, + ApplicationVndPowerbuilder7, + ApplicationVndPowerbuilder75, + ApplicationVndPowerbuilder75S, + ApplicationVndPowerbuilder7S, + ApplicationVndPreminet, + ApplicationVndPreviewsystemsBox, + ApplicationVndProteusMagazine, + ApplicationVndPsfs, + ApplicationVndPtMundusmundi, + ApplicationVndPublishareDeltaTree, + ApplicationVndPviPtid1, + ApplicationVndPwgMultiplexed, + ApplicationVndPwgXhtmlPrintXml, + ApplicationVndQualcommBrewAppRes, + ApplicationVndQuarantainenet, + ApplicationVndQuarkQuarkxpress, + ApplicationVndQuobjectQuoxdocument, + ApplicationVndRadisysMomlXml, + ApplicationVndRadisysMsmlAuditConfXml, + ApplicationVndRadisysMsmlAuditConnXml, + ApplicationVndRadisysMsmlAuditDialogXml, + ApplicationVndRadisysMsmlAuditStreamXml, + ApplicationVndRadisysMsmlAuditXml, + ApplicationVndRadisysMsmlConfXml, + ApplicationVndRadisysMsmlDialogBaseXml, + ApplicationVndRadisysMsmlDialogFaxDetectXml, + ApplicationVndRadisysMsmlDialogFaxSendrecvXml, + ApplicationVndRadisysMsmlDialogGroupXml, + ApplicationVndRadisysMsmlDialogSpeechXml, + ApplicationVndRadisysMsmlDialogTransformXml, + ApplicationVndRadisysMsmlDialogXml, + ApplicationVndRadisysMsmlXml, + ApplicationVndRainstorData, + ApplicationVndRapid, + ApplicationVndRar, + ApplicationVndRealvncBed, + ApplicationVndRecordareMusicxml, + ApplicationVndRecordareMusicxmlXml, + ApplicationVndRenlearnRlprint, + ApplicationVndResilientLogic, + ApplicationVndRestfulJson, + ApplicationVndRigCryptonote, + ApplicationVndRoute66Link66Xml, + ApplicationVndRs274x, + ApplicationVndRuckusDownload, + ApplicationVndS3sms, + ApplicationVndSailingtrackerTrack, + ApplicationVndSar, + ApplicationVndSbmCid, + ApplicationVndSbmMid2, + ApplicationVndScribus, + ApplicationVndSealed3df, + ApplicationVndSealedCsf, + ApplicationVndSealedDoc, + ApplicationVndSealedEml, + ApplicationVndSealedMht, + ApplicationVndSealedNet, + ApplicationVndSealedPpt, + ApplicationVndSealedTiff, + ApplicationVndSealedXls, + ApplicationVndSealedmediaSoftsealHtml, + ApplicationVndSealedmediaSoftsealPdf, + ApplicationVndSeemail, + ApplicationVndSeisJson, + ApplicationVndSema, + ApplicationVndSemd, + ApplicationVndSemf, + ApplicationVndShadeSaveFile, + ApplicationVndShanaInformedFormdata, + ApplicationVndShanaInformedFormtemplate, + ApplicationVndShanaInformedInterchange, + ApplicationVndShanaInformedPackage, + ApplicationVndShootproofJson, + ApplicationVndShopkickJson, + ApplicationVndShp, + ApplicationVndShx, + ApplicationVndSigrokSession, + ApplicationVndSimtechMindmapper, + ApplicationVndSirenJson, + ApplicationVndSmaf, + ApplicationVndSmartNotebook, + ApplicationVndSmartTeacher, + ApplicationVndSmintioPortalsArchive, + ApplicationVndSnesdevPageTable, + ApplicationVndSoftware602FillerFormXml, + ApplicationVndSoftware602FillerFormXmlZip, + ApplicationVndSolentSdkmXml, + ApplicationVndSpotfireDxp, + ApplicationVndSpotfireSfs, + ApplicationVndSqlite3, + ApplicationVndSssCod, + ApplicationVndSssDtf, + ApplicationVndSssNtf, + ApplicationVndStepmaniaPackage, + ApplicationVndStepmaniaStepchart, + ApplicationVndStreetStream, + ApplicationVndSunWadlXml, + ApplicationVndSusCalendar, + ApplicationVndSvd, + ApplicationVndSwiftviewIcs, + ApplicationVndSybylMol2, + ApplicationVndSycleXml, + ApplicationVndSyftJson, + ApplicationVndSyncmlDmNotification, + ApplicationVndSyncmlDmddfXml, + ApplicationVndSyncmlDmtndsWbxml, + ApplicationVndSyncmlDmtndsXml, + ApplicationVndSyncmlDmddfWbxml, + ApplicationVndSyncmlDmWbxml, + ApplicationVndSyncmlDmXml, + ApplicationVndSyncmlDsNotification, + ApplicationVndSyncmlXml, + ApplicationVndTableschemaJson, + ApplicationVndTaoIntentModuleArchive, + ApplicationVndTcpdumpPcap, + ApplicationVndThinkCellPpttcJson, + ApplicationVndTml, + ApplicationVndTmdMediaflexApiXml, + ApplicationVndTmobileLivetv, + ApplicationVndTriOnesource, + ApplicationVndTridTpt, + ApplicationVndTriscapeMxs, + ApplicationVndTrueapp, + ApplicationVndTruedoc, + ApplicationVndUbisoftWebplayer, + ApplicationVndUfdl, + ApplicationVndUiqTheme, + ApplicationVndUmajin, + ApplicationVndUnity, + ApplicationVndUomlXml, + ApplicationVndUplanetAlert, + ApplicationVndUplanetAlertWbxml, + ApplicationVndUplanetBearerChoice, + ApplicationVndUplanetBearerChoiceWbxml, + ApplicationVndUplanetCacheop, + ApplicationVndUplanetCacheopWbxml, + ApplicationVndUplanetChannel, + ApplicationVndUplanetChannelWbxml, + ApplicationVndUplanetList, + ApplicationVndUplanetListcmd, + ApplicationVndUplanetListcmdWbxml, + ApplicationVndUplanetListWbxml, + ApplicationVndUriMap, + ApplicationVndUplanetSignal, + ApplicationVndValveSourceMaterial, + ApplicationVndVcx, + ApplicationVndVdStudy, + ApplicationVndVectorworks, + ApplicationVndVelJson, + ApplicationVndVerimatrixVcas, + ApplicationVndVeritoneAionJson, + ApplicationVndVeryantThin, + ApplicationVndVesEncrypted, + ApplicationVndVidsoftVidconference, + ApplicationVndVisio, + ApplicationVndVisionary, + ApplicationVndVividenceScriptfile, + ApplicationVndVsf, + ApplicationVndWapSic, + ApplicationVndWapSlc, + ApplicationVndWapWbxml, + ApplicationVndWapWmlc, + ApplicationVndWapWmlscriptc, + ApplicationVndWasmflowWafl, + ApplicationVndWebturbo, + ApplicationVndWfaDpp, + ApplicationVndWfaP2p, + ApplicationVndWfaWsc, + ApplicationVndWindowsDevicepairing, + ApplicationVndWmc, + ApplicationVndWmfBootstrap, + ApplicationVndWolframMathematica, + ApplicationVndWolframMathematicaPackage, + ApplicationVndWolframPlayer, + ApplicationVndWordlift, + ApplicationVndWordperfect, + ApplicationVndWqd, + ApplicationVndWrqHp3000Labelled, + ApplicationVndWtStf, + ApplicationVndWvCspXml, + ApplicationVndWvCspWbxml, + ApplicationVndWvSspXml, + ApplicationVndXacmlJson, + ApplicationVndXara, + ApplicationVndXfdl, + ApplicationVndXfdlWebform, + ApplicationVndXmiXml, + ApplicationVndXmpieCpkg, + ApplicationVndXmpieDpkg, + ApplicationVndXmpiePlan, + ApplicationVndXmpiePpkg, + ApplicationVndXmpieXlim, + ApplicationVndYamahaHvDic, + ApplicationVndYamahaHvScript, + ApplicationVndYamahaHvVoice, + ApplicationVndYamahaOpenscoreformatOsfpvgXml, + ApplicationVndYamahaOpenscoreformat, + ApplicationVndYamahaRemoteSetup, + ApplicationVndYamahaSmafAudio, + ApplicationVndYamahaSmafPhrase, + ApplicationVndYamahaThroughNgn, + ApplicationVndYamahaTunnelUdpencap, + ApplicationVndYaoweme, + ApplicationVndYellowriverCustomMenu, + ApplicationVndZul, + ApplicationVndZzazzDeckXml, + ApplicationVoicexmlXml, + ApplicationVoucherCmsJson, + ApplicationVqRtcpxr, + ApplicationWasm, + ApplicationWatcherinfoXml, + ApplicationWebpushOptionsJson, + ApplicationWhoisppQuery, + ApplicationWhoisppResponse, + ApplicationWidget, + ApplicationWita, + ApplicationWordperfect51, + ApplicationWsdlXml, + ApplicationWspolicyXml, + ApplicationXPkiMessage, + ApplicationXWwwFormUrlencoded, + ApplicationXX509CaCert, + ApplicationXX509CaRaCert, + ApplicationXX509NextCaCert, + ApplicationX400Bp, + ApplicationXacmlXml, + ApplicationXcapAttXml, + ApplicationXcapCapsXml, + ApplicationXcapDiffXml, + ApplicationXcapElXml, + ApplicationXcapErrorXml, + ApplicationXcapNsXml, + ApplicationXconConferenceInfoDiffXml, + ApplicationXconConferenceInfoXml, + ApplicationXencXml, + ApplicationXfdf, + ApplicationXhtmlXml, + ApplicationXliffXml, + ApplicationXml, + ApplicationXmlDtd, + ApplicationXmlExternalParsedEntity, + ApplicationXmlPatchXml, + ApplicationXmppXml, + ApplicationXopXml, + ApplicationXsltXml, + ApplicationXvXml, + ApplicationYang, + ApplicationYangDataCbor, + ApplicationYangDataJson, + ApplicationYangDataXml, + ApplicationYangPatchJson, + ApplicationYangPatchXml, + ApplicationYinXml, + ApplicationZip, + ApplicationZlib, + ApplicationZstd, + Audio1dInterleavedParityfec, + Audio32kadpcm, + Audio3gpp, + Audio3gpp2, + AudioAac, + AudioAc3, + AudioAmr, + AudioAmrWbPlus, + AudioAmrWb, + AudioAptx, + AudioAsc, + AudioAtracAdvancedLossless, + AudioAtracX, + AudioAtrac3, + AudioBasic, + AudioBv16, + AudioBv32, + AudioClearmode, + AudioCn, + AudioDat12, + AudioDls, + AudioDsrEs201108, + AudioDsrEs202050, + AudioDsrEs202211, + AudioDsrEs202212, + AudioDv, + AudioDvi4, + AudioEac3, + AudioEncaprtp, + AudioEvrc, + AudioEvrcQcp, + AudioEvrc0, + AudioEvrc1, + AudioEvrcb, + AudioEvrcb0, + AudioEvrcb1, + AudioEvrcnw, + AudioEvrcnw0, + AudioEvrcnw1, + AudioEvrcwb, + AudioEvrcwb0, + AudioEvrcwb1, + AudioEvs, + AudioExample, + AudioFlexfec, + AudioFwdred, + AudioG7110, + AudioG719, + AudioG7221, + AudioG722, + AudioG723, + AudioG72616, + AudioG72624, + AudioG72632, + AudioG72640, + AudioG728, + AudioG729, + AudioG7291, + AudioG729d, + AudioG729e, + AudioGsm, + AudioGsmEfr, + AudioGsmHr08, + AudioIlbc, + AudioIpMrV25, + AudioL8, + AudioL16, + AudioL20, + AudioL24, + AudioLpc, + AudioMelp, + AudioMelp600, + AudioMelp1200, + AudioMelp2400, + AudioMhas, + AudioMobileXmf, + AudioMpa, + AudioMp4, + AudioMp4aLatm, + AudioMpaRobust, + AudioMpeg, + AudioMpeg4Generic, + AudioOgg, + AudioOpus, + AudioParityfec, + AudioPcma, + AudioPcmaWb, + AudioPcmu, + AudioPcmuWb, + AudioPrsSid, + AudioQcelp, + AudioRaptorfec, + AudioRed, + AudioRtpEncAescm128, + AudioRtploopback, + AudioRtpMidi, + AudioRtx, + AudioScip, + AudioSmv, + AudioSmv0, + AudioSmvQcp, + AudioSofa, + AudioSpMidi, + AudioSpeex, + AudioT140c, + AudioT38, + AudioTelephoneEvent, + AudioTetraAcelp, + AudioTetraAcelpBb, + AudioTone, + AudioTsvcis, + AudioUemclip, + AudioUlpfec, + AudioUsac, + AudioVdvi, + AudioVmrWb, + AudioVnd3gppIufp, + AudioVnd4sb, + AudioVndAudiokoz, + AudioVndCelp, + AudioVndCiscoNse, + AudioVndCmlesRadioEvents, + AudioVndCnsAnp1, + AudioVndCnsInf1, + AudioVndDeceAudio, + AudioVndDigitalWinds, + AudioVndDlnaAdts, + AudioVndDolbyHeaac1, + AudioVndDolbyHeaac2, + AudioVndDolbyMlp, + AudioVndDolbyMps, + AudioVndDolbyPl2, + AudioVndDolbyPl2x, + AudioVndDolbyPl2z, + AudioVndDolbyPulse1, + AudioVndDra, + AudioVndDts, + AudioVndDtsHd, + AudioVndDtsUhd, + AudioVndDvbFile, + AudioVndEveradPlj, + AudioVndHnsAudio, + AudioVndLucentVoice, + AudioVndMsPlayreadyMediaPya, + AudioVndNokiaMobileXmf, + AudioVndNortelVbk, + AudioVndNueraEcelp4800, + AudioVndNueraEcelp7470, + AudioVndNueraEcelp9600, + AudioVndOctelSbc, + AudioVndPresonusMultitrack, + AudioVndRhetorex32kadpcm, + AudioVndRip, + AudioVndSealedmediaSoftsealMpeg, + AudioVndVmxCvsd, + AudioVorbis, + AudioVorbisConfig, + FontCollection, + FontOtf, + FontSfnt, + FontTtf, + FontWoff, + FontWoff2, + ImageAces, + ImageApng, + ImageAvci, + ImageAvcs, + ImageAvif, + ImageBmp, + ImageCgm, + ImageDicomRle, + ImageDpx, + ImageEmf, + ImageExample, + ImageFits, + ImageG3fax, + ImageHeic, + ImageHeicSequence, + ImageHeif, + ImageHeifSequence, + ImageHej2k, + ImageHsj2, + ImageJls, + ImageJp2, + ImageJpeg, + ImageJph, + ImageJphc, + ImageJpm, + ImageJpx, + ImageJxr, + ImageJxra, + ImageJxrs, + ImageJxs, + ImageJxsc, + ImageJxsi, + ImageJxss, + ImageKtx, + ImageKtx2, + ImageNaplps, + ImagePng, + ImagePrsBtif, + ImagePrsPti, + ImagePwgRaster, + ImageSvgXml, + ImageT38, + ImageTiff, + ImageTiffFx, + ImageVndAdobePhotoshop, + ImageVndAirzipAcceleratorAzv, + ImageVndCnsInf2, + ImageVndDeceGraphic, + ImageVndDjvu, + ImageVndDwg, + ImageVndDxf, + ImageVndDvbSubtitle, + ImageVndFastbidsheet, + ImageVndFpx, + ImageVndFst, + ImageVndFujixeroxEdmicsMmr, + ImageVndFujixeroxEdmicsRlc, + ImageVndGlobalgraphicsPgb, + ImageVndMicrosoftIcon, + ImageVndMix, + ImageVndMsModi, + ImageVndMozillaApng, + ImageVndNetFpx, + ImageVndPcoB16, + ImageVndRadiance, + ImageVndSealedPng, + ImageVndSealedmediaSoftsealGif, + ImageVndSealedmediaSoftsealJpg, + ImageVndSvf, + ImageVndTencentTap, + ImageVndValveSourceTexture, + ImageVndWapWbmp, + ImageVndXiff, + ImageVndZbrushPcx, + ImageWebp, + ImageWmf, + MessageBhttp, + MessageCpim, + MessageDeliveryStatus, + MessageDispositionNotification, + MessageExample, + MessageFeedbackReport, + MessageGlobal, + MessageGlobalDeliveryStatus, + MessageGlobalDispositionNotification, + MessageGlobalHeaders, + MessageHttp, + MessageImdnXml, + MessageMls, + MessageOhttpReq, + MessageOhttpRes, + MessageSip, + MessageSipfrag, + MessageTrackingStatus, + MessageVndWfaWsc, + Model3mf, + ModelE57, + ModelExample, + ModelGltfBinary, + ModelGltfJson, + ModelJt, + ModelIges, + ModelMtl, + ModelObj, + ModelPrc, + ModelStep, + ModelStepXml, + ModelStepZip, + ModelStepXmlZip, + ModelStl, + ModelU3d, + ModelVndBary, + ModelVndCld, + ModelVndColladaXml, + ModelVndDwf, + ModelVndFlatland3dml, + ModelVndGdl, + ModelVndGsGdl, + ModelVndGtw, + ModelVndMomlXml, + ModelVndMts, + ModelVndOpengex, + ModelVndParasolidTransmitBinary, + ModelVndParasolidTransmitText, + ModelVndPythaPyox, + ModelVndRosetteAnnotatedDataModel, + ModelVndSapVds, + ModelVndUsda, + ModelVndUsdzZip, + ModelVndValveSourceCompiledMap, + ModelVndVtu, + ModelX3dVrml, + ModelX3dFastinfoset, + ModelX3dXml, + MultipartAppledouble, + MultipartByteranges, + MultipartEncrypted, + MultipartExample, + MultipartFormData, + MultipartHeaderSet, + MultipartMultilingual, + MultipartRelated, + MultipartReport, + MultipartSigned, + MultipartVndBintMedPlus, + MultipartVoiceMessage, + MultipartXMixedReplace, + Text1dInterleavedParityfec, + TextCacheManifest, + TextCalendar, + TextCql, + TextCqlExpression, + TextCqlIdentifier, + TextCss, + TextCsv, + TextCsvSchema, + TextDns, + TextEncaprtp, + TextExample, + TextFhirpath, + TextFlexfec, + TextFwdred, + TextGff3, + TextGrammarRefList, + TextHl7v2, + TextHtml, + TextJavascript, + TextJcrCnd, + TextMarkdown, + TextMizar, + TextN3, + TextParameters, + TextParityfec, + TextPlain, + TextProvenanceNotation, + TextPrsFallensteinRst, + TextPrsLinesTag, + TextPrsPropLogic, + TextRaptorfec, + TextRed, + TextRfc822Headers, + TextRtf, + TextRtpEncAescm128, + TextRtploopback, + TextRtx, + TextSgml, + TextShaclc, + TextShex, + TextSpdx, + TextStrings, + TextT140, + TextTabSeparatedValues, + TextTroff, + TextTurtle, + TextUlpfec, + TextUriList, + TextVcard, + TextVndA, + TextVndAbc, + TextVndAsciiArt, + TextVndCurl, + TextVndDebianCopyright, + TextVndDmclientscript, + TextVndDvbSubtitle, + TextVndEsmertecThemeDescriptor, + TextVndExchangeable, + TextVndFamilysearchGedcom, + TextVndFiclabFlt, + TextVndFly, + TextVndFmiFlexstor, + TextVndGml, + TextVndGraphviz, + TextVndHans, + TextVndHgl, + TextVndIn3d3dml, + TextVndIn3dSpot, + TextVndIptcNewsml, + TextVndIptcNitf, + TextVndLatexZ, + TextVndMotorolaReflex, + TextVndMsMediapackage, + TextVndNet2phoneCommcenterCommand, + TextVndRadisysMsmlBasicLayout, + TextVndSenxWarpscript, + TextVndSunJ2meAppDescriptor, + TextVndSosi, + TextVndTrolltechLinguist, + TextVndWapSi, + TextVndWapSl, + TextVndWapWml, + TextVndWapWmlscript, + TextVtt, + TextWgsl, + TextXml, + TextXmlExternalParsedEntity, + Video1dInterleavedParityfec, + Video3gpp, + Video3gpp2, + Video3gppTt, + VideoAv1, + VideoBmpeg, + VideoBt656, + VideoCelb, + VideoDv, + VideoEncaprtp, + VideoExample, + VideoFfv1, + VideoFlexfec, + VideoH261, + VideoH263, + VideoH2631998, + VideoH2632000, + VideoH264, + VideoH264Rcdo, + VideoH264Svc, + VideoH265, + VideoH266, + VideoIsoSegment, + VideoJpeg, + VideoJpeg2000, + VideoJxsv, + VideoMj2, + VideoMp1s, + VideoMp2p, + VideoMp2t, + VideoMp4, + VideoMp4vEs, + VideoMpv, + VideoMpeg4Generic, + VideoNv, + VideoOgg, + VideoParityfec, + VideoPointer, + VideoQuicktime, + VideoRaptorfec, + VideoRaw, + VideoRtpEncAescm128, + VideoRtploopback, + VideoRtx, + VideoScip, + VideoSmpte291, + VideoSmpte292m, + VideoUlpfec, + VideoVc1, + VideoVc2, + VideoVndCctv, + VideoVndDeceHd, + VideoVndDeceMobile, + VideoVndDeceMp4, + VideoVndDecePd, + VideoVndDeceSd, + VideoVndDeceVideo, + VideoVndDirectvMpeg, + VideoVndDirectvMpegTts, + VideoVndDlnaMpegTts, + VideoVndDvbFile, + VideoVndFvt, + VideoVndHnsVideo, + VideoVndIptvforum1dparityfec1010, + VideoVndIptvforum1dparityfec2005, + VideoVndIptvforum2dparityfec1010, + VideoVndIptvforum2dparityfec2005, + VideoVndIptvforumTtsavc, + VideoVndIptvforumTtsmpeg2, + VideoVndMotorolaVideo, + VideoVndMotorolaVideop, + VideoVndMpegurl, + VideoVndMsPlayreadyMediaPyv, + VideoVndNokiaInterleavedMultimedia, + VideoVndNokiaMp4vr, + VideoVndNokiaVideovoip, + VideoVndObjectvideo, + VideoVndRadgamettoolsBink, + VideoVndRadgamettoolsSmacker, + VideoVndSealedMpeg1, + VideoVndSealedMpeg4, + VideoVndSealedSwf, + VideoVndSealedmediaSoftsealMov, + VideoVndUvvuMp4, + VideoVndYoutubeYt, + VideoVndVivo, + VideoVp8, + VideoVp9, +} + +impl std::fmt::Display for Mime { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Mime::Application1dInterleavedParityfec => write!(f, "application/1d-interleaved-parityfec"), + Mime::Application3gpdashQoeReportXml => write!(f, "application/3gpdash-qoe-report+xml"), + Mime::Application3gpphalJson => write!(f, "application/3gppHal+json"), + Mime::Application3gpphalformsJson => write!(f, "application/3gppHalForms+json"), + Mime::Application3gppImsXml => write!(f, "application/3gpp-ims+xml"), + Mime::ApplicationA2l => write!(f, "application/A2L"), + Mime::ApplicationAceCbor => write!(f, "application/ace+cbor"), + Mime::ApplicationAceJson => write!(f, "application/ace+json"), + Mime::ApplicationActivemessage => write!(f, "application/activemessage"), + Mime::ApplicationActivityJson => write!(f, "application/activity+json"), + Mime::ApplicationAifCbor => write!(f, "application/aif+cbor"), + Mime::ApplicationAifJson => write!(f, "application/aif+json"), + Mime::ApplicationAltoCdniJson => write!(f, "application/alto-cdni+json"), + Mime::ApplicationAltoCdnifilterJson => write!(f, "application/alto-cdnifilter+json"), + Mime::ApplicationAltoCostmapJson => write!(f, "application/alto-costmap+json"), + Mime::ApplicationAltoCostmapfilterJson => write!(f, "application/alto-costmapfilter+json"), + Mime::ApplicationAltoDirectoryJson => write!(f, "application/alto-directory+json"), + Mime::ApplicationAltoEndpointpropJson => write!(f, "application/alto-endpointprop+json"), + Mime::ApplicationAltoEndpointpropparamsJson => write!(f, "application/alto-endpointpropparams+json"), + Mime::ApplicationAltoEndpointcostJson => write!(f, "application/alto-endpointcost+json"), + Mime::ApplicationAltoEndpointcostparamsJson => write!(f, "application/alto-endpointcostparams+json"), + Mime::ApplicationAltoErrorJson => write!(f, "application/alto-error+json"), + Mime::ApplicationAltoNetworkmapfilterJson => write!(f, "application/alto-networkmapfilter+json"), + Mime::ApplicationAltoNetworkmapJson => write!(f, "application/alto-networkmap+json"), + Mime::ApplicationAltoPropmapJson => write!(f, "application/alto-propmap+json"), + Mime::ApplicationAltoPropmapparamsJson => write!(f, "application/alto-propmapparams+json"), + Mime::ApplicationAltoUpdatestreamcontrolJson => write!(f, "application/alto-updatestreamcontrol+json"), + Mime::ApplicationAltoUpdatestreamparamsJson => write!(f, "application/alto-updatestreamparams+json"), + Mime::ApplicationAml => write!(f, "application/AML"), + Mime::ApplicationAndrewInset => write!(f, "application/andrew-inset"), + Mime::ApplicationApplefile => write!(f, "application/applefile"), + Mime::ApplicationAtJwt => write!(f, "application/at+jwt"), + Mime::ApplicationAtf => write!(f, "application/ATF"), + Mime::ApplicationAtfx => write!(f, "application/ATFX"), + Mime::ApplicationAtomXml => write!(f, "application/atom+xml"), + Mime::ApplicationAtomcatXml => write!(f, "application/atomcat+xml"), + Mime::ApplicationAtomdeletedXml => write!(f, "application/atomdeleted+xml"), + Mime::ApplicationAtomicmail => write!(f, "application/atomicmail"), + Mime::ApplicationAtomsvcXml => write!(f, "application/atomsvc+xml"), + Mime::ApplicationAtscDwdXml => write!(f, "application/atsc-dwd+xml"), + Mime::ApplicationAtscDynamicEventMessage => write!(f, "application/atsc-dynamic-event-message"), + Mime::ApplicationAtscHeldXml => write!(f, "application/atsc-held+xml"), + Mime::ApplicationAtscRdtJson => write!(f, "application/atsc-rdt+json"), + Mime::ApplicationAtscRsatXml => write!(f, "application/atsc-rsat+xml"), + Mime::ApplicationAtxml => write!(f, "application/ATXML"), + Mime::ApplicationAuthPolicyXml => write!(f, "application/auth-policy+xml"), + Mime::ApplicationAutomationmlAmlXml => write!(f, "application/automationml-aml+xml"), + Mime::ApplicationAutomationmlAmlxZip => write!(f, "application/automationml-amlx+zip"), + Mime::ApplicationBacnetXddZip => write!(f, "application/bacnet-xdd+zip"), + Mime::ApplicationBatchSmtp => write!(f, "application/batch-SMTP"), + Mime::ApplicationBeepXml => write!(f, "application/beep+xml"), + Mime::ApplicationCalendarJson => write!(f, "application/calendar+json"), + Mime::ApplicationCalendarXml => write!(f, "application/calendar+xml"), + Mime::ApplicationCallCompletion => write!(f, "application/call-completion"), + Mime::ApplicationCals1840 => write!(f, "application/CALS-1840"), + Mime::ApplicationCaptiveJson => write!(f, "application/captive+json"), + Mime::ApplicationCbor => write!(f, "application/cbor"), + Mime::ApplicationCborSeq => write!(f, "application/cbor-seq"), + Mime::ApplicationCccex => write!(f, "application/cccex"), + Mime::ApplicationCcmpXml => write!(f, "application/ccmp+xml"), + Mime::ApplicationCcxmlXml => write!(f, "application/ccxml+xml"), + Mime::ApplicationCdaXml => write!(f, "application/cda+xml"), + Mime::ApplicationCdfxXml => write!(f, "application/CDFX+XML"), + Mime::ApplicationCdmiCapability => write!(f, "application/cdmi-capability"), + Mime::ApplicationCdmiContainer => write!(f, "application/cdmi-container"), + Mime::ApplicationCdmiDomain => write!(f, "application/cdmi-domain"), + Mime::ApplicationCdmiObject => write!(f, "application/cdmi-object"), + Mime::ApplicationCdmiQueue => write!(f, "application/cdmi-queue"), + Mime::ApplicationCdni => write!(f, "application/cdni"), + Mime::ApplicationCea => write!(f, "application/CEA"), + Mime::ApplicationCea2018Xml => write!(f, "application/cea-2018+xml"), + Mime::ApplicationCellmlXml => write!(f, "application/cellml+xml"), + Mime::ApplicationCfw => write!(f, "application/cfw"), + Mime::ApplicationCityJson => write!(f, "application/city+json"), + Mime::ApplicationClr => write!(f, "application/clr"), + Mime::ApplicationClueInfoXml => write!(f, "application/clue_info+xml"), + Mime::ApplicationClueXml => write!(f, "application/clue+xml"), + Mime::ApplicationCms => write!(f, "application/cms"), + Mime::ApplicationCnrpXml => write!(f, "application/cnrp+xml"), + Mime::ApplicationCoapGroupJson => write!(f, "application/coap-group+json"), + Mime::ApplicationCoapPayload => write!(f, "application/coap-payload"), + Mime::ApplicationCommonground => write!(f, "application/commonground"), + Mime::ApplicationConciseProblemDetailsCbor => write!(f, "application/concise-problem-details+cbor"), + Mime::ApplicationConferenceInfoXml => write!(f, "application/conference-info+xml"), + Mime::ApplicationCplXml => write!(f, "application/cpl+xml"), + Mime::ApplicationCose => write!(f, "application/cose"), + Mime::ApplicationCoseKey => write!(f, "application/cose-key"), + Mime::ApplicationCoseKeySet => write!(f, "application/cose-key-set"), + Mime::ApplicationCoseX509 => write!(f, "application/cose-x509"), + Mime::ApplicationCsrattrs => write!(f, "application/csrattrs"), + Mime::ApplicationCstaXml => write!(f, "application/csta+xml"), + Mime::ApplicationCstadataXml => write!(f, "application/CSTAdata+xml"), + Mime::ApplicationCsvmJson => write!(f, "application/csvm+json"), + Mime::ApplicationCwl => write!(f, "application/cwl"), + Mime::ApplicationCwlJson => write!(f, "application/cwl+json"), + Mime::ApplicationCwt => write!(f, "application/cwt"), + Mime::ApplicationCybercash => write!(f, "application/cybercash"), + Mime::ApplicationDashXml => write!(f, "application/dash+xml"), + Mime::ApplicationDashPatchXml => write!(f, "application/dash-patch+xml"), + Mime::ApplicationDashdelta => write!(f, "application/dashdelta"), + Mime::ApplicationDavmountXml => write!(f, "application/davmount+xml"), + Mime::ApplicationDcaRft => write!(f, "application/dca-rft"), + Mime::ApplicationDcd => write!(f, "application/DCD"), + Mime::ApplicationDecDx => write!(f, "application/dec-dx"), + Mime::ApplicationDialogInfoXml => write!(f, "application/dialog-info+xml"), + Mime::ApplicationDicom => write!(f, "application/dicom"), + Mime::ApplicationDicomJson => write!(f, "application/dicom+json"), + Mime::ApplicationDicomXml => write!(f, "application/dicom+xml"), + Mime::ApplicationDii => write!(f, "application/DII"), + Mime::ApplicationDit => write!(f, "application/DIT"), + Mime::ApplicationDns => write!(f, "application/dns"), + Mime::ApplicationDnsJson => write!(f, "application/dns+json"), + Mime::ApplicationDnsMessage => write!(f, "application/dns-message"), + Mime::ApplicationDotsCbor => write!(f, "application/dots+cbor"), + Mime::ApplicationDpopJwt => write!(f, "application/dpop+jwt"), + Mime::ApplicationDskppXml => write!(f, "application/dskpp+xml"), + Mime::ApplicationDsscDer => write!(f, "application/dssc+der"), + Mime::ApplicationDsscXml => write!(f, "application/dssc+xml"), + Mime::ApplicationDvcs => write!(f, "application/dvcs"), + Mime::ApplicationEdiConsent => write!(f, "application/EDI-consent"), + Mime::ApplicationEdifact => write!(f, "application/EDIFACT"), + Mime::ApplicationEdiX12 => write!(f, "application/EDI-X12"), + Mime::ApplicationEfi => write!(f, "application/efi"), + Mime::ApplicationElmJson => write!(f, "application/elm+json"), + Mime::ApplicationElmXml => write!(f, "application/elm+xml"), + Mime::ApplicationEmergencycalldataCapXml => write!(f, "application/EmergencyCallData.cap+xml"), + Mime::ApplicationEmergencycalldataCommentXml => write!(f, "application/EmergencyCallData.Comment+xml"), + Mime::ApplicationEmergencycalldataControlXml => write!(f, "application/EmergencyCallData.Control+xml"), + Mime::ApplicationEmergencycalldataDeviceinfoXml => write!(f, "application/EmergencyCallData.DeviceInfo+xml"), + Mime::ApplicationEmergencycalldataEcallMsd => write!(f, "application/EmergencyCallData.eCall.MSD"), + Mime::ApplicationEmergencycalldataLegacyesnJson => write!(f, "application/EmergencyCallData.LegacyESN+json"), + Mime::ApplicationEmergencycalldataProviderinfoXml => write!(f, "application/EmergencyCallData.ProviderInfo+xml"), + Mime::ApplicationEmergencycalldataServiceinfoXml => write!(f, "application/EmergencyCallData.ServiceInfo+xml"), + Mime::ApplicationEmergencycalldataSubscriberinfoXml => write!(f, "application/EmergencyCallData.SubscriberInfo+xml"), + Mime::ApplicationEmergencycalldataVedsXml => write!(f, "application/EmergencyCallData.VEDS+xml"), + Mime::ApplicationEmmaXml => write!(f, "application/emma+xml"), + Mime::ApplicationEmotionmlXml => write!(f, "application/emotionml+xml"), + Mime::ApplicationEncaprtp => write!(f, "application/encaprtp"), + Mime::ApplicationEppXml => write!(f, "application/epp+xml"), + Mime::ApplicationEpubZip => write!(f, "application/epub+zip"), + Mime::ApplicationEshop => write!(f, "application/eshop"), + Mime::ApplicationExample => write!(f, "application/example"), + Mime::ApplicationExi => write!(f, "application/exi"), + Mime::ApplicationExpectCtReportJson => write!(f, "application/expect-ct-report+json"), + Mime::ApplicationExpress => write!(f, "application/express"), + Mime::ApplicationFastinfoset => write!(f, "application/fastinfoset"), + Mime::ApplicationFastsoap => write!(f, "application/fastsoap"), + Mime::ApplicationFdf => write!(f, "application/fdf"), + Mime::ApplicationFdtXml => write!(f, "application/fdt+xml"), + Mime::ApplicationFhirJson => write!(f, "application/fhir+json"), + Mime::ApplicationFhirXml => write!(f, "application/fhir+xml"), + Mime::ApplicationFits => write!(f, "application/fits"), + Mime::ApplicationFlexfec => write!(f, "application/flexfec"), + Mime::ApplicationFontTdpfr => write!(f, "application/font-tdpfr"), + Mime::ApplicationFrameworkAttributesXml => write!(f, "application/framework-attributes+xml"), + Mime::ApplicationGeoJson => write!(f, "application/geo+json"), + Mime::ApplicationGeoJsonSeq => write!(f, "application/geo+json-seq"), + Mime::ApplicationGeopackageSqlite3 => write!(f, "application/geopackage+sqlite3"), + Mime::ApplicationGeoxacmlXml => write!(f, "application/geoxacml+xml"), + Mime::ApplicationGltfBuffer => write!(f, "application/gltf-buffer"), + Mime::ApplicationGmlXml => write!(f, "application/gml+xml"), + Mime::ApplicationGzip => write!(f, "application/gzip"), + Mime::ApplicationH224 => write!(f, "application/H224"), + Mime::ApplicationHeldXml => write!(f, "application/held+xml"), + Mime::ApplicationHl7v2Xml => write!(f, "application/hl7v2+xml"), + Mime::ApplicationHttp => write!(f, "application/http"), + Mime::ApplicationHyperstudio => write!(f, "application/hyperstudio"), + Mime::ApplicationIbeKeyRequestXml => write!(f, "application/ibe-key-request+xml"), + Mime::ApplicationIbePkgReplyXml => write!(f, "application/ibe-pkg-reply+xml"), + Mime::ApplicationIbePpData => write!(f, "application/ibe-pp-data"), + Mime::ApplicationIges => write!(f, "application/iges"), + Mime::ApplicationImIscomposingXml => write!(f, "application/im-iscomposing+xml"), + Mime::ApplicationIndex => write!(f, "application/index"), + Mime::ApplicationIndexCmd => write!(f, "application/index.cmd"), + Mime::ApplicationIndexObj => write!(f, "application/index.obj"), + Mime::ApplicationIndexResponse => write!(f, "application/index.response"), + Mime::ApplicationIndexVnd => write!(f, "application/index.vnd"), + Mime::ApplicationInkmlXml => write!(f, "application/inkml+xml"), + Mime::ApplicationIotp => write!(f, "application/IOTP"), + Mime::ApplicationIpfix => write!(f, "application/ipfix"), + Mime::ApplicationIpp => write!(f, "application/ipp"), + Mime::ApplicationIsup => write!(f, "application/ISUP"), + Mime::ApplicationItsXml => write!(f, "application/its+xml"), + Mime::ApplicationJavaArchive => write!(f, "application/java-archive"), + Mime::ApplicationJf2feedJson => write!(f, "application/jf2feed+json"), + Mime::ApplicationJose => write!(f, "application/jose"), + Mime::ApplicationJoseJson => write!(f, "application/jose+json"), + Mime::ApplicationJrdJson => write!(f, "application/jrd+json"), + Mime::ApplicationJscalendarJson => write!(f, "application/jscalendar+json"), + Mime::ApplicationJson => write!(f, "application/json"), + Mime::ApplicationJsonPatchJson => write!(f, "application/json-patch+json"), + Mime::ApplicationJsonSeq => write!(f, "application/json-seq"), + Mime::ApplicationJwkJson => write!(f, "application/jwk+json"), + Mime::ApplicationJwkSetJson => write!(f, "application/jwk-set+json"), + Mime::ApplicationJwt => write!(f, "application/jwt"), + Mime::ApplicationKpmlRequestXml => write!(f, "application/kpml-request+xml"), + Mime::ApplicationKpmlResponseXml => write!(f, "application/kpml-response+xml"), + Mime::ApplicationLdJson => write!(f, "application/ld+json"), + Mime::ApplicationLgrXml => write!(f, "application/lgr+xml"), + Mime::ApplicationLinkFormat => write!(f, "application/link-format"), + Mime::ApplicationLinkset => write!(f, "application/linkset"), + Mime::ApplicationLinksetJson => write!(f, "application/linkset+json"), + Mime::ApplicationLoadControlXml => write!(f, "application/load-control+xml"), + Mime::ApplicationLogoutJwt => write!(f, "application/logout+jwt"), + Mime::ApplicationLostXml => write!(f, "application/lost+xml"), + Mime::ApplicationLostsyncXml => write!(f, "application/lostsync+xml"), + Mime::ApplicationLpfZip => write!(f, "application/lpf+zip"), + Mime::ApplicationLxf => write!(f, "application/LXF"), + Mime::ApplicationMacBinhex40 => write!(f, "application/mac-binhex40"), + Mime::ApplicationMacwriteii => write!(f, "application/macwriteii"), + Mime::ApplicationMadsXml => write!(f, "application/mads+xml"), + Mime::ApplicationManifestJson => write!(f, "application/manifest+json"), + Mime::ApplicationMarc => write!(f, "application/marc"), + Mime::ApplicationMarcxmlXml => write!(f, "application/marcxml+xml"), + Mime::ApplicationMathematica => write!(f, "application/mathematica"), + Mime::ApplicationMathmlXml => write!(f, "application/mathml+xml"), + Mime::ApplicationMathmlContentXml => write!(f, "application/mathml-content+xml"), + Mime::ApplicationMathmlPresentationXml => write!(f, "application/mathml-presentation+xml"), + Mime::ApplicationMbmsAssociatedProcedureDescriptionXml => write!(f, "application/mbms-associated-procedure-description+xml"), + Mime::ApplicationMbmsDeregisterXml => write!(f, "application/mbms-deregister+xml"), + Mime::ApplicationMbmsEnvelopeXml => write!(f, "application/mbms-envelope+xml"), + Mime::ApplicationMbmsMskResponseXml => write!(f, "application/mbms-msk-response+xml"), + Mime::ApplicationMbmsMskXml => write!(f, "application/mbms-msk+xml"), + Mime::ApplicationMbmsProtectionDescriptionXml => write!(f, "application/mbms-protection-description+xml"), + Mime::ApplicationMbmsReceptionReportXml => write!(f, "application/mbms-reception-report+xml"), + Mime::ApplicationMbmsRegisterResponseXml => write!(f, "application/mbms-register-response+xml"), + Mime::ApplicationMbmsRegisterXml => write!(f, "application/mbms-register+xml"), + Mime::ApplicationMbmsScheduleXml => write!(f, "application/mbms-schedule+xml"), + Mime::ApplicationMbmsUserServiceDescriptionXml => write!(f, "application/mbms-user-service-description+xml"), + Mime::ApplicationMbox => write!(f, "application/mbox"), + Mime::ApplicationMediaControlXml => write!(f, "application/media_control+xml"), + Mime::ApplicationMediaPolicyDatasetXml => write!(f, "application/media-policy-dataset+xml"), + Mime::ApplicationMediaservercontrolXml => write!(f, "application/mediaservercontrol+xml"), + Mime::ApplicationMergePatchJson => write!(f, "application/merge-patch+json"), + Mime::ApplicationMetalink4Xml => write!(f, "application/metalink4+xml"), + Mime::ApplicationMetsXml => write!(f, "application/mets+xml"), + Mime::ApplicationMf4 => write!(f, "application/MF4"), + Mime::ApplicationMikey => write!(f, "application/mikey"), + Mime::ApplicationMipc => write!(f, "application/mipc"), + Mime::ApplicationMissingBlocksCborSeq => write!(f, "application/missing-blocks+cbor-seq"), + Mime::ApplicationMmtAeiXml => write!(f, "application/mmt-aei+xml"), + Mime::ApplicationMmtUsdXml => write!(f, "application/mmt-usd+xml"), + Mime::ApplicationModsXml => write!(f, "application/mods+xml"), + Mime::ApplicationMossKeys => write!(f, "application/moss-keys"), + Mime::ApplicationMossSignature => write!(f, "application/moss-signature"), + Mime::ApplicationMosskeyData => write!(f, "application/mosskey-data"), + Mime::ApplicationMosskeyRequest => write!(f, "application/mosskey-request"), + Mime::ApplicationMp21 => write!(f, "application/mp21"), + Mime::ApplicationMp4 => write!(f, "application/mp4"), + Mime::ApplicationMpeg4Generic => write!(f, "application/mpeg4-generic"), + Mime::ApplicationMpeg4Iod => write!(f, "application/mpeg4-iod"), + Mime::ApplicationMpeg4IodXmt => write!(f, "application/mpeg4-iod-xmt"), + Mime::ApplicationMrbConsumerXml => write!(f, "application/mrb-consumer+xml"), + Mime::ApplicationMrbPublishXml => write!(f, "application/mrb-publish+xml"), + Mime::ApplicationMscIvrXml => write!(f, "application/msc-ivr+xml"), + Mime::ApplicationMscMixerXml => write!(f, "application/msc-mixer+xml"), + Mime::ApplicationMsword => write!(f, "application/msword"), + Mime::ApplicationMudJson => write!(f, "application/mud+json"), + Mime::ApplicationMultipartCore => write!(f, "application/multipart-core"), + Mime::ApplicationMxf => write!(f, "application/mxf"), + Mime::ApplicationNQuads => write!(f, "application/n-quads"), + Mime::ApplicationNTriples => write!(f, "application/n-triples"), + Mime::ApplicationNasdata => write!(f, "application/nasdata"), + Mime::ApplicationNewsCheckgroups => write!(f, "application/news-checkgroups"), + Mime::ApplicationNewsGroupinfo => write!(f, "application/news-groupinfo"), + Mime::ApplicationNewsTransmission => write!(f, "application/news-transmission"), + Mime::ApplicationNlsmlXml => write!(f, "application/nlsml+xml"), + Mime::ApplicationNode => write!(f, "application/node"), + Mime::ApplicationNss => write!(f, "application/nss"), + Mime::ApplicationOauthAuthzReqJwt => write!(f, "application/oauth-authz-req+jwt"), + Mime::ApplicationObliviousDnsMessage => write!(f, "application/oblivious-dns-message"), + Mime::ApplicationOcspRequest => write!(f, "application/ocsp-request"), + Mime::ApplicationOcspResponse => write!(f, "application/ocsp-response"), + Mime::ApplicationOctetStream => write!(f, "application/octet-stream"), + Mime::ApplicationOda => write!(f, "application/ODA"), + Mime::ApplicationOdmXml => write!(f, "application/odm+xml"), + Mime::ApplicationOdx => write!(f, "application/ODX"), + Mime::ApplicationOebpsPackageXml => write!(f, "application/oebps-package+xml"), + Mime::ApplicationOgg => write!(f, "application/ogg"), + Mime::ApplicationOhttpKeys => write!(f, "application/ohttp-keys"), + Mime::ApplicationOpcNodesetXml => write!(f, "application/opc-nodeset+xml"), + Mime::ApplicationOscore => write!(f, "application/oscore"), + Mime::ApplicationOxps => write!(f, "application/oxps"), + Mime::ApplicationP21 => write!(f, "application/p21"), + Mime::ApplicationP21Zip => write!(f, "application/p21+zip"), + Mime::ApplicationP2pOverlayXml => write!(f, "application/p2p-overlay+xml"), + Mime::ApplicationParityfec => write!(f, "application/parityfec"), + Mime::ApplicationPassport => write!(f, "application/passport"), + Mime::ApplicationPatchOpsErrorXml => write!(f, "application/patch-ops-error+xml"), + Mime::ApplicationPdf => write!(f, "application/pdf"), + Mime::ApplicationPdx => write!(f, "application/PDX"), + Mime::ApplicationPemCertificateChain => write!(f, "application/pem-certificate-chain"), + Mime::ApplicationPgpEncrypted => write!(f, "application/pgp-encrypted"), + Mime::ApplicationPgpKeys => write!(f, "application/pgp-keys"), + Mime::ApplicationPgpSignature => write!(f, "application/pgp-signature"), + Mime::ApplicationPidfDiffXml => write!(f, "application/pidf-diff+xml"), + Mime::ApplicationPidfXml => write!(f, "application/pidf+xml"), + Mime::ApplicationPkcs10 => write!(f, "application/pkcs10"), + Mime::ApplicationPkcs7Mime => write!(f, "application/pkcs7-mime"), + Mime::ApplicationPkcs7Signature => write!(f, "application/pkcs7-signature"), + Mime::ApplicationPkcs8 => write!(f, "application/pkcs8"), + Mime::ApplicationPkcs8Encrypted => write!(f, "application/pkcs8-encrypted"), + Mime::ApplicationPkcs12 => write!(f, "application/pkcs12"), + Mime::ApplicationPkixAttrCert => write!(f, "application/pkix-attr-cert"), + Mime::ApplicationPkixCert => write!(f, "application/pkix-cert"), + Mime::ApplicationPkixCrl => write!(f, "application/pkix-crl"), + Mime::ApplicationPkixPkipath => write!(f, "application/pkix-pkipath"), + Mime::ApplicationPkixcmp => write!(f, "application/pkixcmp"), + Mime::ApplicationPlsXml => write!(f, "application/pls+xml"), + Mime::ApplicationPocSettingsXml => write!(f, "application/poc-settings+xml"), + Mime::ApplicationPostscript => write!(f, "application/postscript"), + Mime::ApplicationPpspTrackerJson => write!(f, "application/ppsp-tracker+json"), + Mime::ApplicationProblemJson => write!(f, "application/problem+json"), + Mime::ApplicationProblemXml => write!(f, "application/problem+xml"), + Mime::ApplicationProvenanceXml => write!(f, "application/provenance+xml"), + Mime::ApplicationPrsAlvestrandTitraxSheet => write!(f, "application/prs.alvestrand.titrax-sheet"), + Mime::ApplicationPrsCww => write!(f, "application/prs.cww"), + Mime::ApplicationPrsCyn => write!(f, "application/prs.cyn"), + Mime::ApplicationPrsHpubZip => write!(f, "application/prs.hpub+zip"), + Mime::ApplicationPrsImpliedDocumentXml => write!(f, "application/prs.implied-document+xml"), + Mime::ApplicationPrsImpliedExecutable => write!(f, "application/prs.implied-executable"), + Mime::ApplicationPrsImpliedStructure => write!(f, "application/prs.implied-structure"), + Mime::ApplicationPrsNprend => write!(f, "application/prs.nprend"), + Mime::ApplicationPrsPlucker => write!(f, "application/prs.plucker"), + Mime::ApplicationPrsRdfXmlCrypt => write!(f, "application/prs.rdf-xml-crypt"), + Mime::ApplicationPrsXsfXml => write!(f, "application/prs.xsf+xml"), + Mime::ApplicationPskcXml => write!(f, "application/pskc+xml"), + Mime::ApplicationPvdJson => write!(f, "application/pvd+json"), + Mime::ApplicationRdfXml => write!(f, "application/rdf+xml"), + Mime::ApplicationRouteApdXml => write!(f, "application/route-apd+xml"), + Mime::ApplicationRouteSTsidXml => write!(f, "application/route-s-tsid+xml"), + Mime::ApplicationRouteUsdXml => write!(f, "application/route-usd+xml"), + Mime::ApplicationQsig => write!(f, "application/QSIG"), + Mime::ApplicationRaptorfec => write!(f, "application/raptorfec"), + Mime::ApplicationRdapJson => write!(f, "application/rdap+json"), + Mime::ApplicationReginfoXml => write!(f, "application/reginfo+xml"), + Mime::ApplicationRelaxNgCompactSyntax => write!(f, "application/relax-ng-compact-syntax"), + Mime::ApplicationReputonJson => write!(f, "application/reputon+json"), + Mime::ApplicationResourceListsDiffXml => write!(f, "application/resource-lists-diff+xml"), + Mime::ApplicationResourceListsXml => write!(f, "application/resource-lists+xml"), + Mime::ApplicationRfcXml => write!(f, "application/rfc+xml"), + Mime::ApplicationRiscos => write!(f, "application/riscos"), + Mime::ApplicationRlmiXml => write!(f, "application/rlmi+xml"), + Mime::ApplicationRlsServicesXml => write!(f, "application/rls-services+xml"), + Mime::ApplicationRpkiChecklist => write!(f, "application/rpki-checklist"), + Mime::ApplicationRpkiGhostbusters => write!(f, "application/rpki-ghostbusters"), + Mime::ApplicationRpkiManifest => write!(f, "application/rpki-manifest"), + Mime::ApplicationRpkiPublication => write!(f, "application/rpki-publication"), + Mime::ApplicationRpkiRoa => write!(f, "application/rpki-roa"), + Mime::ApplicationRpkiUpdown => write!(f, "application/rpki-updown"), + Mime::ApplicationRtf => write!(f, "application/rtf"), + Mime::ApplicationRtploopback => write!(f, "application/rtploopback"), + Mime::ApplicationRtx => write!(f, "application/rtx"), + Mime::ApplicationSamlassertionXml => write!(f, "application/samlassertion+xml"), + Mime::ApplicationSamlmetadataXml => write!(f, "application/samlmetadata+xml"), + Mime::ApplicationSarifExternalPropertiesJson => write!(f, "application/sarif-external-properties+json"), + Mime::ApplicationSarifJson => write!(f, "application/sarif+json"), + Mime::ApplicationSbe => write!(f, "application/sbe"), + Mime::ApplicationSbmlXml => write!(f, "application/sbml+xml"), + Mime::ApplicationScaipXml => write!(f, "application/scaip+xml"), + Mime::ApplicationScimJson => write!(f, "application/scim+json"), + Mime::ApplicationScvpCvRequest => write!(f, "application/scvp-cv-request"), + Mime::ApplicationScvpCvResponse => write!(f, "application/scvp-cv-response"), + Mime::ApplicationScvpVpRequest => write!(f, "application/scvp-vp-request"), + Mime::ApplicationScvpVpResponse => write!(f, "application/scvp-vp-response"), + Mime::ApplicationSdp => write!(f, "application/sdp"), + Mime::ApplicationSeceventJwt => write!(f, "application/secevent+jwt"), + Mime::ApplicationSenmlEtchCbor => write!(f, "application/senml-etch+cbor"), + Mime::ApplicationSenmlEtchJson => write!(f, "application/senml-etch+json"), + Mime::ApplicationSenmlExi => write!(f, "application/senml-exi"), + Mime::ApplicationSenmlCbor => write!(f, "application/senml+cbor"), + Mime::ApplicationSenmlJson => write!(f, "application/senml+json"), + Mime::ApplicationSenmlXml => write!(f, "application/senml+xml"), + Mime::ApplicationSensmlExi => write!(f, "application/sensml-exi"), + Mime::ApplicationSensmlCbor => write!(f, "application/sensml+cbor"), + Mime::ApplicationSensmlJson => write!(f, "application/sensml+json"), + Mime::ApplicationSensmlXml => write!(f, "application/sensml+xml"), + Mime::ApplicationSepExi => write!(f, "application/sep-exi"), + Mime::ApplicationSepXml => write!(f, "application/sep+xml"), + Mime::ApplicationSessionInfo => write!(f, "application/session-info"), + Mime::ApplicationSetPayment => write!(f, "application/set-payment"), + Mime::ApplicationSetPaymentInitiation => write!(f, "application/set-payment-initiation"), + Mime::ApplicationSetRegistration => write!(f, "application/set-registration"), + Mime::ApplicationSetRegistrationInitiation => write!(f, "application/set-registration-initiation"), + Mime::ApplicationSgml => write!(f, "application/SGML"), + Mime::ApplicationSgmlOpenCatalog => write!(f, "application/sgml-open-catalog"), + Mime::ApplicationShfXml => write!(f, "application/shf+xml"), + Mime::ApplicationSieve => write!(f, "application/sieve"), + Mime::ApplicationSimpleFilterXml => write!(f, "application/simple-filter+xml"), + Mime::ApplicationSimpleMessageSummary => write!(f, "application/simple-message-summary"), + Mime::ApplicationSimplesymbolcontainer => write!(f, "application/simpleSymbolContainer"), + Mime::ApplicationSipc => write!(f, "application/sipc"), + Mime::ApplicationSlate => write!(f, "application/slate"), + Mime::ApplicationSmilXml => write!(f, "application/smil+xml"), + Mime::ApplicationSmpte336m => write!(f, "application/smpte336m"), + Mime::ApplicationSoapFastinfoset => write!(f, "application/soap+fastinfoset"), + Mime::ApplicationSoapXml => write!(f, "application/soap+xml"), + Mime::ApplicationSparqlQuery => write!(f, "application/sparql-query"), + Mime::ApplicationSpdxJson => write!(f, "application/spdx+json"), + Mime::ApplicationSparqlResultsXml => write!(f, "application/sparql-results+xml"), + Mime::ApplicationSpiritsEventXml => write!(f, "application/spirits-event+xml"), + Mime::ApplicationSql => write!(f, "application/sql"), + Mime::ApplicationSrgs => write!(f, "application/srgs"), + Mime::ApplicationSrgsXml => write!(f, "application/srgs+xml"), + Mime::ApplicationSruXml => write!(f, "application/sru+xml"), + Mime::ApplicationSsmlXml => write!(f, "application/ssml+xml"), + Mime::ApplicationStixJson => write!(f, "application/stix+json"), + Mime::ApplicationSwidCbor => write!(f, "application/swid+cbor"), + Mime::ApplicationSwidXml => write!(f, "application/swid+xml"), + Mime::ApplicationTampApexUpdate => write!(f, "application/tamp-apex-update"), + Mime::ApplicationTampApexUpdateConfirm => write!(f, "application/tamp-apex-update-confirm"), + Mime::ApplicationTampCommunityUpdate => write!(f, "application/tamp-community-update"), + Mime::ApplicationTampCommunityUpdateConfirm => write!(f, "application/tamp-community-update-confirm"), + Mime::ApplicationTampError => write!(f, "application/tamp-error"), + Mime::ApplicationTampSequenceAdjust => write!(f, "application/tamp-sequence-adjust"), + Mime::ApplicationTampSequenceAdjustConfirm => write!(f, "application/tamp-sequence-adjust-confirm"), + Mime::ApplicationTampStatusQuery => write!(f, "application/tamp-status-query"), + Mime::ApplicationTampStatusResponse => write!(f, "application/tamp-status-response"), + Mime::ApplicationTampUpdate => write!(f, "application/tamp-update"), + Mime::ApplicationTampUpdateConfirm => write!(f, "application/tamp-update-confirm"), + Mime::ApplicationTaxiiJson => write!(f, "application/taxii+json"), + Mime::ApplicationTdJson => write!(f, "application/td+json"), + Mime::ApplicationTeiXml => write!(f, "application/tei+xml"), + Mime::ApplicationTetraIsi => write!(f, "application/TETRA_ISI"), + Mime::ApplicationThraudXml => write!(f, "application/thraud+xml"), + Mime::ApplicationTimestampQuery => write!(f, "application/timestamp-query"), + Mime::ApplicationTimestampReply => write!(f, "application/timestamp-reply"), + Mime::ApplicationTimestampedData => write!(f, "application/timestamped-data"), + Mime::ApplicationTlsrptGzip => write!(f, "application/tlsrpt+gzip"), + Mime::ApplicationTlsrptJson => write!(f, "application/tlsrpt+json"), + Mime::ApplicationTmJson => write!(f, "application/tm+json"), + Mime::ApplicationTnauthlist => write!(f, "application/tnauthlist"), + Mime::ApplicationTokenIntrospectionJwt => write!(f, "application/token-introspection+jwt"), + Mime::ApplicationTrickleIceSdpfrag => write!(f, "application/trickle-ice-sdpfrag"), + Mime::ApplicationTrig => write!(f, "application/trig"), + Mime::ApplicationTtmlXml => write!(f, "application/ttml+xml"), + Mime::ApplicationTveTrigger => write!(f, "application/tve-trigger"), + Mime::ApplicationTzif => write!(f, "application/tzif"), + Mime::ApplicationTzifLeap => write!(f, "application/tzif-leap"), + Mime::ApplicationUlpfec => write!(f, "application/ulpfec"), + Mime::ApplicationUrcGrpsheetXml => write!(f, "application/urc-grpsheet+xml"), + Mime::ApplicationUrcRessheetXml => write!(f, "application/urc-ressheet+xml"), + Mime::ApplicationUrcTargetdescXml => write!(f, "application/urc-targetdesc+xml"), + Mime::ApplicationUrcUisocketdescXml => write!(f, "application/urc-uisocketdesc+xml"), + Mime::ApplicationVcardJson => write!(f, "application/vcard+json"), + Mime::ApplicationVcardXml => write!(f, "application/vcard+xml"), + Mime::ApplicationVemmi => write!(f, "application/vemmi"), + Mime::ApplicationVnd1000mindsDecisionModelXml => write!(f, "application/vnd.1000minds.decision-model+xml"), + Mime::ApplicationVnd1ob => write!(f, "application/vnd.1ob"), + Mime::ApplicationVnd3gpp5gnas => write!(f, "application/vnd.3gpp.5gnas"), + Mime::ApplicationVnd3gppAccessTransferEventsXml => write!(f, "application/vnd.3gpp.access-transfer-events+xml"), + Mime::ApplicationVnd3gppBsfXml => write!(f, "application/vnd.3gpp.bsf+xml"), + Mime::ApplicationVnd3gppCrsXml => write!(f, "application/vnd.3gpp.crs+xml"), + Mime::ApplicationVnd3gppCurrentLocationDiscoveryXml => write!(f, "application/vnd.3gpp.current-location-discovery+xml"), + Mime::ApplicationVnd3gppGmopXml => write!(f, "application/vnd.3gpp.GMOP+xml"), + Mime::ApplicationVnd3gppGtpc => write!(f, "application/vnd.3gpp.gtpc"), + Mime::ApplicationVnd3gppInterworkingData => write!(f, "application/vnd.3gpp.interworking-data"), + Mime::ApplicationVnd3gppLpp => write!(f, "application/vnd.3gpp.lpp"), + Mime::ApplicationVnd3gppMcSignallingEar => write!(f, "application/vnd.3gpp.mc-signalling-ear"), + Mime::ApplicationVnd3gppMcdataAffiliationCommandXml => write!(f, "application/vnd.3gpp.mcdata-affiliation-command+xml"), + Mime::ApplicationVnd3gppMcdataInfoXml => write!(f, "application/vnd.3gpp.mcdata-info+xml"), + Mime::ApplicationVnd3gppMcdataMsgstoreCtrlRequestXml => write!(f, "application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml"), + Mime::ApplicationVnd3gppMcdataPayload => write!(f, "application/vnd.3gpp.mcdata-payload"), + Mime::ApplicationVnd3gppMcdataRegroupXml => write!(f, "application/vnd.3gpp.mcdata-regroup+xml"), + Mime::ApplicationVnd3gppMcdataServiceConfigXml => write!(f, "application/vnd.3gpp.mcdata-service-config+xml"), + Mime::ApplicationVnd3gppMcdataSignalling => write!(f, "application/vnd.3gpp.mcdata-signalling"), + Mime::ApplicationVnd3gppMcdataUeConfigXml => write!(f, "application/vnd.3gpp.mcdata-ue-config+xml"), + Mime::ApplicationVnd3gppMcdataUserProfileXml => write!(f, "application/vnd.3gpp.mcdata-user-profile+xml"), + Mime::ApplicationVnd3gppMcpttAffiliationCommandXml => write!(f, "application/vnd.3gpp.mcptt-affiliation-command+xml"), + Mime::ApplicationVnd3gppMcpttFloorRequestXml => write!(f, "application/vnd.3gpp.mcptt-floor-request+xml"), + Mime::ApplicationVnd3gppMcpttInfoXml => write!(f, "application/vnd.3gpp.mcptt-info+xml"), + Mime::ApplicationVnd3gppMcpttLocationInfoXml => write!(f, "application/vnd.3gpp.mcptt-location-info+xml"), + Mime::ApplicationVnd3gppMcpttMbmsUsageInfoXml => write!(f, "application/vnd.3gpp.mcptt-mbms-usage-info+xml"), + Mime::ApplicationVnd3gppMcpttRegroupXml => write!(f, "application/vnd.3gpp.mcptt-regroup+xml"), + Mime::ApplicationVnd3gppMcpttServiceConfigXml => write!(f, "application/vnd.3gpp.mcptt-service-config+xml"), + Mime::ApplicationVnd3gppMcpttSignedXml => write!(f, "application/vnd.3gpp.mcptt-signed+xml"), + Mime::ApplicationVnd3gppMcpttUeConfigXml => write!(f, "application/vnd.3gpp.mcptt-ue-config+xml"), + Mime::ApplicationVnd3gppMcpttUeInitConfigXml => write!(f, "application/vnd.3gpp.mcptt-ue-init-config+xml"), + Mime::ApplicationVnd3gppMcpttUserProfileXml => write!(f, "application/vnd.3gpp.mcptt-user-profile+xml"), + Mime::ApplicationVnd3gppMcvideoAffiliationCommandXml => write!(f, "application/vnd.3gpp.mcvideo-affiliation-command+xml"), + Mime::ApplicationVnd3gppMcvideoInfoXml => write!(f, "application/vnd.3gpp.mcvideo-info+xml"), + Mime::ApplicationVnd3gppMcvideoLocationInfoXml => write!(f, "application/vnd.3gpp.mcvideo-location-info+xml"), + Mime::ApplicationVnd3gppMcvideoMbmsUsageInfoXml => write!(f, "application/vnd.3gpp.mcvideo-mbms-usage-info+xml"), + Mime::ApplicationVnd3gppMcvideoRegroupXml => write!(f, "application/vnd.3gpp.mcvideo-regroup+xml"), + Mime::ApplicationVnd3gppMcvideoServiceConfigXml => write!(f, "application/vnd.3gpp.mcvideo-service-config+xml"), + Mime::ApplicationVnd3gppMcvideoTransmissionRequestXml => write!(f, "application/vnd.3gpp.mcvideo-transmission-request+xml"), + Mime::ApplicationVnd3gppMcvideoUeConfigXml => write!(f, "application/vnd.3gpp.mcvideo-ue-config+xml"), + Mime::ApplicationVnd3gppMcvideoUserProfileXml => write!(f, "application/vnd.3gpp.mcvideo-user-profile+xml"), + Mime::ApplicationVnd3gppMidCallXml => write!(f, "application/vnd.3gpp.mid-call+xml"), + Mime::ApplicationVnd3gppNgap => write!(f, "application/vnd.3gpp.ngap"), + Mime::ApplicationVnd3gppPfcp => write!(f, "application/vnd.3gpp.pfcp"), + Mime::ApplicationVnd3gppPicBwLarge => write!(f, "application/vnd.3gpp.pic-bw-large"), + Mime::ApplicationVnd3gppPicBwSmall => write!(f, "application/vnd.3gpp.pic-bw-small"), + Mime::ApplicationVnd3gppPicBwVar => write!(f, "application/vnd.3gpp.pic-bw-var"), + Mime::ApplicationVnd3gppProsePc3aXml => write!(f, "application/vnd.3gpp-prose-pc3a+xml"), + Mime::ApplicationVnd3gppProsePc3achXml => write!(f, "application/vnd.3gpp-prose-pc3ach+xml"), + Mime::ApplicationVnd3gppProsePc3chXml => write!(f, "application/vnd.3gpp-prose-pc3ch+xml"), + Mime::ApplicationVnd3gppProsePc8Xml => write!(f, "application/vnd.3gpp-prose-pc8+xml"), + Mime::ApplicationVnd3gppProseXml => write!(f, "application/vnd.3gpp-prose+xml"), + Mime::ApplicationVnd3gppS1ap => write!(f, "application/vnd.3gpp.s1ap"), + Mime::ApplicationVnd3gppSealGroupDocXml => write!(f, "application/vnd.3gpp.seal-group-doc+xml"), + Mime::ApplicationVnd3gppSealInfoXml => write!(f, "application/vnd.3gpp.seal-info+xml"), + Mime::ApplicationVnd3gppSealLocationInfoXml => write!(f, "application/vnd.3gpp.seal-location-info+xml"), + Mime::ApplicationVnd3gppSealMbmsUsageInfoXml => write!(f, "application/vnd.3gpp.seal-mbms-usage-info+xml"), + Mime::ApplicationVnd3gppSealNetworkQosManagementInfoXml => write!(f, "application/vnd.3gpp.seal-network-QoS-management-info+xml"), + Mime::ApplicationVnd3gppSealUeConfigInfoXml => write!(f, "application/vnd.3gpp.seal-ue-config-info+xml"), + Mime::ApplicationVnd3gppSealUnicastInfoXml => write!(f, "application/vnd.3gpp.seal-unicast-info+xml"), + Mime::ApplicationVnd3gppSealUserProfileInfoXml => write!(f, "application/vnd.3gpp.seal-user-profile-info+xml"), + Mime::ApplicationVnd3gppSms => write!(f, "application/vnd.3gpp.sms"), + Mime::ApplicationVnd3gppSmsXml => write!(f, "application/vnd.3gpp.sms+xml"), + Mime::ApplicationVnd3gppSrvccExtXml => write!(f, "application/vnd.3gpp.srvcc-ext+xml"), + Mime::ApplicationVnd3gppSrvccInfoXml => write!(f, "application/vnd.3gpp.SRVCC-info+xml"), + Mime::ApplicationVnd3gppStateAndEventInfoXml => write!(f, "application/vnd.3gpp.state-and-event-info+xml"), + Mime::ApplicationVnd3gppUssdXml => write!(f, "application/vnd.3gpp.ussd+xml"), + Mime::ApplicationVnd3gppVaeInfoXml => write!(f, "application/vnd.3gpp.vae-info+xml"), + Mime::ApplicationVnd3gppV2xLocalServiceInformation => write!(f, "application/vnd.3gpp-v2x-local-service-information"), + Mime::ApplicationVnd3gpp2BcmcsinfoXml => write!(f, "application/vnd.3gpp2.bcmcsinfo+xml"), + Mime::ApplicationVnd3gpp2Sms => write!(f, "application/vnd.3gpp2.sms"), + Mime::ApplicationVnd3gpp2Tcap => write!(f, "application/vnd.3gpp2.tcap"), + Mime::ApplicationVnd3gppV2x => write!(f, "application/vnd.3gpp.v2x"), + Mime::ApplicationVnd3lightssoftwareImagescal => write!(f, "application/vnd.3lightssoftware.imagescal"), + Mime::ApplicationVnd3mPostItNotes => write!(f, "application/vnd.3M.Post-it-Notes"), + Mime::ApplicationVndAccpacSimplyAso => write!(f, "application/vnd.accpac.simply.aso"), + Mime::ApplicationVndAccpacSimplyImp => write!(f, "application/vnd.accpac.simply.imp"), + Mime::ApplicationVndAcmAddressxferJson => write!(f, "application/vnd.acm.addressxfer+json"), + Mime::ApplicationVndAcucobol => write!(f, "application/vnd.acucobol"), + Mime::ApplicationVndAcucorp => write!(f, "application/vnd.acucorp"), + Mime::ApplicationVndAdobeFlashMovie => write!(f, "application/vnd.adobe.flash.movie"), + Mime::ApplicationVndAdobeFormscentralFcdt => write!(f, "application/vnd.adobe.formscentral.fcdt"), + Mime::ApplicationVndAdobeFxp => write!(f, "application/vnd.adobe.fxp"), + Mime::ApplicationVndAdobePartialUpload => write!(f, "application/vnd.adobe.partial-upload"), + Mime::ApplicationVndAdobeXdpXml => write!(f, "application/vnd.adobe.xdp+xml"), + Mime::ApplicationVndAetherImp => write!(f, "application/vnd.aether.imp"), + Mime::ApplicationVndAfpcAfplinedata => write!(f, "application/vnd.afpc.afplinedata"), + Mime::ApplicationVndAfpcAfplinedataPagedef => write!(f, "application/vnd.afpc.afplinedata-pagedef"), + Mime::ApplicationVndAfpcCmocaCmresource => write!(f, "application/vnd.afpc.cmoca-cmresource"), + Mime::ApplicationVndAfpcFocaCharset => write!(f, "application/vnd.afpc.foca-charset"), + Mime::ApplicationVndAfpcFocaCodedfont => write!(f, "application/vnd.afpc.foca-codedfont"), + Mime::ApplicationVndAfpcFocaCodepage => write!(f, "application/vnd.afpc.foca-codepage"), + Mime::ApplicationVndAfpcModca => write!(f, "application/vnd.afpc.modca"), + Mime::ApplicationVndAfpcModcaCmtable => write!(f, "application/vnd.afpc.modca-cmtable"), + Mime::ApplicationVndAfpcModcaFormdef => write!(f, "application/vnd.afpc.modca-formdef"), + Mime::ApplicationVndAfpcModcaMediummap => write!(f, "application/vnd.afpc.modca-mediummap"), + Mime::ApplicationVndAfpcModcaObjectcontainer => write!(f, "application/vnd.afpc.modca-objectcontainer"), + Mime::ApplicationVndAfpcModcaOverlay => write!(f, "application/vnd.afpc.modca-overlay"), + Mime::ApplicationVndAfpcModcaPagesegment => write!(f, "application/vnd.afpc.modca-pagesegment"), + Mime::ApplicationVndAge => write!(f, "application/vnd.age"), + Mime::ApplicationVndAhBarcode => write!(f, "application/vnd.ah-barcode"), + Mime::ApplicationVndAheadSpace => write!(f, "application/vnd.ahead.space"), + Mime::ApplicationVndAirzipFilesecureAzf => write!(f, "application/vnd.airzip.filesecure.azf"), + Mime::ApplicationVndAirzipFilesecureAzs => write!(f, "application/vnd.airzip.filesecure.azs"), + Mime::ApplicationVndAmadeusJson => write!(f, "application/vnd.amadeus+json"), + Mime::ApplicationVndAmazonMobi8Ebook => write!(f, "application/vnd.amazon.mobi8-ebook"), + Mime::ApplicationVndAmericandynamicsAcc => write!(f, "application/vnd.americandynamics.acc"), + Mime::ApplicationVndAmigaAmi => write!(f, "application/vnd.amiga.ami"), + Mime::ApplicationVndAmundsenMazeXml => write!(f, "application/vnd.amundsen.maze+xml"), + Mime::ApplicationVndAndroidOta => write!(f, "application/vnd.android.ota"), + Mime::ApplicationVndAnki => write!(f, "application/vnd.anki"), + Mime::ApplicationVndAnserWebCertificateIssueInitiation => write!(f, "application/vnd.anser-web-certificate-issue-initiation"), + Mime::ApplicationVndAntixGameComponent => write!(f, "application/vnd.antix.game-component"), + Mime::ApplicationVndApacheArrowFile => write!(f, "application/vnd.apache.arrow.file"), + Mime::ApplicationVndApacheArrowStream => write!(f, "application/vnd.apache.arrow.stream"), + Mime::ApplicationVndApacheThriftBinary => write!(f, "application/vnd.apache.thrift.binary"), + Mime::ApplicationVndApacheThriftCompact => write!(f, "application/vnd.apache.thrift.compact"), + Mime::ApplicationVndApacheThriftJson => write!(f, "application/vnd.apache.thrift.json"), + Mime::ApplicationVndApexlang => write!(f, "application/vnd.apexlang"), + Mime::ApplicationVndApiJson => write!(f, "application/vnd.api+json"), + Mime::ApplicationVndAplextorWarrpJson => write!(f, "application/vnd.aplextor.warrp+json"), + Mime::ApplicationVndApothekendeReservationJson => write!(f, "application/vnd.apothekende.reservation+json"), + Mime::ApplicationVndAppleInstallerXml => write!(f, "application/vnd.apple.installer+xml"), + Mime::ApplicationVndAppleKeynote => write!(f, "application/vnd.apple.keynote"), + Mime::ApplicationVndAppleMpegurl => write!(f, "application/vnd.apple.mpegurl"), + Mime::ApplicationVndAppleNumbers => write!(f, "application/vnd.apple.numbers"), + Mime::ApplicationVndApplePages => write!(f, "application/vnd.apple.pages"), + Mime::ApplicationVndAristanetworksSwi => write!(f, "application/vnd.aristanetworks.swi"), + Mime::ApplicationVndArtisanJson => write!(f, "application/vnd.artisan+json"), + Mime::ApplicationVndArtsquare => write!(f, "application/vnd.artsquare"), + Mime::ApplicationVndAstraeaSoftwareIota => write!(f, "application/vnd.astraea-software.iota"), + Mime::ApplicationVndAudiograph => write!(f, "application/vnd.audiograph"), + Mime::ApplicationVndAutopackage => write!(f, "application/vnd.autopackage"), + Mime::ApplicationVndAvalonJson => write!(f, "application/vnd.avalon+json"), + Mime::ApplicationVndAvistarXml => write!(f, "application/vnd.avistar+xml"), + Mime::ApplicationVndBalsamiqBmmlXml => write!(f, "application/vnd.balsamiq.bmml+xml"), + Mime::ApplicationVndBananaAccounting => write!(f, "application/vnd.banana-accounting"), + Mime::ApplicationVndBbfUspError => write!(f, "application/vnd.bbf.usp.error"), + Mime::ApplicationVndBbfUspMsg => write!(f, "application/vnd.bbf.usp.msg"), + Mime::ApplicationVndBbfUspMsgJson => write!(f, "application/vnd.bbf.usp.msg+json"), + Mime::ApplicationVndBalsamiqBmpr => write!(f, "application/vnd.balsamiq.bmpr"), + Mime::ApplicationVndBekitzurStechJson => write!(f, "application/vnd.bekitzur-stech+json"), + Mime::ApplicationVndBelightsoftLhzdZip => write!(f, "application/vnd.belightsoft.lhzd+zip"), + Mime::ApplicationVndBelightsoftLhzlZip => write!(f, "application/vnd.belightsoft.lhzl+zip"), + Mime::ApplicationVndBintMedContent => write!(f, "application/vnd.bint.med-content"), + Mime::ApplicationVndBiopaxRdfXml => write!(f, "application/vnd.biopax.rdf+xml"), + Mime::ApplicationVndBlinkIdbValueWrapper => write!(f, "application/vnd.blink-idb-value-wrapper"), + Mime::ApplicationVndBlueiceMultipass => write!(f, "application/vnd.blueice.multipass"), + Mime::ApplicationVndBluetoothEpOob => write!(f, "application/vnd.bluetooth.ep.oob"), + Mime::ApplicationVndBluetoothLeOob => write!(f, "application/vnd.bluetooth.le.oob"), + Mime::ApplicationVndBmi => write!(f, "application/vnd.bmi"), + Mime::ApplicationVndBpf => write!(f, "application/vnd.bpf"), + Mime::ApplicationVndBpf3 => write!(f, "application/vnd.bpf3"), + Mime::ApplicationVndBusinessobjects => write!(f, "application/vnd.businessobjects"), + Mime::ApplicationVndByuUapiJson => write!(f, "application/vnd.byu.uapi+json"), + Mime::ApplicationVndCabJscript => write!(f, "application/vnd.cab-jscript"), + Mime::ApplicationVndCanonCpdl => write!(f, "application/vnd.canon-cpdl"), + Mime::ApplicationVndCanonLips => write!(f, "application/vnd.canon-lips"), + Mime::ApplicationVndCapasystemsPgJson => write!(f, "application/vnd.capasystems-pg+json"), + Mime::ApplicationVndCendioThinlincClientconf => write!(f, "application/vnd.cendio.thinlinc.clientconf"), + Mime::ApplicationVndCenturySystemsTcpStream => write!(f, "application/vnd.century-systems.tcp_stream"), + Mime::ApplicationVndChemdrawXml => write!(f, "application/vnd.chemdraw+xml"), + Mime::ApplicationVndChessPgn => write!(f, "application/vnd.chess-pgn"), + Mime::ApplicationVndChipnutsKaraokeMmd => write!(f, "application/vnd.chipnuts.karaoke-mmd"), + Mime::ApplicationVndCiedi => write!(f, "application/vnd.ciedi"), + Mime::ApplicationVndCinderella => write!(f, "application/vnd.cinderella"), + Mime::ApplicationVndCirpackIsdnExt => write!(f, "application/vnd.cirpack.isdn-ext"), + Mime::ApplicationVndCitationstylesStyleXml => write!(f, "application/vnd.citationstyles.style+xml"), + Mime::ApplicationVndClaymore => write!(f, "application/vnd.claymore"), + Mime::ApplicationVndCloantoRp9 => write!(f, "application/vnd.cloanto.rp9"), + Mime::ApplicationVndClonkC4group => write!(f, "application/vnd.clonk.c4group"), + Mime::ApplicationVndCluetrustCartomobileConfig => write!(f, "application/vnd.cluetrust.cartomobile-config"), + Mime::ApplicationVndCluetrustCartomobileConfigPkg => write!(f, "application/vnd.cluetrust.cartomobile-config-pkg"), + Mime::ApplicationVndCncfHelmChartContentV1TarGzip => write!(f, "application/vnd.cncf.helm.chart.content.v1.tar+gzip"), + Mime::ApplicationVndCncfHelmChartProvenanceV1Prov => write!(f, "application/vnd.cncf.helm.chart.provenance.v1.prov"), + Mime::ApplicationVndCncfHelmConfigV1Json => write!(f, "application/vnd.cncf.helm.config.v1+json"), + Mime::ApplicationVndCoffeescript => write!(f, "application/vnd.coffeescript"), + Mime::ApplicationVndCollabioXodocumentsDocument => write!(f, "application/vnd.collabio.xodocuments.document"), + Mime::ApplicationVndCollabioXodocumentsDocumentTemplate => write!(f, "application/vnd.collabio.xodocuments.document-template"), + Mime::ApplicationVndCollabioXodocumentsPresentation => write!(f, "application/vnd.collabio.xodocuments.presentation"), + Mime::ApplicationVndCollabioXodocumentsPresentationTemplate => write!(f, "application/vnd.collabio.xodocuments.presentation-template"), + Mime::ApplicationVndCollabioXodocumentsSpreadsheet => write!(f, "application/vnd.collabio.xodocuments.spreadsheet"), + Mime::ApplicationVndCollabioXodocumentsSpreadsheetTemplate => write!(f, "application/vnd.collabio.xodocuments.spreadsheet-template"), + Mime::ApplicationVndCollectionDocJson => write!(f, "application/vnd.collection.doc+json"), + Mime::ApplicationVndCollectionJson => write!(f, "application/vnd.collection+json"), + Mime::ApplicationVndCollectionNextJson => write!(f, "application/vnd.collection.next+json"), + Mime::ApplicationVndComicbookRar => write!(f, "application/vnd.comicbook-rar"), + Mime::ApplicationVndComicbookZip => write!(f, "application/vnd.comicbook+zip"), + Mime::ApplicationVndCommerceBattelle => write!(f, "application/vnd.commerce-battelle"), + Mime::ApplicationVndCommonspace => write!(f, "application/vnd.commonspace"), + Mime::ApplicationVndCoreosIgnitionJson => write!(f, "application/vnd.coreos.ignition+json"), + Mime::ApplicationVndCosmocaller => write!(f, "application/vnd.cosmocaller"), + Mime::ApplicationVndContactCmsg => write!(f, "application/vnd.contact.cmsg"), + Mime::ApplicationVndCrickClicker => write!(f, "application/vnd.crick.clicker"), + Mime::ApplicationVndCrickClickerKeyboard => write!(f, "application/vnd.crick.clicker.keyboard"), + Mime::ApplicationVndCrickClickerPalette => write!(f, "application/vnd.crick.clicker.palette"), + Mime::ApplicationVndCrickClickerTemplate => write!(f, "application/vnd.crick.clicker.template"), + Mime::ApplicationVndCrickClickerWordbank => write!(f, "application/vnd.crick.clicker.wordbank"), + Mime::ApplicationVndCriticaltoolsWbsXml => write!(f, "application/vnd.criticaltools.wbs+xml"), + Mime::ApplicationVndCryptiiPipeJson => write!(f, "application/vnd.cryptii.pipe+json"), + Mime::ApplicationVndCryptoShadeFile => write!(f, "application/vnd.crypto-shade-file"), + Mime::ApplicationVndCryptomatorEncrypted => write!(f, "application/vnd.cryptomator.encrypted"), + Mime::ApplicationVndCryptomatorVault => write!(f, "application/vnd.cryptomator.vault"), + Mime::ApplicationVndCtcPosml => write!(f, "application/vnd.ctc-posml"), + Mime::ApplicationVndCtctWsXml => write!(f, "application/vnd.ctct.ws+xml"), + Mime::ApplicationVndCupsPdf => write!(f, "application/vnd.cups-pdf"), + Mime::ApplicationVndCupsPostscript => write!(f, "application/vnd.cups-postscript"), + Mime::ApplicationVndCupsPpd => write!(f, "application/vnd.cups-ppd"), + Mime::ApplicationVndCupsRaster => write!(f, "application/vnd.cups-raster"), + Mime::ApplicationVndCupsRaw => write!(f, "application/vnd.cups-raw"), + Mime::ApplicationVndCurl => write!(f, "application/vnd.curl"), + Mime::ApplicationVndCyanDeanRootXml => write!(f, "application/vnd.cyan.dean.root+xml"), + Mime::ApplicationVndCybank => write!(f, "application/vnd.cybank"), + Mime::ApplicationVndCyclonedxJson => write!(f, "application/vnd.cyclonedx+json"), + Mime::ApplicationVndCyclonedxXml => write!(f, "application/vnd.cyclonedx+xml"), + Mime::ApplicationVndD2lCoursepackage1p0Zip => write!(f, "application/vnd.d2l.coursepackage1p0+zip"), + Mime::ApplicationVndD3mDataset => write!(f, "application/vnd.d3m-dataset"), + Mime::ApplicationVndD3mProblem => write!(f, "application/vnd.d3m-problem"), + Mime::ApplicationVndDart => write!(f, "application/vnd.dart"), + Mime::ApplicationVndDataVisionRdz => write!(f, "application/vnd.data-vision.rdz"), + Mime::ApplicationVndDatalog => write!(f, "application/vnd.datalog"), + Mime::ApplicationVndDatapackageJson => write!(f, "application/vnd.datapackage+json"), + Mime::ApplicationVndDataresourceJson => write!(f, "application/vnd.dataresource+json"), + Mime::ApplicationVndDbf => write!(f, "application/vnd.dbf"), + Mime::ApplicationVndDebianBinaryPackage => write!(f, "application/vnd.debian.binary-package"), + Mime::ApplicationVndDeceData => write!(f, "application/vnd.dece.data"), + Mime::ApplicationVndDeceTtmlXml => write!(f, "application/vnd.dece.ttml+xml"), + Mime::ApplicationVndDeceUnspecified => write!(f, "application/vnd.dece.unspecified"), + Mime::ApplicationVndDeceZip => write!(f, "application/vnd.dece.zip"), + Mime::ApplicationVndDenovoFcselayoutLink => write!(f, "application/vnd.denovo.fcselayout-link"), + Mime::ApplicationVndDesmumeMovie => write!(f, "application/vnd.desmume.movie"), + Mime::ApplicationVndDirBiPlateDlNosuffix => write!(f, "application/vnd.dir-bi.plate-dl-nosuffix"), + Mime::ApplicationVndDmDelegationXml => write!(f, "application/vnd.dm.delegation+xml"), + Mime::ApplicationVndDna => write!(f, "application/vnd.dna"), + Mime::ApplicationVndDocumentJson => write!(f, "application/vnd.document+json"), + Mime::ApplicationVndDolbyMobile1 => write!(f, "application/vnd.dolby.mobile.1"), + Mime::ApplicationVndDolbyMobile2 => write!(f, "application/vnd.dolby.mobile.2"), + Mime::ApplicationVndDoremirScorecloudBinaryDocument => write!(f, "application/vnd.doremir.scorecloud-binary-document"), + Mime::ApplicationVndDpgraph => write!(f, "application/vnd.dpgraph"), + Mime::ApplicationVndDreamfactory => write!(f, "application/vnd.dreamfactory"), + Mime::ApplicationVndDriveJson => write!(f, "application/vnd.drive+json"), + Mime::ApplicationVndDtgLocal => write!(f, "application/vnd.dtg.local"), + Mime::ApplicationVndDtgLocalFlash => write!(f, "application/vnd.dtg.local.flash"), + Mime::ApplicationVndDtgLocalHtml => write!(f, "application/vnd.dtg.local.html"), + Mime::ApplicationVndDvbAit => write!(f, "application/vnd.dvb.ait"), + Mime::ApplicationVndDvbDvbislXml => write!(f, "application/vnd.dvb.dvbisl+xml"), + Mime::ApplicationVndDvbDvbj => write!(f, "application/vnd.dvb.dvbj"), + Mime::ApplicationVndDvbEsgcontainer => write!(f, "application/vnd.dvb.esgcontainer"), + Mime::ApplicationVndDvbIpdcdftnotifaccess => write!(f, "application/vnd.dvb.ipdcdftnotifaccess"), + Mime::ApplicationVndDvbIpdcesgaccess => write!(f, "application/vnd.dvb.ipdcesgaccess"), + Mime::ApplicationVndDvbIpdcesgaccess2 => write!(f, "application/vnd.dvb.ipdcesgaccess2"), + Mime::ApplicationVndDvbIpdcesgpdd => write!(f, "application/vnd.dvb.ipdcesgpdd"), + Mime::ApplicationVndDvbIpdcroaming => write!(f, "application/vnd.dvb.ipdcroaming"), + Mime::ApplicationVndDvbIptvAlfecBase => write!(f, "application/vnd.dvb.iptv.alfec-base"), + Mime::ApplicationVndDvbIptvAlfecEnhancement => write!(f, "application/vnd.dvb.iptv.alfec-enhancement"), + Mime::ApplicationVndDvbNotifAggregateRootXml => write!(f, "application/vnd.dvb.notif-aggregate-root+xml"), + Mime::ApplicationVndDvbNotifContainerXml => write!(f, "application/vnd.dvb.notif-container+xml"), + Mime::ApplicationVndDvbNotifGenericXml => write!(f, "application/vnd.dvb.notif-generic+xml"), + Mime::ApplicationVndDvbNotifIaMsglistXml => write!(f, "application/vnd.dvb.notif-ia-msglist+xml"), + Mime::ApplicationVndDvbNotifIaRegistrationRequestXml => write!(f, "application/vnd.dvb.notif-ia-registration-request+xml"), + Mime::ApplicationVndDvbNotifIaRegistrationResponseXml => write!(f, "application/vnd.dvb.notif-ia-registration-response+xml"), + Mime::ApplicationVndDvbNotifInitXml => write!(f, "application/vnd.dvb.notif-init+xml"), + Mime::ApplicationVndDvbPfr => write!(f, "application/vnd.dvb.pfr"), + Mime::ApplicationVndDvbService => write!(f, "application/vnd.dvb.service"), + Mime::ApplicationVndDxr => write!(f, "application/vnd.dxr"), + Mime::ApplicationVndDynageo => write!(f, "application/vnd.dynageo"), + Mime::ApplicationVndDzr => write!(f, "application/vnd.dzr"), + Mime::ApplicationVndEasykaraokeCdgdownload => write!(f, "application/vnd.easykaraoke.cdgdownload"), + Mime::ApplicationVndEcipRlp => write!(f, "application/vnd.ecip.rlp"), + Mime::ApplicationVndEcdisUpdate => write!(f, "application/vnd.ecdis-update"), + Mime::ApplicationVndEclipseDittoJson => write!(f, "application/vnd.eclipse.ditto+json"), + Mime::ApplicationVndEcowinChart => write!(f, "application/vnd.ecowin.chart"), + Mime::ApplicationVndEcowinFilerequest => write!(f, "application/vnd.ecowin.filerequest"), + Mime::ApplicationVndEcowinFileupdate => write!(f, "application/vnd.ecowin.fileupdate"), + Mime::ApplicationVndEcowinSeries => write!(f, "application/vnd.ecowin.series"), + Mime::ApplicationVndEcowinSeriesrequest => write!(f, "application/vnd.ecowin.seriesrequest"), + Mime::ApplicationVndEcowinSeriesupdate => write!(f, "application/vnd.ecowin.seriesupdate"), + Mime::ApplicationVndEfiImg => write!(f, "application/vnd.efi.img"), + Mime::ApplicationVndEfiIso => write!(f, "application/vnd.efi.iso"), + Mime::ApplicationVndElnZip => write!(f, "application/vnd.eln+zip"), + Mime::ApplicationVndEmclientAccessrequestXml => write!(f, "application/vnd.emclient.accessrequest+xml"), + Mime::ApplicationVndEnliven => write!(f, "application/vnd.enliven"), + Mime::ApplicationVndEnphaseEnvoy => write!(f, "application/vnd.enphase.envoy"), + Mime::ApplicationVndEprintsDataXml => write!(f, "application/vnd.eprints.data+xml"), + Mime::ApplicationVndEpsonEsf => write!(f, "application/vnd.epson.esf"), + Mime::ApplicationVndEpsonMsf => write!(f, "application/vnd.epson.msf"), + Mime::ApplicationVndEpsonQuickanime => write!(f, "application/vnd.epson.quickanime"), + Mime::ApplicationVndEpsonSalt => write!(f, "application/vnd.epson.salt"), + Mime::ApplicationVndEpsonSsf => write!(f, "application/vnd.epson.ssf"), + Mime::ApplicationVndEricssonQuickcall => write!(f, "application/vnd.ericsson.quickcall"), + Mime::ApplicationVndEspassEspassZip => write!(f, "application/vnd.espass-espass+zip"), + Mime::ApplicationVndEszigno3Xml => write!(f, "application/vnd.eszigno3+xml"), + Mime::ApplicationVndEtsiAocXml => write!(f, "application/vnd.etsi.aoc+xml"), + Mime::ApplicationVndEtsiAsicSZip => write!(f, "application/vnd.etsi.asic-s+zip"), + Mime::ApplicationVndEtsiAsicEZip => write!(f, "application/vnd.etsi.asic-e+zip"), + Mime::ApplicationVndEtsiCugXml => write!(f, "application/vnd.etsi.cug+xml"), + Mime::ApplicationVndEtsiIptvcommandXml => write!(f, "application/vnd.etsi.iptvcommand+xml"), + Mime::ApplicationVndEtsiIptvdiscoveryXml => write!(f, "application/vnd.etsi.iptvdiscovery+xml"), + Mime::ApplicationVndEtsiIptvprofileXml => write!(f, "application/vnd.etsi.iptvprofile+xml"), + Mime::ApplicationVndEtsiIptvsadBcXml => write!(f, "application/vnd.etsi.iptvsad-bc+xml"), + Mime::ApplicationVndEtsiIptvsadCodXml => write!(f, "application/vnd.etsi.iptvsad-cod+xml"), + Mime::ApplicationVndEtsiIptvsadNpvrXml => write!(f, "application/vnd.etsi.iptvsad-npvr+xml"), + Mime::ApplicationVndEtsiIptvserviceXml => write!(f, "application/vnd.etsi.iptvservice+xml"), + Mime::ApplicationVndEtsiIptvsyncXml => write!(f, "application/vnd.etsi.iptvsync+xml"), + Mime::ApplicationVndEtsiIptvueprofileXml => write!(f, "application/vnd.etsi.iptvueprofile+xml"), + Mime::ApplicationVndEtsiMcidXml => write!(f, "application/vnd.etsi.mcid+xml"), + Mime::ApplicationVndEtsiMheg5 => write!(f, "application/vnd.etsi.mheg5"), + Mime::ApplicationVndEtsiOverloadControlPolicyDatasetXml => write!(f, "application/vnd.etsi.overload-control-policy-dataset+xml"), + Mime::ApplicationVndEtsiPstnXml => write!(f, "application/vnd.etsi.pstn+xml"), + Mime::ApplicationVndEtsiSciXml => write!(f, "application/vnd.etsi.sci+xml"), + Mime::ApplicationVndEtsiSimservsXml => write!(f, "application/vnd.etsi.simservs+xml"), + Mime::ApplicationVndEtsiTimestampToken => write!(f, "application/vnd.etsi.timestamp-token"), + Mime::ApplicationVndEtsiTslXml => write!(f, "application/vnd.etsi.tsl+xml"), + Mime::ApplicationVndEtsiTslDer => write!(f, "application/vnd.etsi.tsl.der"), + Mime::ApplicationVndEuKasparianCarJson => write!(f, "application/vnd.eu.kasparian.car+json"), + Mime::ApplicationVndEudoraData => write!(f, "application/vnd.eudora.data"), + Mime::ApplicationVndEvolvEcigProfile => write!(f, "application/vnd.evolv.ecig.profile"), + Mime::ApplicationVndEvolvEcigSettings => write!(f, "application/vnd.evolv.ecig.settings"), + Mime::ApplicationVndEvolvEcigTheme => write!(f, "application/vnd.evolv.ecig.theme"), + Mime::ApplicationVndExstreamEmpowerZip => write!(f, "application/vnd.exstream-empower+zip"), + Mime::ApplicationVndExstreamPackage => write!(f, "application/vnd.exstream-package"), + Mime::ApplicationVndEzpixAlbum => write!(f, "application/vnd.ezpix-album"), + Mime::ApplicationVndEzpixPackage => write!(f, "application/vnd.ezpix-package"), + Mime::ApplicationVndFSecureMobile => write!(f, "application/vnd.f-secure.mobile"), + Mime::ApplicationVndFastcopyDiskImage => write!(f, "application/vnd.fastcopy-disk-image"), + Mime::ApplicationVndFamilysearchGedcomZip => write!(f, "application/vnd.familysearch.gedcom+zip"), + Mime::ApplicationVndFdsnMseed => write!(f, "application/vnd.fdsn.mseed"), + Mime::ApplicationVndFdsnSeed => write!(f, "application/vnd.fdsn.seed"), + Mime::ApplicationVndFfsns => write!(f, "application/vnd.ffsns"), + Mime::ApplicationVndFiclabFlbZip => write!(f, "application/vnd.ficlab.flb+zip"), + Mime::ApplicationVndFilmitZfc => write!(f, "application/vnd.filmit.zfc"), + Mime::ApplicationVndFints => write!(f, "application/vnd.fints"), + Mime::ApplicationVndFiremonkeysCloudcell => write!(f, "application/vnd.firemonkeys.cloudcell"), + Mime::ApplicationVndFlographit => write!(f, "application/vnd.FloGraphIt"), + Mime::ApplicationVndFluxtimeClip => write!(f, "application/vnd.fluxtime.clip"), + Mime::ApplicationVndFontFontforgeSfd => write!(f, "application/vnd.font-fontforge-sfd"), + Mime::ApplicationVndFramemaker => write!(f, "application/vnd.framemaker"), + Mime::ApplicationVndFscWeblaunch => write!(f, "application/vnd.fsc.weblaunch"), + Mime::ApplicationVndFujifilmFbDocuworks => write!(f, "application/vnd.fujifilm.fb.docuworks"), + Mime::ApplicationVndFujifilmFbDocuworksBinder => write!(f, "application/vnd.fujifilm.fb.docuworks.binder"), + Mime::ApplicationVndFujifilmFbDocuworksContainer => write!(f, "application/vnd.fujifilm.fb.docuworks.container"), + Mime::ApplicationVndFujifilmFbJfiXml => write!(f, "application/vnd.fujifilm.fb.jfi+xml"), + Mime::ApplicationVndFujitsuOasys => write!(f, "application/vnd.fujitsu.oasys"), + Mime::ApplicationVndFujitsuOasys2 => write!(f, "application/vnd.fujitsu.oasys2"), + Mime::ApplicationVndFujitsuOasys3 => write!(f, "application/vnd.fujitsu.oasys3"), + Mime::ApplicationVndFujitsuOasysgp => write!(f, "application/vnd.fujitsu.oasysgp"), + Mime::ApplicationVndFujitsuOasysprs => write!(f, "application/vnd.fujitsu.oasysprs"), + Mime::ApplicationVndFujixeroxArt4 => write!(f, "application/vnd.fujixerox.ART4"), + Mime::ApplicationVndFujixeroxArtEx => write!(f, "application/vnd.fujixerox.ART-EX"), + Mime::ApplicationVndFujixeroxDdd => write!(f, "application/vnd.fujixerox.ddd"), + Mime::ApplicationVndFujixeroxDocuworks => write!(f, "application/vnd.fujixerox.docuworks"), + Mime::ApplicationVndFujixeroxDocuworksBinder => write!(f, "application/vnd.fujixerox.docuworks.binder"), + Mime::ApplicationVndFujixeroxDocuworksContainer => write!(f, "application/vnd.fujixerox.docuworks.container"), + Mime::ApplicationVndFujixeroxHbpl => write!(f, "application/vnd.fujixerox.HBPL"), + Mime::ApplicationVndFutMisnet => write!(f, "application/vnd.fut-misnet"), + Mime::ApplicationVndFutoinCbor => write!(f, "application/vnd.futoin+cbor"), + Mime::ApplicationVndFutoinJson => write!(f, "application/vnd.futoin+json"), + Mime::ApplicationVndFuzzysheet => write!(f, "application/vnd.fuzzysheet"), + Mime::ApplicationVndGenomatixTuxedo => write!(f, "application/vnd.genomatix.tuxedo"), + Mime::ApplicationVndGenozip => write!(f, "application/vnd.genozip"), + Mime::ApplicationVndGenticsGrdJson => write!(f, "application/vnd.gentics.grd+json"), + Mime::ApplicationVndGentooCatmetadataXml => write!(f, "application/vnd.gentoo.catmetadata+xml"), + Mime::ApplicationVndGentooEbuild => write!(f, "application/vnd.gentoo.ebuild"), + Mime::ApplicationVndGentooEclass => write!(f, "application/vnd.gentoo.eclass"), + Mime::ApplicationVndGentooGpkg => write!(f, "application/vnd.gentoo.gpkg"), + Mime::ApplicationVndGentooManifest => write!(f, "application/vnd.gentoo.manifest"), + Mime::ApplicationVndGentooXpak => write!(f, "application/vnd.gentoo.xpak"), + Mime::ApplicationVndGentooPkgmetadataXml => write!(f, "application/vnd.gentoo.pkgmetadata+xml"), + Mime::ApplicationVndGeogebraFile => write!(f, "application/vnd.geogebra.file"), + Mime::ApplicationVndGeogebraSlides => write!(f, "application/vnd.geogebra.slides"), + Mime::ApplicationVndGeogebraTool => write!(f, "application/vnd.geogebra.tool"), + Mime::ApplicationVndGeometryExplorer => write!(f, "application/vnd.geometry-explorer"), + Mime::ApplicationVndGeonext => write!(f, "application/vnd.geonext"), + Mime::ApplicationVndGeoplan => write!(f, "application/vnd.geoplan"), + Mime::ApplicationVndGeospace => write!(f, "application/vnd.geospace"), + Mime::ApplicationVndGerber => write!(f, "application/vnd.gerber"), + Mime::ApplicationVndGlobalplatformCardContentMgt => write!(f, "application/vnd.globalplatform.card-content-mgt"), + Mime::ApplicationVndGlobalplatformCardContentMgtResponse => write!(f, "application/vnd.globalplatform.card-content-mgt-response"), + Mime::ApplicationVndGnuTalerExchangeJson => write!(f, "application/vnd.gnu.taler.exchange+json"), + Mime::ApplicationVndGnuTalerMerchantJson => write!(f, "application/vnd.gnu.taler.merchant+json"), + Mime::ApplicationVndGoogleEarthKmlXml => write!(f, "application/vnd.google-earth.kml+xml"), + Mime::ApplicationVndGoogleEarthKmz => write!(f, "application/vnd.google-earth.kmz"), + Mime::ApplicationVndGovSkEFormXml => write!(f, "application/vnd.gov.sk.e-form+xml"), + Mime::ApplicationVndGovSkEFormZip => write!(f, "application/vnd.gov.sk.e-form+zip"), + Mime::ApplicationVndGovSkXmldatacontainerXml => write!(f, "application/vnd.gov.sk.xmldatacontainer+xml"), + Mime::ApplicationVndGpxseeMapXml => write!(f, "application/vnd.gpxsee.map+xml"), + Mime::ApplicationVndGrafeq => write!(f, "application/vnd.grafeq"), + Mime::ApplicationVndGridmp => write!(f, "application/vnd.gridmp"), + Mime::ApplicationVndGrooveAccount => write!(f, "application/vnd.groove-account"), + Mime::ApplicationVndGrooveHelp => write!(f, "application/vnd.groove-help"), + Mime::ApplicationVndGrooveIdentityMessage => write!(f, "application/vnd.groove-identity-message"), + Mime::ApplicationVndGrooveInjector => write!(f, "application/vnd.groove-injector"), + Mime::ApplicationVndGrooveToolMessage => write!(f, "application/vnd.groove-tool-message"), + Mime::ApplicationVndGrooveToolTemplate => write!(f, "application/vnd.groove-tool-template"), + Mime::ApplicationVndGrooveVcard => write!(f, "application/vnd.groove-vcard"), + Mime::ApplicationVndHalJson => write!(f, "application/vnd.hal+json"), + Mime::ApplicationVndHalXml => write!(f, "application/vnd.hal+xml"), + Mime::ApplicationVndHandheldEntertainmentXml => write!(f, "application/vnd.HandHeld-Entertainment+xml"), + Mime::ApplicationVndHbci => write!(f, "application/vnd.hbci"), + Mime::ApplicationVndHcJson => write!(f, "application/vnd.hc+json"), + Mime::ApplicationVndHclBireports => write!(f, "application/vnd.hcl-bireports"), + Mime::ApplicationVndHdt => write!(f, "application/vnd.hdt"), + Mime::ApplicationVndHerokuJson => write!(f, "application/vnd.heroku+json"), + Mime::ApplicationVndHheLessonPlayer => write!(f, "application/vnd.hhe.lesson-player"), + Mime::ApplicationVndHpHpgl => write!(f, "application/vnd.hp-HPGL"), + Mime::ApplicationVndHpHpid => write!(f, "application/vnd.hp-hpid"), + Mime::ApplicationVndHpHps => write!(f, "application/vnd.hp-hps"), + Mime::ApplicationVndHpJlyt => write!(f, "application/vnd.hp-jlyt"), + Mime::ApplicationVndHpPcl => write!(f, "application/vnd.hp-PCL"), + Mime::ApplicationVndHpPclxl => write!(f, "application/vnd.hp-PCLXL"), + Mime::ApplicationVndHsl => write!(f, "application/vnd.hsl"), + Mime::ApplicationVndHttphone => write!(f, "application/vnd.httphone"), + Mime::ApplicationVndHydrostatixSofData => write!(f, "application/vnd.hydrostatix.sof-data"), + Mime::ApplicationVndHyperItemJson => write!(f, "application/vnd.hyper-item+json"), + Mime::ApplicationVndHyperJson => write!(f, "application/vnd.hyper+json"), + Mime::ApplicationVndHyperdriveJson => write!(f, "application/vnd.hyperdrive+json"), + Mime::ApplicationVndHzn3dCrossword => write!(f, "application/vnd.hzn-3d-crossword"), + Mime::ApplicationVndIbmElectronicMedia => write!(f, "application/vnd.ibm.electronic-media"), + Mime::ApplicationVndIbmMinipay => write!(f, "application/vnd.ibm.MiniPay"), + Mime::ApplicationVndIbmRightsManagement => write!(f, "application/vnd.ibm.rights-management"), + Mime::ApplicationVndIbmSecureContainer => write!(f, "application/vnd.ibm.secure-container"), + Mime::ApplicationVndIccprofile => write!(f, "application/vnd.iccprofile"), + Mime::ApplicationVndIeee1905 => write!(f, "application/vnd.ieee.1905"), + Mime::ApplicationVndIgloader => write!(f, "application/vnd.igloader"), + Mime::ApplicationVndImagemeterFolderZip => write!(f, "application/vnd.imagemeter.folder+zip"), + Mime::ApplicationVndImagemeterImageZip => write!(f, "application/vnd.imagemeter.image+zip"), + Mime::ApplicationVndImmervisionIvp => write!(f, "application/vnd.immervision-ivp"), + Mime::ApplicationVndImmervisionIvu => write!(f, "application/vnd.immervision-ivu"), + Mime::ApplicationVndImsImsccv1p1 => write!(f, "application/vnd.ims.imsccv1p1"), + Mime::ApplicationVndImsImsccv1p2 => write!(f, "application/vnd.ims.imsccv1p2"), + Mime::ApplicationVndImsImsccv1p3 => write!(f, "application/vnd.ims.imsccv1p3"), + Mime::ApplicationVndImsLisV2ResultJson => write!(f, "application/vnd.ims.lis.v2.result+json"), + Mime::ApplicationVndImsLtiV2ToolconsumerprofileJson => write!(f, "application/vnd.ims.lti.v2.toolconsumerprofile+json"), + Mime::ApplicationVndImsLtiV2ToolproxyIdJson => write!(f, "application/vnd.ims.lti.v2.toolproxy.id+json"), + Mime::ApplicationVndImsLtiV2ToolproxyJson => write!(f, "application/vnd.ims.lti.v2.toolproxy+json"), + Mime::ApplicationVndImsLtiV2ToolsettingsJson => write!(f, "application/vnd.ims.lti.v2.toolsettings+json"), + Mime::ApplicationVndImsLtiV2ToolsettingsSimpleJson => write!(f, "application/vnd.ims.lti.v2.toolsettings.simple+json"), + Mime::ApplicationVndInformedcontrolRmsXml => write!(f, "application/vnd.informedcontrol.rms+xml"), + Mime::ApplicationVndInfotechProject => write!(f, "application/vnd.infotech.project"), + Mime::ApplicationVndInfotechProjectXml => write!(f, "application/vnd.infotech.project+xml"), + Mime::ApplicationVndInnopathWampNotification => write!(f, "application/vnd.innopath.wamp.notification"), + Mime::ApplicationVndInsorsIgm => write!(f, "application/vnd.insors.igm"), + Mime::ApplicationVndInterconFormnet => write!(f, "application/vnd.intercon.formnet"), + Mime::ApplicationVndIntergeo => write!(f, "application/vnd.intergeo"), + Mime::ApplicationVndIntertrustDigibox => write!(f, "application/vnd.intertrust.digibox"), + Mime::ApplicationVndIntertrustNncp => write!(f, "application/vnd.intertrust.nncp"), + Mime::ApplicationVndIntuQbo => write!(f, "application/vnd.intu.qbo"), + Mime::ApplicationVndIntuQfx => write!(f, "application/vnd.intu.qfx"), + Mime::ApplicationVndIpfsIpnsRecord => write!(f, "application/vnd.ipfs.ipns-record"), + Mime::ApplicationVndIpldCar => write!(f, "application/vnd.ipld.car"), + Mime::ApplicationVndIpldDagCbor => write!(f, "application/vnd.ipld.dag-cbor"), + Mime::ApplicationVndIpldDagJson => write!(f, "application/vnd.ipld.dag-json"), + Mime::ApplicationVndIpldRaw => write!(f, "application/vnd.ipld.raw"), + Mime::ApplicationVndIptcG2CatalogitemXml => write!(f, "application/vnd.iptc.g2.catalogitem+xml"), + Mime::ApplicationVndIptcG2ConceptitemXml => write!(f, "application/vnd.iptc.g2.conceptitem+xml"), + Mime::ApplicationVndIptcG2KnowledgeitemXml => write!(f, "application/vnd.iptc.g2.knowledgeitem+xml"), + Mime::ApplicationVndIptcG2NewsitemXml => write!(f, "application/vnd.iptc.g2.newsitem+xml"), + Mime::ApplicationVndIptcG2NewsmessageXml => write!(f, "application/vnd.iptc.g2.newsmessage+xml"), + Mime::ApplicationVndIptcG2PackageitemXml => write!(f, "application/vnd.iptc.g2.packageitem+xml"), + Mime::ApplicationVndIptcG2PlanningitemXml => write!(f, "application/vnd.iptc.g2.planningitem+xml"), + Mime::ApplicationVndIpunpluggedRcprofile => write!(f, "application/vnd.ipunplugged.rcprofile"), + Mime::ApplicationVndIrepositoryPackageXml => write!(f, "application/vnd.irepository.package+xml"), + Mime::ApplicationVndIsXpr => write!(f, "application/vnd.is-xpr"), + Mime::ApplicationVndIsacFcs => write!(f, "application/vnd.isac.fcs"), + Mime::ApplicationVndJam => write!(f, "application/vnd.jam"), + Mime::ApplicationVndIso1178310Zip => write!(f, "application/vnd.iso11783-10+zip"), + Mime::ApplicationVndJapannetDirectoryService => write!(f, "application/vnd.japannet-directory-service"), + Mime::ApplicationVndJapannetJpnstoreWakeup => write!(f, "application/vnd.japannet-jpnstore-wakeup"), + Mime::ApplicationVndJapannetPaymentWakeup => write!(f, "application/vnd.japannet-payment-wakeup"), + Mime::ApplicationVndJapannetRegistration => write!(f, "application/vnd.japannet-registration"), + Mime::ApplicationVndJapannetRegistrationWakeup => write!(f, "application/vnd.japannet-registration-wakeup"), + Mime::ApplicationVndJapannetSetstoreWakeup => write!(f, "application/vnd.japannet-setstore-wakeup"), + Mime::ApplicationVndJapannetVerification => write!(f, "application/vnd.japannet-verification"), + Mime::ApplicationVndJapannetVerificationWakeup => write!(f, "application/vnd.japannet-verification-wakeup"), + Mime::ApplicationVndJcpJavameMidletRms => write!(f, "application/vnd.jcp.javame.midlet-rms"), + Mime::ApplicationVndJisp => write!(f, "application/vnd.jisp"), + Mime::ApplicationVndJoostJodaArchive => write!(f, "application/vnd.joost.joda-archive"), + Mime::ApplicationVndJskIsdnNgn => write!(f, "application/vnd.jsk.isdn-ngn"), + Mime::ApplicationVndKahootz => write!(f, "application/vnd.kahootz"), + Mime::ApplicationVndKdeKarbon => write!(f, "application/vnd.kde.karbon"), + Mime::ApplicationVndKdeKchart => write!(f, "application/vnd.kde.kchart"), + Mime::ApplicationVndKdeKformula => write!(f, "application/vnd.kde.kformula"), + Mime::ApplicationVndKdeKivio => write!(f, "application/vnd.kde.kivio"), + Mime::ApplicationVndKdeKontour => write!(f, "application/vnd.kde.kontour"), + Mime::ApplicationVndKdeKpresenter => write!(f, "application/vnd.kde.kpresenter"), + Mime::ApplicationVndKdeKspread => write!(f, "application/vnd.kde.kspread"), + Mime::ApplicationVndKdeKword => write!(f, "application/vnd.kde.kword"), + Mime::ApplicationVndKenameaapp => write!(f, "application/vnd.kenameaapp"), + Mime::ApplicationVndKidspiration => write!(f, "application/vnd.kidspiration"), + Mime::ApplicationVndKinar => write!(f, "application/vnd.Kinar"), + Mime::ApplicationVndKoan => write!(f, "application/vnd.koan"), + Mime::ApplicationVndKodakDescriptor => write!(f, "application/vnd.kodak-descriptor"), + Mime::ApplicationVndLas => write!(f, "application/vnd.las"), + Mime::ApplicationVndLasLasJson => write!(f, "application/vnd.las.las+json"), + Mime::ApplicationVndLasLasXml => write!(f, "application/vnd.las.las+xml"), + Mime::ApplicationVndLaszip => write!(f, "application/vnd.laszip"), + Mime::ApplicationVndLeapJson => write!(f, "application/vnd.leap+json"), + Mime::ApplicationVndLibertyRequestXml => write!(f, "application/vnd.liberty-request+xml"), + Mime::ApplicationVndLlamagraphicsLifeBalanceDesktop => write!(f, "application/vnd.llamagraphics.life-balance.desktop"), + Mime::ApplicationVndLlamagraphicsLifeBalanceExchangeXml => write!(f, "application/vnd.llamagraphics.life-balance.exchange+xml"), + Mime::ApplicationVndLogipipeCircuitZip => write!(f, "application/vnd.logipipe.circuit+zip"), + Mime::ApplicationVndLoom => write!(f, "application/vnd.loom"), + Mime::ApplicationVndLotus123 => write!(f, "application/vnd.lotus-1-2-3"), + Mime::ApplicationVndLotusApproach => write!(f, "application/vnd.lotus-approach"), + Mime::ApplicationVndLotusFreelance => write!(f, "application/vnd.lotus-freelance"), + Mime::ApplicationVndLotusNotes => write!(f, "application/vnd.lotus-notes"), + Mime::ApplicationVndLotusOrganizer => write!(f, "application/vnd.lotus-organizer"), + Mime::ApplicationVndLotusScreencam => write!(f, "application/vnd.lotus-screencam"), + Mime::ApplicationVndLotusWordpro => write!(f, "application/vnd.lotus-wordpro"), + Mime::ApplicationVndMacportsPortpkg => write!(f, "application/vnd.macports.portpkg"), + Mime::ApplicationVndMapboxVectorTile => write!(f, "application/vnd.mapbox-vector-tile"), + Mime::ApplicationVndMarlinDrmActiontokenXml => write!(f, "application/vnd.marlin.drm.actiontoken+xml"), + Mime::ApplicationVndMarlinDrmConftokenXml => write!(f, "application/vnd.marlin.drm.conftoken+xml"), + Mime::ApplicationVndMarlinDrmLicenseXml => write!(f, "application/vnd.marlin.drm.license+xml"), + Mime::ApplicationVndMarlinDrmMdcf => write!(f, "application/vnd.marlin.drm.mdcf"), + Mime::ApplicationVndMasonJson => write!(f, "application/vnd.mason+json"), + Mime::ApplicationVndMaxarArchive3tzZip => write!(f, "application/vnd.maxar.archive.3tz+zip"), + Mime::ApplicationVndMaxmindMaxmindDb => write!(f, "application/vnd.maxmind.maxmind-db"), + Mime::ApplicationVndMcd => write!(f, "application/vnd.mcd"), + Mime::ApplicationVndMdl => write!(f, "application/vnd.mdl"), + Mime::ApplicationVndMdlMbsdf => write!(f, "application/vnd.mdl-mbsdf"), + Mime::ApplicationVndMedcalcdata => write!(f, "application/vnd.medcalcdata"), + Mime::ApplicationVndMediastationCdkey => write!(f, "application/vnd.mediastation.cdkey"), + Mime::ApplicationVndMedicalholodeckRecordxr => write!(f, "application/vnd.medicalholodeck.recordxr"), + Mime::ApplicationVndMeridianSlingshot => write!(f, "application/vnd.meridian-slingshot"), + Mime::ApplicationVndMfer => write!(f, "application/vnd.MFER"), + Mime::ApplicationVndMfmp => write!(f, "application/vnd.mfmp"), + Mime::ApplicationVndMicroJson => write!(f, "application/vnd.micro+json"), + Mime::ApplicationVndMicrografxFlo => write!(f, "application/vnd.micrografx.flo"), + Mime::ApplicationVndMicrografxIgx => write!(f, "application/vnd.micrografx.igx"), + Mime::ApplicationVndMicrosoftPortableExecutable => write!(f, "application/vnd.microsoft.portable-executable"), + Mime::ApplicationVndMicrosoftWindowsThumbnailCache => write!(f, "application/vnd.microsoft.windows.thumbnail-cache"), + Mime::ApplicationVndMieleJson => write!(f, "application/vnd.miele+json"), + Mime::ApplicationVndMif => write!(f, "application/vnd.mif"), + Mime::ApplicationVndMinisoftHp3000Save => write!(f, "application/vnd.minisoft-hp3000-save"), + Mime::ApplicationVndMitsubishiMistyGuardTrustweb => write!(f, "application/vnd.mitsubishi.misty-guard.trustweb"), + Mime::ApplicationVndMobiusDaf => write!(f, "application/vnd.Mobius.DAF"), + Mime::ApplicationVndMobiusDis => write!(f, "application/vnd.Mobius.DIS"), + Mime::ApplicationVndMobiusMbk => write!(f, "application/vnd.Mobius.MBK"), + Mime::ApplicationVndMobiusMqy => write!(f, "application/vnd.Mobius.MQY"), + Mime::ApplicationVndMobiusMsl => write!(f, "application/vnd.Mobius.MSL"), + Mime::ApplicationVndMobiusPlc => write!(f, "application/vnd.Mobius.PLC"), + Mime::ApplicationVndMobiusTxf => write!(f, "application/vnd.Mobius.TXF"), + Mime::ApplicationVndModl => write!(f, "application/vnd.modl"), + Mime::ApplicationVndMophunApplication => write!(f, "application/vnd.mophun.application"), + Mime::ApplicationVndMophunCertificate => write!(f, "application/vnd.mophun.certificate"), + Mime::ApplicationVndMotorolaFlexsuite => write!(f, "application/vnd.motorola.flexsuite"), + Mime::ApplicationVndMotorolaFlexsuiteAdsi => write!(f, "application/vnd.motorola.flexsuite.adsi"), + Mime::ApplicationVndMotorolaFlexsuiteFis => write!(f, "application/vnd.motorola.flexsuite.fis"), + Mime::ApplicationVndMotorolaFlexsuiteGotap => write!(f, "application/vnd.motorola.flexsuite.gotap"), + Mime::ApplicationVndMotorolaFlexsuiteKmr => write!(f, "application/vnd.motorola.flexsuite.kmr"), + Mime::ApplicationVndMotorolaFlexsuiteTtc => write!(f, "application/vnd.motorola.flexsuite.ttc"), + Mime::ApplicationVndMotorolaFlexsuiteWem => write!(f, "application/vnd.motorola.flexsuite.wem"), + Mime::ApplicationVndMotorolaIprm => write!(f, "application/vnd.motorola.iprm"), + Mime::ApplicationVndMozillaXulXml => write!(f, "application/vnd.mozilla.xul+xml"), + Mime::ApplicationVndMsArtgalry => write!(f, "application/vnd.ms-artgalry"), + Mime::ApplicationVndMsAsf => write!(f, "application/vnd.ms-asf"), + Mime::ApplicationVndMsCabCompressed => write!(f, "application/vnd.ms-cab-compressed"), + Mime::ApplicationVndMs3mfdocument => write!(f, "application/vnd.ms-3mfdocument"), + Mime::ApplicationVndMsExcel => write!(f, "application/vnd.ms-excel"), + Mime::ApplicationVndMsExcelAddinMacroenabled12 => write!(f, "application/vnd.ms-excel.addin.macroEnabled.12"), + Mime::ApplicationVndMsExcelSheetBinaryMacroenabled12 => write!(f, "application/vnd.ms-excel.sheet.binary.macroEnabled.12"), + Mime::ApplicationVndMsExcelSheetMacroenabled12 => write!(f, "application/vnd.ms-excel.sheet.macroEnabled.12"), + Mime::ApplicationVndMsExcelTemplateMacroenabled12 => write!(f, "application/vnd.ms-excel.template.macroEnabled.12"), + Mime::ApplicationVndMsFontobject => write!(f, "application/vnd.ms-fontobject"), + Mime::ApplicationVndMsHtmlhelp => write!(f, "application/vnd.ms-htmlhelp"), + Mime::ApplicationVndMsIms => write!(f, "application/vnd.ms-ims"), + Mime::ApplicationVndMsLrm => write!(f, "application/vnd.ms-lrm"), + Mime::ApplicationVndMsOfficeActivexXml => write!(f, "application/vnd.ms-office.activeX+xml"), + Mime::ApplicationVndMsOfficetheme => write!(f, "application/vnd.ms-officetheme"), + Mime::ApplicationVndMsPlayreadyInitiatorXml => write!(f, "application/vnd.ms-playready.initiator+xml"), + Mime::ApplicationVndMsPowerpoint => write!(f, "application/vnd.ms-powerpoint"), + Mime::ApplicationVndMsPowerpointAddinMacroenabled12 => write!(f, "application/vnd.ms-powerpoint.addin.macroEnabled.12"), + Mime::ApplicationVndMsPowerpointPresentationMacroenabled12 => write!(f, "application/vnd.ms-powerpoint.presentation.macroEnabled.12"), + Mime::ApplicationVndMsPowerpointSlideMacroenabled12 => write!(f, "application/vnd.ms-powerpoint.slide.macroEnabled.12"), + Mime::ApplicationVndMsPowerpointSlideshowMacroenabled12 => write!(f, "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"), + Mime::ApplicationVndMsPowerpointTemplateMacroenabled12 => write!(f, "application/vnd.ms-powerpoint.template.macroEnabled.12"), + Mime::ApplicationVndMsPrintdevicecapabilitiesXml => write!(f, "application/vnd.ms-PrintDeviceCapabilities+xml"), + Mime::ApplicationVndMsPrintschematicketXml => write!(f, "application/vnd.ms-PrintSchemaTicket+xml"), + Mime::ApplicationVndMsProject => write!(f, "application/vnd.ms-project"), + Mime::ApplicationVndMsTnef => write!(f, "application/vnd.ms-tnef"), + Mime::ApplicationVndMsWindowsDevicepairing => write!(f, "application/vnd.ms-windows.devicepairing"), + Mime::ApplicationVndMsWindowsNwprintingOob => write!(f, "application/vnd.ms-windows.nwprinting.oob"), + Mime::ApplicationVndMsWindowsPrinterpairing => write!(f, "application/vnd.ms-windows.printerpairing"), + Mime::ApplicationVndMsWindowsWsdOob => write!(f, "application/vnd.ms-windows.wsd.oob"), + Mime::ApplicationVndMsWmdrmLicChlgReq => write!(f, "application/vnd.ms-wmdrm.lic-chlg-req"), + Mime::ApplicationVndMsWmdrmLicResp => write!(f, "application/vnd.ms-wmdrm.lic-resp"), + Mime::ApplicationVndMsWmdrmMeterChlgReq => write!(f, "application/vnd.ms-wmdrm.meter-chlg-req"), + Mime::ApplicationVndMsWmdrmMeterResp => write!(f, "application/vnd.ms-wmdrm.meter-resp"), + Mime::ApplicationVndMsWordDocumentMacroenabled12 => write!(f, "application/vnd.ms-word.document.macroEnabled.12"), + Mime::ApplicationVndMsWordTemplateMacroenabled12 => write!(f, "application/vnd.ms-word.template.macroEnabled.12"), + Mime::ApplicationVndMsWorks => write!(f, "application/vnd.ms-works"), + Mime::ApplicationVndMsWpl => write!(f, "application/vnd.ms-wpl"), + Mime::ApplicationVndMsXpsdocument => write!(f, "application/vnd.ms-xpsdocument"), + Mime::ApplicationVndMsaDiskImage => write!(f, "application/vnd.msa-disk-image"), + Mime::ApplicationVndMseq => write!(f, "application/vnd.mseq"), + Mime::ApplicationVndMsign => write!(f, "application/vnd.msign"), + Mime::ApplicationVndMultiadCreator => write!(f, "application/vnd.multiad.creator"), + Mime::ApplicationVndMultiadCreatorCif => write!(f, "application/vnd.multiad.creator.cif"), + Mime::ApplicationVndMusician => write!(f, "application/vnd.musician"), + Mime::ApplicationVndMusicNiff => write!(f, "application/vnd.music-niff"), + Mime::ApplicationVndMuveeStyle => write!(f, "application/vnd.muvee.style"), + Mime::ApplicationVndMynfc => write!(f, "application/vnd.mynfc"), + Mime::ApplicationVndNacamarYbridJson => write!(f, "application/vnd.nacamar.ybrid+json"), + Mime::ApplicationVndNcdControl => write!(f, "application/vnd.ncd.control"), + Mime::ApplicationVndNcdReference => write!(f, "application/vnd.ncd.reference"), + Mime::ApplicationVndNearstInvJson => write!(f, "application/vnd.nearst.inv+json"), + Mime::ApplicationVndNebumindLine => write!(f, "application/vnd.nebumind.line"), + Mime::ApplicationVndNervana => write!(f, "application/vnd.nervana"), + Mime::ApplicationVndNetfpx => write!(f, "application/vnd.netfpx"), + Mime::ApplicationVndNeurolanguageNlu => write!(f, "application/vnd.neurolanguage.nlu"), + Mime::ApplicationVndNimn => write!(f, "application/vnd.nimn"), + Mime::ApplicationVndNintendoSnesRom => write!(f, "application/vnd.nintendo.snes.rom"), + Mime::ApplicationVndNintendoNitroRom => write!(f, "application/vnd.nintendo.nitro.rom"), + Mime::ApplicationVndNitf => write!(f, "application/vnd.nitf"), + Mime::ApplicationVndNoblenetDirectory => write!(f, "application/vnd.noblenet-directory"), + Mime::ApplicationVndNoblenetSealer => write!(f, "application/vnd.noblenet-sealer"), + Mime::ApplicationVndNoblenetWeb => write!(f, "application/vnd.noblenet-web"), + Mime::ApplicationVndNokiaCatalogs => write!(f, "application/vnd.nokia.catalogs"), + Mime::ApplicationVndNokiaConmlWbxml => write!(f, "application/vnd.nokia.conml+wbxml"), + Mime::ApplicationVndNokiaConmlXml => write!(f, "application/vnd.nokia.conml+xml"), + Mime::ApplicationVndNokiaIptvConfigXml => write!(f, "application/vnd.nokia.iptv.config+xml"), + Mime::ApplicationVndNokiaIsdsRadioPresets => write!(f, "application/vnd.nokia.iSDS-radio-presets"), + Mime::ApplicationVndNokiaLandmarkWbxml => write!(f, "application/vnd.nokia.landmark+wbxml"), + Mime::ApplicationVndNokiaLandmarkXml => write!(f, "application/vnd.nokia.landmark+xml"), + Mime::ApplicationVndNokiaLandmarkcollectionXml => write!(f, "application/vnd.nokia.landmarkcollection+xml"), + Mime::ApplicationVndNokiaNcd => write!(f, "application/vnd.nokia.ncd"), + Mime::ApplicationVndNokiaNGageAcXml => write!(f, "application/vnd.nokia.n-gage.ac+xml"), + Mime::ApplicationVndNokiaNGageData => write!(f, "application/vnd.nokia.n-gage.data"), + Mime::ApplicationVndNokiaPcdWbxml => write!(f, "application/vnd.nokia.pcd+wbxml"), + Mime::ApplicationVndNokiaPcdXml => write!(f, "application/vnd.nokia.pcd+xml"), + Mime::ApplicationVndNokiaRadioPreset => write!(f, "application/vnd.nokia.radio-preset"), + Mime::ApplicationVndNokiaRadioPresets => write!(f, "application/vnd.nokia.radio-presets"), + Mime::ApplicationVndNovadigmEdm => write!(f, "application/vnd.novadigm.EDM"), + Mime::ApplicationVndNovadigmEdx => write!(f, "application/vnd.novadigm.EDX"), + Mime::ApplicationVndNovadigmExt => write!(f, "application/vnd.novadigm.EXT"), + Mime::ApplicationVndNttLocalContentShare => write!(f, "application/vnd.ntt-local.content-share"), + Mime::ApplicationVndNttLocalFileTransfer => write!(f, "application/vnd.ntt-local.file-transfer"), + Mime::ApplicationVndNttLocalOgwRemoteAccess => write!(f, "application/vnd.ntt-local.ogw_remote-access"), + Mime::ApplicationVndNttLocalSipTaRemote => write!(f, "application/vnd.ntt-local.sip-ta_remote"), + Mime::ApplicationVndNttLocalSipTaTcpStream => write!(f, "application/vnd.ntt-local.sip-ta_tcp_stream"), + Mime::ApplicationVndOasisOpendocumentBase => write!(f, "application/vnd.oasis.opendocument.base"), + Mime::ApplicationVndOasisOpendocumentChart => write!(f, "application/vnd.oasis.opendocument.chart"), + Mime::ApplicationVndOasisOpendocumentChartTemplate => write!(f, "application/vnd.oasis.opendocument.chart-template"), + Mime::ApplicationVndOasisOpendocumentFormula => write!(f, "application/vnd.oasis.opendocument.formula"), + Mime::ApplicationVndOasisOpendocumentFormulaTemplate => write!(f, "application/vnd.oasis.opendocument.formula-template"), + Mime::ApplicationVndOasisOpendocumentGraphics => write!(f, "application/vnd.oasis.opendocument.graphics"), + Mime::ApplicationVndOasisOpendocumentGraphicsTemplate => write!(f, "application/vnd.oasis.opendocument.graphics-template"), + Mime::ApplicationVndOasisOpendocumentImage => write!(f, "application/vnd.oasis.opendocument.image"), + Mime::ApplicationVndOasisOpendocumentImageTemplate => write!(f, "application/vnd.oasis.opendocument.image-template"), + Mime::ApplicationVndOasisOpendocumentPresentation => write!(f, "application/vnd.oasis.opendocument.presentation"), + Mime::ApplicationVndOasisOpendocumentPresentationTemplate => write!(f, "application/vnd.oasis.opendocument.presentation-template"), + Mime::ApplicationVndOasisOpendocumentSpreadsheet => write!(f, "application/vnd.oasis.opendocument.spreadsheet"), + Mime::ApplicationVndOasisOpendocumentSpreadsheetTemplate => write!(f, "application/vnd.oasis.opendocument.spreadsheet-template"), + Mime::ApplicationVndOasisOpendocumentText => write!(f, "application/vnd.oasis.opendocument.text"), + Mime::ApplicationVndOasisOpendocumentTextMaster => write!(f, "application/vnd.oasis.opendocument.text-master"), + Mime::ApplicationVndOasisOpendocumentTextMasterTemplate => write!(f, "application/vnd.oasis.opendocument.text-master-template"), + Mime::ApplicationVndOasisOpendocumentTextTemplate => write!(f, "application/vnd.oasis.opendocument.text-template"), + Mime::ApplicationVndOasisOpendocumentTextWeb => write!(f, "application/vnd.oasis.opendocument.text-web"), + Mime::ApplicationVndObn => write!(f, "application/vnd.obn"), + Mime::ApplicationVndOcfCbor => write!(f, "application/vnd.ocf+cbor"), + Mime::ApplicationVndOciImageManifestV1Json => write!(f, "application/vnd.oci.image.manifest.v1+json"), + Mime::ApplicationVndOftnL10nJson => write!(f, "application/vnd.oftn.l10n+json"), + Mime::ApplicationVndOipfContentaccessdownloadXml => write!(f, "application/vnd.oipf.contentaccessdownload+xml"), + Mime::ApplicationVndOipfContentaccessstreamingXml => write!(f, "application/vnd.oipf.contentaccessstreaming+xml"), + Mime::ApplicationVndOipfCspgHexbinary => write!(f, "application/vnd.oipf.cspg-hexbinary"), + Mime::ApplicationVndOipfDaeSvgXml => write!(f, "application/vnd.oipf.dae.svg+xml"), + Mime::ApplicationVndOipfDaeXhtmlXml => write!(f, "application/vnd.oipf.dae.xhtml+xml"), + Mime::ApplicationVndOipfMippvcontrolmessageXml => write!(f, "application/vnd.oipf.mippvcontrolmessage+xml"), + Mime::ApplicationVndOipfPaeGem => write!(f, "application/vnd.oipf.pae.gem"), + Mime::ApplicationVndOipfSpdiscoveryXml => write!(f, "application/vnd.oipf.spdiscovery+xml"), + Mime::ApplicationVndOipfSpdlistXml => write!(f, "application/vnd.oipf.spdlist+xml"), + Mime::ApplicationVndOipfUeprofileXml => write!(f, "application/vnd.oipf.ueprofile+xml"), + Mime::ApplicationVndOipfUserprofileXml => write!(f, "application/vnd.oipf.userprofile+xml"), + Mime::ApplicationVndOlpcSugar => write!(f, "application/vnd.olpc-sugar"), + Mime::ApplicationVndOmaBcastAssociatedProcedureParameterXml => write!(f, "application/vnd.oma.bcast.associated-procedure-parameter+xml"), + Mime::ApplicationVndOmaBcastDrmTriggerXml => write!(f, "application/vnd.oma.bcast.drm-trigger+xml"), + Mime::ApplicationVndOmaBcastImdXml => write!(f, "application/vnd.oma.bcast.imd+xml"), + Mime::ApplicationVndOmaBcastLtkm => write!(f, "application/vnd.oma.bcast.ltkm"), + Mime::ApplicationVndOmaBcastNotificationXml => write!(f, "application/vnd.oma.bcast.notification+xml"), + Mime::ApplicationVndOmaBcastProvisioningtrigger => write!(f, "application/vnd.oma.bcast.provisioningtrigger"), + Mime::ApplicationVndOmaBcastSgboot => write!(f, "application/vnd.oma.bcast.sgboot"), + Mime::ApplicationVndOmaBcastSgddXml => write!(f, "application/vnd.oma.bcast.sgdd+xml"), + Mime::ApplicationVndOmaBcastSgdu => write!(f, "application/vnd.oma.bcast.sgdu"), + Mime::ApplicationVndOmaBcastSimpleSymbolContainer => write!(f, "application/vnd.oma.bcast.simple-symbol-container"), + Mime::ApplicationVndOmaBcastSmartcardTriggerXml => write!(f, "application/vnd.oma.bcast.smartcard-trigger+xml"), + Mime::ApplicationVndOmaBcastSprovXml => write!(f, "application/vnd.oma.bcast.sprov+xml"), + Mime::ApplicationVndOmaBcastStkm => write!(f, "application/vnd.oma.bcast.stkm"), + Mime::ApplicationVndOmaCabAddressBookXml => write!(f, "application/vnd.oma.cab-address-book+xml"), + Mime::ApplicationVndOmaCabFeatureHandlerXml => write!(f, "application/vnd.oma.cab-feature-handler+xml"), + Mime::ApplicationVndOmaCabPccXml => write!(f, "application/vnd.oma.cab-pcc+xml"), + Mime::ApplicationVndOmaCabSubsInviteXml => write!(f, "application/vnd.oma.cab-subs-invite+xml"), + Mime::ApplicationVndOmaCabUserPrefsXml => write!(f, "application/vnd.oma.cab-user-prefs+xml"), + Mime::ApplicationVndOmaDcd => write!(f, "application/vnd.oma.dcd"), + Mime::ApplicationVndOmaDcdc => write!(f, "application/vnd.oma.dcdc"), + Mime::ApplicationVndOmaDd2Xml => write!(f, "application/vnd.oma.dd2+xml"), + Mime::ApplicationVndOmaDrmRisdXml => write!(f, "application/vnd.oma.drm.risd+xml"), + Mime::ApplicationVndOmaGroupUsageListXml => write!(f, "application/vnd.oma.group-usage-list+xml"), + Mime::ApplicationVndOmaLwm2mCbor => write!(f, "application/vnd.oma.lwm2m+cbor"), + Mime::ApplicationVndOmaLwm2mJson => write!(f, "application/vnd.oma.lwm2m+json"), + Mime::ApplicationVndOmaLwm2mTlv => write!(f, "application/vnd.oma.lwm2m+tlv"), + Mime::ApplicationVndOmaPalXml => write!(f, "application/vnd.oma.pal+xml"), + Mime::ApplicationVndOmaPocDetailedProgressReportXml => write!(f, "application/vnd.oma.poc.detailed-progress-report+xml"), + Mime::ApplicationVndOmaPocFinalReportXml => write!(f, "application/vnd.oma.poc.final-report+xml"), + Mime::ApplicationVndOmaPocGroupsXml => write!(f, "application/vnd.oma.poc.groups+xml"), + Mime::ApplicationVndOmaPocInvocationDescriptorXml => write!(f, "application/vnd.oma.poc.invocation-descriptor+xml"), + Mime::ApplicationVndOmaPocOptimizedProgressReportXml => write!(f, "application/vnd.oma.poc.optimized-progress-report+xml"), + Mime::ApplicationVndOmaPush => write!(f, "application/vnd.oma.push"), + Mime::ApplicationVndOmaScidmMessagesXml => write!(f, "application/vnd.oma.scidm.messages+xml"), + Mime::ApplicationVndOmaXcapDirectoryXml => write!(f, "application/vnd.oma.xcap-directory+xml"), + Mime::ApplicationVndOmadsEmailXml => write!(f, "application/vnd.omads-email+xml"), + Mime::ApplicationVndOmadsFileXml => write!(f, "application/vnd.omads-file+xml"), + Mime::ApplicationVndOmadsFolderXml => write!(f, "application/vnd.omads-folder+xml"), + Mime::ApplicationVndOmalocSuplInit => write!(f, "application/vnd.omaloc-supl-init"), + Mime::ApplicationVndOmaScwsConfig => write!(f, "application/vnd.oma-scws-config"), + Mime::ApplicationVndOmaScwsHttpRequest => write!(f, "application/vnd.oma-scws-http-request"), + Mime::ApplicationVndOmaScwsHttpResponse => write!(f, "application/vnd.oma-scws-http-response"), + Mime::ApplicationVndOnepager => write!(f, "application/vnd.onepager"), + Mime::ApplicationVndOnepagertamp => write!(f, "application/vnd.onepagertamp"), + Mime::ApplicationVndOnepagertamx => write!(f, "application/vnd.onepagertamx"), + Mime::ApplicationVndOnepagertat => write!(f, "application/vnd.onepagertat"), + Mime::ApplicationVndOnepagertatp => write!(f, "application/vnd.onepagertatp"), + Mime::ApplicationVndOnepagertatx => write!(f, "application/vnd.onepagertatx"), + Mime::ApplicationVndOnvifMetadata => write!(f, "application/vnd.onvif.metadata"), + Mime::ApplicationVndOpenbloxGameBinary => write!(f, "application/vnd.openblox.game-binary"), + Mime::ApplicationVndOpenbloxGameXml => write!(f, "application/vnd.openblox.game+xml"), + Mime::ApplicationVndOpeneyeOeb => write!(f, "application/vnd.openeye.oeb"), + Mime::ApplicationVndOpenstreetmapDataXml => write!(f, "application/vnd.openstreetmap.data+xml"), + Mime::ApplicationVndOpentimestampsOts => write!(f, "application/vnd.opentimestamps.ots"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentCustomPropertiesXml => write!(f, "application/vnd.openxmlformats-officedocument.custom-properties+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentCustomxmlpropertiesXml => write!(f, "application/vnd.openxmlformats-officedocument.customXmlProperties+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingXml => write!(f, "application/vnd.openxmlformats-officedocument.drawing+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlChartXml => write!(f, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlChartshapesXml => write!(f, "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramcolorsXml => write!(f, "application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramdataXml => write!(f, "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramlayoutXml => write!(f, "application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentDrawingmlDiagramstyleXml => write!(f, "application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentExtendedPropertiesXml => write!(f, "application/vnd.openxmlformats-officedocument.extended-properties+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlCommentauthorsXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlCommentsXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.comments+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlHandoutmasterXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlNotesmasterXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlNotesslideXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPresentation => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.presentation"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPresentationMainXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlPrespropsXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.presProps+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlide => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.slide"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.slide+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlidelayoutXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlidemasterXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideshow => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.slideshow"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideshowMainXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlSlideupdateinfoXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTablestylesXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTagsXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.tags+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTemplate => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.template"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlTemplateMainXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentPresentationmlViewpropsXml => write!(f, "application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlCalcchainXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlChartsheetXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlCommentsXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlConnectionsXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlDialogsheetXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlExternallinkXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivotcachedefinitionXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivotcacherecordsXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlPivottableXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlQuerytableXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlRevisionheadersXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlRevisionlogXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSharedstringsXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheetMainXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheetmetadataXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlStylesXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTableXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTablesinglecellsXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTemplate => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.template"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlTemplateMainXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlUsernamesXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlVolatiledependenciesXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlWorksheetXml => write!(f, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentThemeXml => write!(f, "application/vnd.openxmlformats-officedocument.theme+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentThemeoverrideXml => write!(f, "application/vnd.openxmlformats-officedocument.themeOverride+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentVmldrawing => write!(f, "application/vnd.openxmlformats-officedocument.vmlDrawing"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlCommentsXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocument => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocumentGlossaryXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlDocumentMainXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlEndnotesXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFonttableXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFooterXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlFootnotesXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlNumberingXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlSettingsXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlStylesXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlTemplate => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.template"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlTemplateMainXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml"), + Mime::ApplicationVndOpenxmlformatsOfficedocumentWordprocessingmlWebsettingsXml => write!(f, "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"), + Mime::ApplicationVndOpenxmlformatsPackageCorePropertiesXml => write!(f, "application/vnd.openxmlformats-package.core-properties+xml"), + Mime::ApplicationVndOpenxmlformatsPackageDigitalSignatureXmlsignatureXml => write!(f, "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml"), + Mime::ApplicationVndOpenxmlformatsPackageRelationshipsXml => write!(f, "application/vnd.openxmlformats-package.relationships+xml"), + Mime::ApplicationVndOracleResourceJson => write!(f, "application/vnd.oracle.resource+json"), + Mime::ApplicationVndOrangeIndata => write!(f, "application/vnd.orange.indata"), + Mime::ApplicationVndOsaNetdeploy => write!(f, "application/vnd.osa.netdeploy"), + Mime::ApplicationVndOsgeoMapguidePackage => write!(f, "application/vnd.osgeo.mapguide.package"), + Mime::ApplicationVndOsgiBundle => write!(f, "application/vnd.osgi.bundle"), + Mime::ApplicationVndOsgiDp => write!(f, "application/vnd.osgi.dp"), + Mime::ApplicationVndOsgiSubsystem => write!(f, "application/vnd.osgi.subsystem"), + Mime::ApplicationVndOtpsCtKipXml => write!(f, "application/vnd.otps.ct-kip+xml"), + Mime::ApplicationVndOxliCountgraph => write!(f, "application/vnd.oxli.countgraph"), + Mime::ApplicationVndPagerdutyJson => write!(f, "application/vnd.pagerduty+json"), + Mime::ApplicationVndPalm => write!(f, "application/vnd.palm"), + Mime::ApplicationVndPanoply => write!(f, "application/vnd.panoply"), + Mime::ApplicationVndPaosXml => write!(f, "application/vnd.paos.xml"), + Mime::ApplicationVndPatentdive => write!(f, "application/vnd.patentdive"), + Mime::ApplicationVndPatientecommsdoc => write!(f, "application/vnd.patientecommsdoc"), + Mime::ApplicationVndPawaafile => write!(f, "application/vnd.pawaafile"), + Mime::ApplicationVndPcos => write!(f, "application/vnd.pcos"), + Mime::ApplicationVndPgFormat => write!(f, "application/vnd.pg.format"), + Mime::ApplicationVndPgOsasli => write!(f, "application/vnd.pg.osasli"), + Mime::ApplicationVndPiaccessApplicationLicence => write!(f, "application/vnd.piaccess.application-licence"), + Mime::ApplicationVndPicsel => write!(f, "application/vnd.picsel"), + Mime::ApplicationVndPmiWidget => write!(f, "application/vnd.pmi.widget"), + Mime::ApplicationVndPocGroupAdvertisementXml => write!(f, "application/vnd.poc.group-advertisement+xml"), + Mime::ApplicationVndPocketlearn => write!(f, "application/vnd.pocketlearn"), + Mime::ApplicationVndPowerbuilder6 => write!(f, "application/vnd.powerbuilder6"), + Mime::ApplicationVndPowerbuilder6S => write!(f, "application/vnd.powerbuilder6-s"), + Mime::ApplicationVndPowerbuilder7 => write!(f, "application/vnd.powerbuilder7"), + Mime::ApplicationVndPowerbuilder75 => write!(f, "application/vnd.powerbuilder75"), + Mime::ApplicationVndPowerbuilder75S => write!(f, "application/vnd.powerbuilder75-s"), + Mime::ApplicationVndPowerbuilder7S => write!(f, "application/vnd.powerbuilder7-s"), + Mime::ApplicationVndPreminet => write!(f, "application/vnd.preminet"), + Mime::ApplicationVndPreviewsystemsBox => write!(f, "application/vnd.previewsystems.box"), + Mime::ApplicationVndProteusMagazine => write!(f, "application/vnd.proteus.magazine"), + Mime::ApplicationVndPsfs => write!(f, "application/vnd.psfs"), + Mime::ApplicationVndPtMundusmundi => write!(f, "application/vnd.pt.mundusmundi"), + Mime::ApplicationVndPublishareDeltaTree => write!(f, "application/vnd.publishare-delta-tree"), + Mime::ApplicationVndPviPtid1 => write!(f, "application/vnd.pvi.ptid1"), + Mime::ApplicationVndPwgMultiplexed => write!(f, "application/vnd.pwg-multiplexed"), + Mime::ApplicationVndPwgXhtmlPrintXml => write!(f, "application/vnd.pwg-xhtml-print+xml"), + Mime::ApplicationVndQualcommBrewAppRes => write!(f, "application/vnd.qualcomm.brew-app-res"), + Mime::ApplicationVndQuarantainenet => write!(f, "application/vnd.quarantainenet"), + Mime::ApplicationVndQuarkQuarkxpress => write!(f, "application/vnd.Quark.QuarkXPress"), + Mime::ApplicationVndQuobjectQuoxdocument => write!(f, "application/vnd.quobject-quoxdocument"), + Mime::ApplicationVndRadisysMomlXml => write!(f, "application/vnd.radisys.moml+xml"), + Mime::ApplicationVndRadisysMsmlAuditConfXml => write!(f, "application/vnd.radisys.msml-audit-conf+xml"), + Mime::ApplicationVndRadisysMsmlAuditConnXml => write!(f, "application/vnd.radisys.msml-audit-conn+xml"), + Mime::ApplicationVndRadisysMsmlAuditDialogXml => write!(f, "application/vnd.radisys.msml-audit-dialog+xml"), + Mime::ApplicationVndRadisysMsmlAuditStreamXml => write!(f, "application/vnd.radisys.msml-audit-stream+xml"), + Mime::ApplicationVndRadisysMsmlAuditXml => write!(f, "application/vnd.radisys.msml-audit+xml"), + Mime::ApplicationVndRadisysMsmlConfXml => write!(f, "application/vnd.radisys.msml-conf+xml"), + Mime::ApplicationVndRadisysMsmlDialogBaseXml => write!(f, "application/vnd.radisys.msml-dialog-base+xml"), + Mime::ApplicationVndRadisysMsmlDialogFaxDetectXml => write!(f, "application/vnd.radisys.msml-dialog-fax-detect+xml"), + Mime::ApplicationVndRadisysMsmlDialogFaxSendrecvXml => write!(f, "application/vnd.radisys.msml-dialog-fax-sendrecv+xml"), + Mime::ApplicationVndRadisysMsmlDialogGroupXml => write!(f, "application/vnd.radisys.msml-dialog-group+xml"), + Mime::ApplicationVndRadisysMsmlDialogSpeechXml => write!(f, "application/vnd.radisys.msml-dialog-speech+xml"), + Mime::ApplicationVndRadisysMsmlDialogTransformXml => write!(f, "application/vnd.radisys.msml-dialog-transform+xml"), + Mime::ApplicationVndRadisysMsmlDialogXml => write!(f, "application/vnd.radisys.msml-dialog+xml"), + Mime::ApplicationVndRadisysMsmlXml => write!(f, "application/vnd.radisys.msml+xml"), + Mime::ApplicationVndRainstorData => write!(f, "application/vnd.rainstor.data"), + Mime::ApplicationVndRapid => write!(f, "application/vnd.rapid"), + Mime::ApplicationVndRar => write!(f, "application/vnd.rar"), + Mime::ApplicationVndRealvncBed => write!(f, "application/vnd.realvnc.bed"), + Mime::ApplicationVndRecordareMusicxml => write!(f, "application/vnd.recordare.musicxml"), + Mime::ApplicationVndRecordareMusicxmlXml => write!(f, "application/vnd.recordare.musicxml+xml"), + Mime::ApplicationVndRenlearnRlprint => write!(f, "application/vnd.RenLearn.rlprint"), + Mime::ApplicationVndResilientLogic => write!(f, "application/vnd.resilient.logic"), + Mime::ApplicationVndRestfulJson => write!(f, "application/vnd.restful+json"), + Mime::ApplicationVndRigCryptonote => write!(f, "application/vnd.rig.cryptonote"), + Mime::ApplicationVndRoute66Link66Xml => write!(f, "application/vnd.route66.link66+xml"), + Mime::ApplicationVndRs274x => write!(f, "application/vnd.rs-274x"), + Mime::ApplicationVndRuckusDownload => write!(f, "application/vnd.ruckus.download"), + Mime::ApplicationVndS3sms => write!(f, "application/vnd.s3sms"), + Mime::ApplicationVndSailingtrackerTrack => write!(f, "application/vnd.sailingtracker.track"), + Mime::ApplicationVndSar => write!(f, "application/vnd.sar"), + Mime::ApplicationVndSbmCid => write!(f, "application/vnd.sbm.cid"), + Mime::ApplicationVndSbmMid2 => write!(f, "application/vnd.sbm.mid2"), + Mime::ApplicationVndScribus => write!(f, "application/vnd.scribus"), + Mime::ApplicationVndSealed3df => write!(f, "application/vnd.sealed.3df"), + Mime::ApplicationVndSealedCsf => write!(f, "application/vnd.sealed.csf"), + Mime::ApplicationVndSealedDoc => write!(f, "application/vnd.sealed.doc"), + Mime::ApplicationVndSealedEml => write!(f, "application/vnd.sealed.eml"), + Mime::ApplicationVndSealedMht => write!(f, "application/vnd.sealed.mht"), + Mime::ApplicationVndSealedNet => write!(f, "application/vnd.sealed.net"), + Mime::ApplicationVndSealedPpt => write!(f, "application/vnd.sealed.ppt"), + Mime::ApplicationVndSealedTiff => write!(f, "application/vnd.sealed.tiff"), + Mime::ApplicationVndSealedXls => write!(f, "application/vnd.sealed.xls"), + Mime::ApplicationVndSealedmediaSoftsealHtml => write!(f, "application/vnd.sealedmedia.softseal.html"), + Mime::ApplicationVndSealedmediaSoftsealPdf => write!(f, "application/vnd.sealedmedia.softseal.pdf"), + Mime::ApplicationVndSeemail => write!(f, "application/vnd.seemail"), + Mime::ApplicationVndSeisJson => write!(f, "application/vnd.seis+json"), + Mime::ApplicationVndSema => write!(f, "application/vnd.sema"), + Mime::ApplicationVndSemd => write!(f, "application/vnd.semd"), + Mime::ApplicationVndSemf => write!(f, "application/vnd.semf"), + Mime::ApplicationVndShadeSaveFile => write!(f, "application/vnd.shade-save-file"), + Mime::ApplicationVndShanaInformedFormdata => write!(f, "application/vnd.shana.informed.formdata"), + Mime::ApplicationVndShanaInformedFormtemplate => write!(f, "application/vnd.shana.informed.formtemplate"), + Mime::ApplicationVndShanaInformedInterchange => write!(f, "application/vnd.shana.informed.interchange"), + Mime::ApplicationVndShanaInformedPackage => write!(f, "application/vnd.shana.informed.package"), + Mime::ApplicationVndShootproofJson => write!(f, "application/vnd.shootproof+json"), + Mime::ApplicationVndShopkickJson => write!(f, "application/vnd.shopkick+json"), + Mime::ApplicationVndShp => write!(f, "application/vnd.shp"), + Mime::ApplicationVndShx => write!(f, "application/vnd.shx"), + Mime::ApplicationVndSigrokSession => write!(f, "application/vnd.sigrok.session"), + Mime::ApplicationVndSimtechMindmapper => write!(f, "application/vnd.SimTech-MindMapper"), + Mime::ApplicationVndSirenJson => write!(f, "application/vnd.siren+json"), + Mime::ApplicationVndSmaf => write!(f, "application/vnd.smaf"), + Mime::ApplicationVndSmartNotebook => write!(f, "application/vnd.smart.notebook"), + Mime::ApplicationVndSmartTeacher => write!(f, "application/vnd.smart.teacher"), + Mime::ApplicationVndSmintioPortalsArchive => write!(f, "application/vnd.smintio.portals.archive"), + Mime::ApplicationVndSnesdevPageTable => write!(f, "application/vnd.snesdev-page-table"), + Mime::ApplicationVndSoftware602FillerFormXml => write!(f, "application/vnd.software602.filler.form+xml"), + Mime::ApplicationVndSoftware602FillerFormXmlZip => write!(f, "application/vnd.software602.filler.form-xml-zip"), + Mime::ApplicationVndSolentSdkmXml => write!(f, "application/vnd.solent.sdkm+xml"), + Mime::ApplicationVndSpotfireDxp => write!(f, "application/vnd.spotfire.dxp"), + Mime::ApplicationVndSpotfireSfs => write!(f, "application/vnd.spotfire.sfs"), + Mime::ApplicationVndSqlite3 => write!(f, "application/vnd.sqlite3"), + Mime::ApplicationVndSssCod => write!(f, "application/vnd.sss-cod"), + Mime::ApplicationVndSssDtf => write!(f, "application/vnd.sss-dtf"), + Mime::ApplicationVndSssNtf => write!(f, "application/vnd.sss-ntf"), + Mime::ApplicationVndStepmaniaPackage => write!(f, "application/vnd.stepmania.package"), + Mime::ApplicationVndStepmaniaStepchart => write!(f, "application/vnd.stepmania.stepchart"), + Mime::ApplicationVndStreetStream => write!(f, "application/vnd.street-stream"), + Mime::ApplicationVndSunWadlXml => write!(f, "application/vnd.sun.wadl+xml"), + Mime::ApplicationVndSusCalendar => write!(f, "application/vnd.sus-calendar"), + Mime::ApplicationVndSvd => write!(f, "application/vnd.svd"), + Mime::ApplicationVndSwiftviewIcs => write!(f, "application/vnd.swiftview-ics"), + Mime::ApplicationVndSybylMol2 => write!(f, "application/vnd.sybyl.mol2"), + Mime::ApplicationVndSycleXml => write!(f, "application/vnd.sycle+xml"), + Mime::ApplicationVndSyftJson => write!(f, "application/vnd.syft+json"), + Mime::ApplicationVndSyncmlDmNotification => write!(f, "application/vnd.syncml.dm.notification"), + Mime::ApplicationVndSyncmlDmddfXml => write!(f, "application/vnd.syncml.dmddf+xml"), + Mime::ApplicationVndSyncmlDmtndsWbxml => write!(f, "application/vnd.syncml.dmtnds+wbxml"), + Mime::ApplicationVndSyncmlDmtndsXml => write!(f, "application/vnd.syncml.dmtnds+xml"), + Mime::ApplicationVndSyncmlDmddfWbxml => write!(f, "application/vnd.syncml.dmddf+wbxml"), + Mime::ApplicationVndSyncmlDmWbxml => write!(f, "application/vnd.syncml.dm+wbxml"), + Mime::ApplicationVndSyncmlDmXml => write!(f, "application/vnd.syncml.dm+xml"), + Mime::ApplicationVndSyncmlDsNotification => write!(f, "application/vnd.syncml.ds.notification"), + Mime::ApplicationVndSyncmlXml => write!(f, "application/vnd.syncml+xml"), + Mime::ApplicationVndTableschemaJson => write!(f, "application/vnd.tableschema+json"), + Mime::ApplicationVndTaoIntentModuleArchive => write!(f, "application/vnd.tao.intent-module-archive"), + Mime::ApplicationVndTcpdumpPcap => write!(f, "application/vnd.tcpdump.pcap"), + Mime::ApplicationVndThinkCellPpttcJson => write!(f, "application/vnd.think-cell.ppttc+json"), + Mime::ApplicationVndTml => write!(f, "application/vnd.tml"), + Mime::ApplicationVndTmdMediaflexApiXml => write!(f, "application/vnd.tmd.mediaflex.api+xml"), + Mime::ApplicationVndTmobileLivetv => write!(f, "application/vnd.tmobile-livetv"), + Mime::ApplicationVndTriOnesource => write!(f, "application/vnd.tri.onesource"), + Mime::ApplicationVndTridTpt => write!(f, "application/vnd.trid.tpt"), + Mime::ApplicationVndTriscapeMxs => write!(f, "application/vnd.triscape.mxs"), + Mime::ApplicationVndTrueapp => write!(f, "application/vnd.trueapp"), + Mime::ApplicationVndTruedoc => write!(f, "application/vnd.truedoc"), + Mime::ApplicationVndUbisoftWebplayer => write!(f, "application/vnd.ubisoft.webplayer"), + Mime::ApplicationVndUfdl => write!(f, "application/vnd.ufdl"), + Mime::ApplicationVndUiqTheme => write!(f, "application/vnd.uiq.theme"), + Mime::ApplicationVndUmajin => write!(f, "application/vnd.umajin"), + Mime::ApplicationVndUnity => write!(f, "application/vnd.unity"), + Mime::ApplicationVndUomlXml => write!(f, "application/vnd.uoml+xml"), + Mime::ApplicationVndUplanetAlert => write!(f, "application/vnd.uplanet.alert"), + Mime::ApplicationVndUplanetAlertWbxml => write!(f, "application/vnd.uplanet.alert-wbxml"), + Mime::ApplicationVndUplanetBearerChoice => write!(f, "application/vnd.uplanet.bearer-choice"), + Mime::ApplicationVndUplanetBearerChoiceWbxml => write!(f, "application/vnd.uplanet.bearer-choice-wbxml"), + Mime::ApplicationVndUplanetCacheop => write!(f, "application/vnd.uplanet.cacheop"), + Mime::ApplicationVndUplanetCacheopWbxml => write!(f, "application/vnd.uplanet.cacheop-wbxml"), + Mime::ApplicationVndUplanetChannel => write!(f, "application/vnd.uplanet.channel"), + Mime::ApplicationVndUplanetChannelWbxml => write!(f, "application/vnd.uplanet.channel-wbxml"), + Mime::ApplicationVndUplanetList => write!(f, "application/vnd.uplanet.list"), + Mime::ApplicationVndUplanetListcmd => write!(f, "application/vnd.uplanet.listcmd"), + Mime::ApplicationVndUplanetListcmdWbxml => write!(f, "application/vnd.uplanet.listcmd-wbxml"), + Mime::ApplicationVndUplanetListWbxml => write!(f, "application/vnd.uplanet.list-wbxml"), + Mime::ApplicationVndUriMap => write!(f, "application/vnd.uri-map"), + Mime::ApplicationVndUplanetSignal => write!(f, "application/vnd.uplanet.signal"), + Mime::ApplicationVndValveSourceMaterial => write!(f, "application/vnd.valve.source.material"), + Mime::ApplicationVndVcx => write!(f, "application/vnd.vcx"), + Mime::ApplicationVndVdStudy => write!(f, "application/vnd.vd-study"), + Mime::ApplicationVndVectorworks => write!(f, "application/vnd.vectorworks"), + Mime::ApplicationVndVelJson => write!(f, "application/vnd.vel+json"), + Mime::ApplicationVndVerimatrixVcas => write!(f, "application/vnd.verimatrix.vcas"), + Mime::ApplicationVndVeritoneAionJson => write!(f, "application/vnd.veritone.aion+json"), + Mime::ApplicationVndVeryantThin => write!(f, "application/vnd.veryant.thin"), + Mime::ApplicationVndVesEncrypted => write!(f, "application/vnd.ves.encrypted"), + Mime::ApplicationVndVidsoftVidconference => write!(f, "application/vnd.vidsoft.vidconference"), + Mime::ApplicationVndVisio => write!(f, "application/vnd.visio"), + Mime::ApplicationVndVisionary => write!(f, "application/vnd.visionary"), + Mime::ApplicationVndVividenceScriptfile => write!(f, "application/vnd.vividence.scriptfile"), + Mime::ApplicationVndVsf => write!(f, "application/vnd.vsf"), + Mime::ApplicationVndWapSic => write!(f, "application/vnd.wap.sic"), + Mime::ApplicationVndWapSlc => write!(f, "application/vnd.wap.slc"), + Mime::ApplicationVndWapWbxml => write!(f, "application/vnd.wap.wbxml"), + Mime::ApplicationVndWapWmlc => write!(f, "application/vnd.wap.wmlc"), + Mime::ApplicationVndWapWmlscriptc => write!(f, "application/vnd.wap.wmlscriptc"), + Mime::ApplicationVndWasmflowWafl => write!(f, "application/vnd.wasmflow.wafl"), + Mime::ApplicationVndWebturbo => write!(f, "application/vnd.webturbo"), + Mime::ApplicationVndWfaDpp => write!(f, "application/vnd.wfa.dpp"), + Mime::ApplicationVndWfaP2p => write!(f, "application/vnd.wfa.p2p"), + Mime::ApplicationVndWfaWsc => write!(f, "application/vnd.wfa.wsc"), + Mime::ApplicationVndWindowsDevicepairing => write!(f, "application/vnd.windows.devicepairing"), + Mime::ApplicationVndWmc => write!(f, "application/vnd.wmc"), + Mime::ApplicationVndWmfBootstrap => write!(f, "application/vnd.wmf.bootstrap"), + Mime::ApplicationVndWolframMathematica => write!(f, "application/vnd.wolfram.mathematica"), + Mime::ApplicationVndWolframMathematicaPackage => write!(f, "application/vnd.wolfram.mathematica.package"), + Mime::ApplicationVndWolframPlayer => write!(f, "application/vnd.wolfram.player"), + Mime::ApplicationVndWordlift => write!(f, "application/vnd.wordlift"), + Mime::ApplicationVndWordperfect => write!(f, "application/vnd.wordperfect"), + Mime::ApplicationVndWqd => write!(f, "application/vnd.wqd"), + Mime::ApplicationVndWrqHp3000Labelled => write!(f, "application/vnd.wrq-hp3000-labelled"), + Mime::ApplicationVndWtStf => write!(f, "application/vnd.wt.stf"), + Mime::ApplicationVndWvCspXml => write!(f, "application/vnd.wv.csp+xml"), + Mime::ApplicationVndWvCspWbxml => write!(f, "application/vnd.wv.csp+wbxml"), + Mime::ApplicationVndWvSspXml => write!(f, "application/vnd.wv.ssp+xml"), + Mime::ApplicationVndXacmlJson => write!(f, "application/vnd.xacml+json"), + Mime::ApplicationVndXara => write!(f, "application/vnd.xara"), + Mime::ApplicationVndXfdl => write!(f, "application/vnd.xfdl"), + Mime::ApplicationVndXfdlWebform => write!(f, "application/vnd.xfdl.webform"), + Mime::ApplicationVndXmiXml => write!(f, "application/vnd.xmi+xml"), + Mime::ApplicationVndXmpieCpkg => write!(f, "application/vnd.xmpie.cpkg"), + Mime::ApplicationVndXmpieDpkg => write!(f, "application/vnd.xmpie.dpkg"), + Mime::ApplicationVndXmpiePlan => write!(f, "application/vnd.xmpie.plan"), + Mime::ApplicationVndXmpiePpkg => write!(f, "application/vnd.xmpie.ppkg"), + Mime::ApplicationVndXmpieXlim => write!(f, "application/vnd.xmpie.xlim"), + Mime::ApplicationVndYamahaHvDic => write!(f, "application/vnd.yamaha.hv-dic"), + Mime::ApplicationVndYamahaHvScript => write!(f, "application/vnd.yamaha.hv-script"), + Mime::ApplicationVndYamahaHvVoice => write!(f, "application/vnd.yamaha.hv-voice"), + Mime::ApplicationVndYamahaOpenscoreformatOsfpvgXml => write!(f, "application/vnd.yamaha.openscoreformat.osfpvg+xml"), + Mime::ApplicationVndYamahaOpenscoreformat => write!(f, "application/vnd.yamaha.openscoreformat"), + Mime::ApplicationVndYamahaRemoteSetup => write!(f, "application/vnd.yamaha.remote-setup"), + Mime::ApplicationVndYamahaSmafAudio => write!(f, "application/vnd.yamaha.smaf-audio"), + Mime::ApplicationVndYamahaSmafPhrase => write!(f, "application/vnd.yamaha.smaf-phrase"), + Mime::ApplicationVndYamahaThroughNgn => write!(f, "application/vnd.yamaha.through-ngn"), + Mime::ApplicationVndYamahaTunnelUdpencap => write!(f, "application/vnd.yamaha.tunnel-udpencap"), + Mime::ApplicationVndYaoweme => write!(f, "application/vnd.yaoweme"), + Mime::ApplicationVndYellowriverCustomMenu => write!(f, "application/vnd.yellowriver-custom-menu"), + Mime::ApplicationVndZul => write!(f, "application/vnd.zul"), + Mime::ApplicationVndZzazzDeckXml => write!(f, "application/vnd.zzazz.deck+xml"), + Mime::ApplicationVoicexmlXml => write!(f, "application/voicexml+xml"), + Mime::ApplicationVoucherCmsJson => write!(f, "application/voucher-cms+json"), + Mime::ApplicationVqRtcpxr => write!(f, "application/vq-rtcpxr"), + Mime::ApplicationWasm => write!(f, "application/wasm"), + Mime::ApplicationWatcherinfoXml => write!(f, "application/watcherinfo+xml"), + Mime::ApplicationWebpushOptionsJson => write!(f, "application/webpush-options+json"), + Mime::ApplicationWhoisppQuery => write!(f, "application/whoispp-query"), + Mime::ApplicationWhoisppResponse => write!(f, "application/whoispp-response"), + Mime::ApplicationWidget => write!(f, "application/widget"), + Mime::ApplicationWita => write!(f, "application/wita"), + Mime::ApplicationWordperfect51 => write!(f, "application/wordperfect5.1"), + Mime::ApplicationWsdlXml => write!(f, "application/wsdl+xml"), + Mime::ApplicationWspolicyXml => write!(f, "application/wspolicy+xml"), + Mime::ApplicationXPkiMessage => write!(f, "application/x-pki-message"), + Mime::ApplicationXWwwFormUrlencoded => write!(f, "application/x-www-form-urlencoded"), + Mime::ApplicationXX509CaCert => write!(f, "application/x-x509-ca-cert"), + Mime::ApplicationXX509CaRaCert => write!(f, "application/x-x509-ca-ra-cert"), + Mime::ApplicationXX509NextCaCert => write!(f, "application/x-x509-next-ca-cert"), + Mime::ApplicationX400Bp => write!(f, "application/x400-bp"), + Mime::ApplicationXacmlXml => write!(f, "application/xacml+xml"), + Mime::ApplicationXcapAttXml => write!(f, "application/xcap-att+xml"), + Mime::ApplicationXcapCapsXml => write!(f, "application/xcap-caps+xml"), + Mime::ApplicationXcapDiffXml => write!(f, "application/xcap-diff+xml"), + Mime::ApplicationXcapElXml => write!(f, "application/xcap-el+xml"), + Mime::ApplicationXcapErrorXml => write!(f, "application/xcap-error+xml"), + Mime::ApplicationXcapNsXml => write!(f, "application/xcap-ns+xml"), + Mime::ApplicationXconConferenceInfoDiffXml => write!(f, "application/xcon-conference-info-diff+xml"), + Mime::ApplicationXconConferenceInfoXml => write!(f, "application/xcon-conference-info+xml"), + Mime::ApplicationXencXml => write!(f, "application/xenc+xml"), + Mime::ApplicationXfdf => write!(f, "application/xfdf"), + Mime::ApplicationXhtmlXml => write!(f, "application/xhtml+xml"), + Mime::ApplicationXliffXml => write!(f, "application/xliff+xml"), + Mime::ApplicationXml => write!(f, "application/xml"), + Mime::ApplicationXmlDtd => write!(f, "application/xml-dtd"), + Mime::ApplicationXmlExternalParsedEntity => write!(f, "application/xml-external-parsed-entity"), + Mime::ApplicationXmlPatchXml => write!(f, "application/xml-patch+xml"), + Mime::ApplicationXmppXml => write!(f, "application/xmpp+xml"), + Mime::ApplicationXopXml => write!(f, "application/xop+xml"), + Mime::ApplicationXsltXml => write!(f, "application/xslt+xml"), + Mime::ApplicationXvXml => write!(f, "application/xv+xml"), + Mime::ApplicationYang => write!(f, "application/yang"), + Mime::ApplicationYangDataCbor => write!(f, "application/yang-data+cbor"), + Mime::ApplicationYangDataJson => write!(f, "application/yang-data+json"), + Mime::ApplicationYangDataXml => write!(f, "application/yang-data+xml"), + Mime::ApplicationYangPatchJson => write!(f, "application/yang-patch+json"), + Mime::ApplicationYangPatchXml => write!(f, "application/yang-patch+xml"), + Mime::ApplicationYinXml => write!(f, "application/yin+xml"), + Mime::ApplicationZip => write!(f, "application/zip"), + Mime::ApplicationZlib => write!(f, "application/zlib"), + Mime::ApplicationZstd => write!(f, "application/zstd"), + Mime::Audio1dInterleavedParityfec => write!(f, "audio/1d-interleaved-parityfec"), + Mime::Audio32kadpcm => write!(f, "audio/32kadpcm"), + Mime::Audio3gpp => write!(f, "audio/3gpp"), + Mime::Audio3gpp2 => write!(f, "audio/3gpp2"), + Mime::AudioAac => write!(f, "audio/aac"), + Mime::AudioAc3 => write!(f, "audio/ac3"), + Mime::AudioAmr => write!(f, "audio/AMR"), + Mime::AudioAmrWb => write!(f, "audio/AMR-WB"), + Mime::AudioAmrWbPlus => write!(f, "audio/amr-wb+"), + Mime::AudioAptx => write!(f, "audio/aptx"), + Mime::AudioAsc => write!(f, "audio/asc"), + Mime::AudioAtracAdvancedLossless => write!(f, "audio/ATRAC-ADVANCED-LOSSLESS"), + Mime::AudioAtracX => write!(f, "audio/ATRAC-X"), + Mime::AudioAtrac3 => write!(f, "audio/ATRAC3"), + Mime::AudioBasic => write!(f, "audio/basic"), + Mime::AudioBv16 => write!(f, "audio/BV16"), + Mime::AudioBv32 => write!(f, "audio/BV32"), + Mime::AudioClearmode => write!(f, "audio/clearmode"), + Mime::AudioCn => write!(f, "audio/CN"), + Mime::AudioDat12 => write!(f, "audio/DAT12"), + Mime::AudioDls => write!(f, "audio/dls"), + Mime::AudioDsrEs201108 => write!(f, "audio/dsr-es201108"), + Mime::AudioDsrEs202050 => write!(f, "audio/dsr-es202050"), + Mime::AudioDsrEs202211 => write!(f, "audio/dsr-es202211"), + Mime::AudioDsrEs202212 => write!(f, "audio/dsr-es202212"), + Mime::AudioDv => write!(f, "audio/DV"), + Mime::AudioDvi4 => write!(f, "audio/DVI4"), + Mime::AudioEac3 => write!(f, "audio/eac3"), + Mime::AudioEncaprtp => write!(f, "audio/encaprtp"), + Mime::AudioEvrc => write!(f, "audio/EVRC"), + Mime::AudioEvrcQcp => write!(f, "audio/EVRC-QCP"), + Mime::AudioEvrc0 => write!(f, "audio/EVRC0"), + Mime::AudioEvrc1 => write!(f, "audio/EVRC1"), + Mime::AudioEvrcb => write!(f, "audio/EVRCB"), + Mime::AudioEvrcb0 => write!(f, "audio/EVRCB0"), + Mime::AudioEvrcb1 => write!(f, "audio/EVRCB1"), + Mime::AudioEvrcnw => write!(f, "audio/EVRCNW"), + Mime::AudioEvrcnw0 => write!(f, "audio/EVRCNW0"), + Mime::AudioEvrcnw1 => write!(f, "audio/EVRCNW1"), + Mime::AudioEvrcwb => write!(f, "audio/EVRCWB"), + Mime::AudioEvrcwb0 => write!(f, "audio/EVRCWB0"), + Mime::AudioEvrcwb1 => write!(f, "audio/EVRCWB1"), + Mime::AudioEvs => write!(f, "audio/EVS"), + Mime::AudioExample => write!(f, "audio/example"), + Mime::AudioFlexfec => write!(f, "audio/flexfec"), + Mime::AudioFwdred => write!(f, "audio/fwdred"), + Mime::AudioG7110 => write!(f, "audio/G711-0"), + Mime::AudioG719 => write!(f, "audio/G719"), + Mime::AudioG7221 => write!(f, "audio/G7221"), + Mime::AudioG722 => write!(f, "audio/G722"), + Mime::AudioG723 => write!(f, "audio/G723"), + Mime::AudioG72616 => write!(f, "audio/G726-16"), + Mime::AudioG72624 => write!(f, "audio/G726-24"), + Mime::AudioG72632 => write!(f, "audio/G726-32"), + Mime::AudioG72640 => write!(f, "audio/G726-40"), + Mime::AudioG728 => write!(f, "audio/G728"), + Mime::AudioG729 => write!(f, "audio/G729"), + Mime::AudioG7291 => write!(f, "audio/G7291"), + Mime::AudioG729d => write!(f, "audio/G729D"), + Mime::AudioG729e => write!(f, "audio/G729E"), + Mime::AudioGsm => write!(f, "audio/GSM"), + Mime::AudioGsmEfr => write!(f, "audio/GSM-EFR"), + Mime::AudioGsmHr08 => write!(f, "audio/GSM-HR-08"), + Mime::AudioIlbc => write!(f, "audio/iLBC"), + Mime::AudioIpMrV25 => write!(f, "audio/ip-mr_v2.5"), + Mime::AudioL8 => write!(f, "audio/L8"), + Mime::AudioL16 => write!(f, "audio/L16"), + Mime::AudioL20 => write!(f, "audio/L20"), + Mime::AudioL24 => write!(f, "audio/L24"), + Mime::AudioLpc => write!(f, "audio/LPC"), + Mime::AudioMelp => write!(f, "audio/MELP"), + Mime::AudioMelp600 => write!(f, "audio/MELP600"), + Mime::AudioMelp1200 => write!(f, "audio/MELP1200"), + Mime::AudioMelp2400 => write!(f, "audio/MELP2400"), + Mime::AudioMhas => write!(f, "audio/mhas"), + Mime::AudioMobileXmf => write!(f, "audio/mobile-xmf"), + Mime::AudioMpa => write!(f, "audio/MPA"), + Mime::AudioMp4 => write!(f, "audio/mp4"), + Mime::AudioMp4aLatm => write!(f, "audio/MP4A-LATM"), + Mime::AudioMpaRobust => write!(f, "audio/mpa-robust"), + Mime::AudioMpeg => write!(f, "audio/mpeg"), + Mime::AudioMpeg4Generic => write!(f, "audio/mpeg4-generic"), + Mime::AudioOgg => write!(f, "audio/ogg"), + Mime::AudioOpus => write!(f, "audio/opus"), + Mime::AudioParityfec => write!(f, "audio/parityfec"), + Mime::AudioPcma => write!(f, "audio/PCMA"), + Mime::AudioPcmaWb => write!(f, "audio/PCMA-WB"), + Mime::AudioPcmu => write!(f, "audio/PCMU"), + Mime::AudioPcmuWb => write!(f, "audio/PCMU-WB"), + Mime::AudioPrsSid => write!(f, "audio/prs.sid"), + Mime::AudioQcelp => write!(f, "audio/QCELP"), + Mime::AudioRaptorfec => write!(f, "audio/raptorfec"), + Mime::AudioRed => write!(f, "audio/RED"), + Mime::AudioRtpEncAescm128 => write!(f, "audio/rtp-enc-aescm128"), + Mime::AudioRtploopback => write!(f, "audio/rtploopback"), + Mime::AudioRtpMidi => write!(f, "audio/rtp-midi"), + Mime::AudioRtx => write!(f, "audio/rtx"), + Mime::AudioScip => write!(f, "audio/scip"), + Mime::AudioSmv => write!(f, "audio/SMV"), + Mime::AudioSmv0 => write!(f, "audio/SMV0"), + Mime::AudioSmvQcp => write!(f, "audio/SMV-QCP"), + Mime::AudioSofa => write!(f, "audio/sofa"), + Mime::AudioSpMidi => write!(f, "audio/sp-midi"), + Mime::AudioSpeex => write!(f, "audio/speex"), + Mime::AudioT140c => write!(f, "audio/t140c"), + Mime::AudioT38 => write!(f, "audio/t38"), + Mime::AudioTelephoneEvent => write!(f, "audio/telephone-event"), + Mime::AudioTetraAcelp => write!(f, "audio/TETRA_ACELP"), + Mime::AudioTetraAcelpBb => write!(f, "audio/TETRA_ACELP_BB"), + Mime::AudioTone => write!(f, "audio/tone"), + Mime::AudioTsvcis => write!(f, "audio/TSVCIS"), + Mime::AudioUemclip => write!(f, "audio/UEMCLIP"), + Mime::AudioUlpfec => write!(f, "audio/ulpfec"), + Mime::AudioUsac => write!(f, "audio/usac"), + Mime::AudioVdvi => write!(f, "audio/VDVI"), + Mime::AudioVmrWb => write!(f, "audio/VMR-WB"), + Mime::AudioVnd3gppIufp => write!(f, "audio/vnd.3gpp.iufp"), + Mime::AudioVnd4sb => write!(f, "audio/vnd.4SB"), + Mime::AudioVndAudiokoz => write!(f, "audio/vnd.audiokoz"), + Mime::AudioVndCelp => write!(f, "audio/vnd.CELP"), + Mime::AudioVndCiscoNse => write!(f, "audio/vnd.cisco.nse"), + Mime::AudioVndCmlesRadioEvents => write!(f, "audio/vnd.cmles.radio-events"), + Mime::AudioVndCnsAnp1 => write!(f, "audio/vnd.cns.anp1"), + Mime::AudioVndCnsInf1 => write!(f, "audio/vnd.cns.inf1"), + Mime::AudioVndDeceAudio => write!(f, "audio/vnd.dece.audio"), + Mime::AudioVndDigitalWinds => write!(f, "audio/vnd.digital-winds"), + Mime::AudioVndDlnaAdts => write!(f, "audio/vnd.dlna.adts"), + Mime::AudioVndDolbyHeaac1 => write!(f, "audio/vnd.dolby.heaac.1"), + Mime::AudioVndDolbyHeaac2 => write!(f, "audio/vnd.dolby.heaac.2"), + Mime::AudioVndDolbyMlp => write!(f, "audio/vnd.dolby.mlp"), + Mime::AudioVndDolbyMps => write!(f, "audio/vnd.dolby.mps"), + Mime::AudioVndDolbyPl2 => write!(f, "audio/vnd.dolby.pl2"), + Mime::AudioVndDolbyPl2x => write!(f, "audio/vnd.dolby.pl2x"), + Mime::AudioVndDolbyPl2z => write!(f, "audio/vnd.dolby.pl2z"), + Mime::AudioVndDolbyPulse1 => write!(f, "audio/vnd.dolby.pulse.1"), + Mime::AudioVndDra => write!(f, "audio/vnd.dra"), + Mime::AudioVndDts => write!(f, "audio/vnd.dts"), + Mime::AudioVndDtsHd => write!(f, "audio/vnd.dts.hd"), + Mime::AudioVndDtsUhd => write!(f, "audio/vnd.dts.uhd"), + Mime::AudioVndDvbFile => write!(f, "audio/vnd.dvb.file"), + Mime::AudioVndEveradPlj => write!(f, "audio/vnd.everad.plj"), + Mime::AudioVndHnsAudio => write!(f, "audio/vnd.hns.audio"), + Mime::AudioVndLucentVoice => write!(f, "audio/vnd.lucent.voice"), + Mime::AudioVndMsPlayreadyMediaPya => write!(f, "audio/vnd.ms-playready.media.pya"), + Mime::AudioVndNokiaMobileXmf => write!(f, "audio/vnd.nokia.mobile-xmf"), + Mime::AudioVndNortelVbk => write!(f, "audio/vnd.nortel.vbk"), + Mime::AudioVndNueraEcelp4800 => write!(f, "audio/vnd.nuera.ecelp4800"), + Mime::AudioVndNueraEcelp7470 => write!(f, "audio/vnd.nuera.ecelp7470"), + Mime::AudioVndNueraEcelp9600 => write!(f, "audio/vnd.nuera.ecelp9600"), + Mime::AudioVndOctelSbc => write!(f, "audio/vnd.octel.sbc"), + Mime::AudioVndPresonusMultitrack => write!(f, "audio/vnd.presonus.multitrack"), + Mime::AudioVndRhetorex32kadpcm => write!(f, "audio/vnd.rhetorex.32kadpcm"), + Mime::AudioVndRip => write!(f, "audio/vnd.rip"), + Mime::AudioVndSealedmediaSoftsealMpeg => write!(f, "audio/vnd.sealedmedia.softseal.mpeg"), + Mime::AudioVndVmxCvsd => write!(f, "audio/vnd.vmx.cvsd"), + Mime::AudioVorbis => write!(f, "audio/vorbis"), + Mime::AudioVorbisConfig => write!(f, "audio/vorbis-config"), + Mime::FontCollection => write!(f, "font/collection"), + Mime::FontOtf => write!(f, "font/otf"), + Mime::FontSfnt => write!(f, "font/sfnt"), + Mime::FontTtf => write!(f, "font/ttf"), + Mime::FontWoff => write!(f, "font/woff"), + Mime::FontWoff2 => write!(f, "font/woff2"), + Mime::ImageAces => write!(f, "image/aces"), + Mime::ImageApng => write!(f, "image/apng"), + Mime::ImageAvci => write!(f, "image/avci"), + Mime::ImageAvcs => write!(f, "image/avcs"), + Mime::ImageAvif => write!(f, "image/avif"), + Mime::ImageBmp => write!(f, "image/bmp"), + Mime::ImageCgm => write!(f, "image/cgm"), + Mime::ImageDicomRle => write!(f, "image/dicom-rle"), + Mime::ImageDpx => write!(f, "image/dpx"), + Mime::ImageEmf => write!(f, "image/emf"), + Mime::ImageExample => write!(f, "image/example"), + Mime::ImageFits => write!(f, "image/fits"), + Mime::ImageG3fax => write!(f, "image/g3fax"), + Mime::ImageHeic => write!(f, "image/heic"), + Mime::ImageHeicSequence => write!(f, "image/heic-sequence"), + Mime::ImageHeif => write!(f, "image/heif"), + Mime::ImageHeifSequence => write!(f, "image/heif-sequence"), + Mime::ImageHej2k => write!(f, "image/hej2k"), + Mime::ImageHsj2 => write!(f, "image/hsj2"), + Mime::ImageJls => write!(f, "image/jls"), + Mime::ImageJp2 => write!(f, "image/jp2"), + Mime::ImageJpeg => write!(f, "image/jpeg"), + Mime::ImageJph => write!(f, "image/jph"), + Mime::ImageJphc => write!(f, "image/jphc"), + Mime::ImageJpm => write!(f, "image/jpm"), + Mime::ImageJpx => write!(f, "image/jpx"), + Mime::ImageJxr => write!(f, "image/jxr"), + Mime::ImageJxra => write!(f, "image/jxrA"), + Mime::ImageJxrs => write!(f, "image/jxrS"), + Mime::ImageJxs => write!(f, "image/jxs"), + Mime::ImageJxsc => write!(f, "image/jxsc"), + Mime::ImageJxsi => write!(f, "image/jxsi"), + Mime::ImageJxss => write!(f, "image/jxss"), + Mime::ImageKtx => write!(f, "image/ktx"), + Mime::ImageKtx2 => write!(f, "image/ktx2"), + Mime::ImageNaplps => write!(f, "image/naplps"), + Mime::ImagePng => write!(f, "image/png"), + Mime::ImagePrsBtif => write!(f, "image/prs.btif"), + Mime::ImagePrsPti => write!(f, "image/prs.pti"), + Mime::ImagePwgRaster => write!(f, "image/pwg-raster"), + Mime::ImageSvgXml => write!(f, "image/svg+xml"), + Mime::ImageT38 => write!(f, "image/t38"), + Mime::ImageTiff => write!(f, "image/tiff"), + Mime::ImageTiffFx => write!(f, "image/tiff-fx"), + Mime::ImageVndAdobePhotoshop => write!(f, "image/vnd.adobe.photoshop"), + Mime::ImageVndAirzipAcceleratorAzv => write!(f, "image/vnd.airzip.accelerator.azv"), + Mime::ImageVndCnsInf2 => write!(f, "image/vnd.cns.inf2"), + Mime::ImageVndDeceGraphic => write!(f, "image/vnd.dece.graphic"), + Mime::ImageVndDjvu => write!(f, "image/vnd.djvu"), + Mime::ImageVndDwg => write!(f, "image/vnd.dwg"), + Mime::ImageVndDxf => write!(f, "image/vnd.dxf"), + Mime::ImageVndDvbSubtitle => write!(f, "image/vnd.dvb.subtitle"), + Mime::ImageVndFastbidsheet => write!(f, "image/vnd.fastbidsheet"), + Mime::ImageVndFpx => write!(f, "image/vnd.fpx"), + Mime::ImageVndFst => write!(f, "image/vnd.fst"), + Mime::ImageVndFujixeroxEdmicsMmr => write!(f, "image/vnd.fujixerox.edmics-mmr"), + Mime::ImageVndFujixeroxEdmicsRlc => write!(f, "image/vnd.fujixerox.edmics-rlc"), + Mime::ImageVndGlobalgraphicsPgb => write!(f, "image/vnd.globalgraphics.pgb"), + Mime::ImageVndMicrosoftIcon => write!(f, "image/vnd.microsoft.icon"), + Mime::ImageVndMix => write!(f, "image/vnd.mix"), + Mime::ImageVndMsModi => write!(f, "image/vnd.ms-modi"), + Mime::ImageVndMozillaApng => write!(f, "image/vnd.mozilla.apng"), + Mime::ImageVndNetFpx => write!(f, "image/vnd.net-fpx"), + Mime::ImageVndPcoB16 => write!(f, "image/vnd.pco.b16"), + Mime::ImageVndRadiance => write!(f, "image/vnd.radiance"), + Mime::ImageVndSealedPng => write!(f, "image/vnd.sealed.png"), + Mime::ImageVndSealedmediaSoftsealGif => write!(f, "image/vnd.sealedmedia.softseal.gif"), + Mime::ImageVndSealedmediaSoftsealJpg => write!(f, "image/vnd.sealedmedia.softseal.jpg"), + Mime::ImageVndSvf => write!(f, "image/vnd.svf"), + Mime::ImageVndTencentTap => write!(f, "image/vnd.tencent.tap"), + Mime::ImageVndValveSourceTexture => write!(f, "image/vnd.valve.source.texture"), + Mime::ImageVndWapWbmp => write!(f, "image/vnd.wap.wbmp"), + Mime::ImageVndXiff => write!(f, "image/vnd.xiff"), + Mime::ImageVndZbrushPcx => write!(f, "image/vnd.zbrush.pcx"), + Mime::ImageWebp => write!(f, "image/webp"), + Mime::ImageWmf => write!(f, "image/wmf"), + Mime::MessageBhttp => write!(f, "message/bhttp"), + Mime::MessageCpim => write!(f, "message/CPIM"), + Mime::MessageDeliveryStatus => write!(f, "message/delivery-status"), + Mime::MessageDispositionNotification => write!(f, "message/disposition-notification"), + Mime::MessageExample => write!(f, "message/example"), + Mime::MessageFeedbackReport => write!(f, "message/feedback-report"), + Mime::MessageGlobal => write!(f, "message/global"), + Mime::MessageGlobalDeliveryStatus => write!(f, "message/global-delivery-status"), + Mime::MessageGlobalDispositionNotification => write!(f, "message/global-disposition-notification"), + Mime::MessageGlobalHeaders => write!(f, "message/global-headers"), + Mime::MessageHttp => write!(f, "message/http"), + Mime::MessageImdnXml => write!(f, "message/imdn+xml"), + Mime::MessageMls => write!(f, "message/mls"), + Mime::MessageOhttpReq => write!(f, "message/ohttp-req"), + Mime::MessageOhttpRes => write!(f, "message/ohttp-res"), + Mime::MessageSip => write!(f, "message/sip"), + Mime::MessageSipfrag => write!(f, "message/sipfrag"), + Mime::MessageTrackingStatus => write!(f, "message/tracking-status"), + Mime::MessageVndWfaWsc => write!(f, "message/vnd.wfa.wsc"), + Mime::Model3mf => write!(f, "model/3mf"), + Mime::ModelE57 => write!(f, "model/e57"), + Mime::ModelExample => write!(f, "model/example"), + Mime::ModelGltfBinary => write!(f, "model/gltf-binary"), + Mime::ModelGltfJson => write!(f, "model/gltf+json"), + Mime::ModelJt => write!(f, "model/JT"), + Mime::ModelIges => write!(f, "model/iges"), + Mime::ModelMtl => write!(f, "model/mtl"), + Mime::ModelObj => write!(f, "model/obj"), + Mime::ModelPrc => write!(f, "model/prc"), + Mime::ModelStep => write!(f, "model/step"), + Mime::ModelStepXml => write!(f, "model/step+xml"), + Mime::ModelStepZip => write!(f, "model/step+zip"), + Mime::ModelStepXmlZip => write!(f, "model/step-xml+zip"), + Mime::ModelStl => write!(f, "model/stl"), + Mime::ModelU3d => write!(f, "model/u3d"), + Mime::ModelVndBary => write!(f, "model/vnd.bary"), + Mime::ModelVndCld => write!(f, "model/vnd.cld"), + Mime::ModelVndColladaXml => write!(f, "model/vnd.collada+xml"), + Mime::ModelVndDwf => write!(f, "model/vnd.dwf"), + Mime::ModelVndFlatland3dml => write!(f, "model/vnd.flatland.3dml"), + Mime::ModelVndGdl => write!(f, "model/vnd.gdl"), + Mime::ModelVndGsGdl => write!(f, "model/vnd.gs-gdl"), + Mime::ModelVndGtw => write!(f, "model/vnd.gtw"), + Mime::ModelVndMomlXml => write!(f, "model/vnd.moml+xml"), + Mime::ModelVndMts => write!(f, "model/vnd.mts"), + Mime::ModelVndOpengex => write!(f, "model/vnd.opengex"), + Mime::ModelVndParasolidTransmitBinary => write!(f, "model/vnd.parasolid.transmit.binary"), + Mime::ModelVndParasolidTransmitText => write!(f, "model/vnd.parasolid.transmit.text"), + Mime::ModelVndPythaPyox => write!(f, "model/vnd.pytha.pyox"), + Mime::ModelVndRosetteAnnotatedDataModel => write!(f, "model/vnd.rosette.annotated-data-model"), + Mime::ModelVndSapVds => write!(f, "model/vnd.sap.vds"), + Mime::ModelVndUsda => write!(f, "model/vnd.usda"), + Mime::ModelVndUsdzZip => write!(f, "model/vnd.usdz+zip"), + Mime::ModelVndValveSourceCompiledMap => write!(f, "model/vnd.valve.source.compiled-map"), + Mime::ModelVndVtu => write!(f, "model/vnd.vtu"), + Mime::ModelX3dVrml => write!(f, "model/x3d-vrml"), + Mime::ModelX3dFastinfoset => write!(f, "model/x3d+fastinfoset"), + Mime::ModelX3dXml => write!(f, "model/x3d+xml"), + Mime::MultipartAppledouble => write!(f, "multipart/appledouble"), + Mime::MultipartByteranges => write!(f, "multipart/byteranges"), + Mime::MultipartEncrypted => write!(f, "multipart/encrypted"), + Mime::MultipartExample => write!(f, "multipart/example"), + Mime::MultipartFormData => write!(f, "multipart/form-data"), + Mime::MultipartHeaderSet => write!(f, "multipart/header-set"), + Mime::MultipartMultilingual => write!(f, "multipart/multilingual"), + Mime::MultipartRelated => write!(f, "multipart/related"), + Mime::MultipartReport => write!(f, "multipart/report"), + Mime::MultipartSigned => write!(f, "multipart/signed"), + Mime::MultipartVndBintMedPlus => write!(f, "multipart/vnd.bint.med-plus"), + Mime::MultipartVoiceMessage => write!(f, "multipart/voice-message"), + Mime::MultipartXMixedReplace => write!(f, "multipart/x-mixed-replace"), + Mime::Text1dInterleavedParityfec => write!(f, "text/1d-interleaved-parityfec"), + Mime::TextCacheManifest => write!(f, "text/cache-manifest"), + Mime::TextCalendar => write!(f, "text/calendar"), + Mime::TextCql => write!(f, "text/cql"), + Mime::TextCqlExpression => write!(f, "text/cql-expression"), + Mime::TextCqlIdentifier => write!(f, "text/cql-identifier"), + Mime::TextCss => write!(f, "text/css"), + Mime::TextCsv => write!(f, "text/csv"), + Mime::TextCsvSchema => write!(f, "text/csv-schema"), + Mime::TextDns => write!(f, "text/dns"), + Mime::TextEncaprtp => write!(f, "text/encaprtp"), + Mime::TextExample => write!(f, "text/example"), + Mime::TextFhirpath => write!(f, "text/fhirpath"), + Mime::TextFlexfec => write!(f, "text/flexfec"), + Mime::TextFwdred => write!(f, "text/fwdred"), + Mime::TextGff3 => write!(f, "text/gff3"), + Mime::TextGrammarRefList => write!(f, "text/grammar-ref-list"), + Mime::TextHl7v2 => write!(f, "text/hl7v2"), + Mime::TextHtml => write!(f, "text/html"), + Mime::TextJavascript => write!(f, "text/javascript"), + Mime::TextJcrCnd => write!(f, "text/jcr-cnd"), + Mime::TextMarkdown => write!(f, "text/markdown"), + Mime::TextMizar => write!(f, "text/mizar"), + Mime::TextN3 => write!(f, "text/n3"), + Mime::TextParameters => write!(f, "text/parameters"), + Mime::TextParityfec => write!(f, "text/parityfec"), + Mime::TextPlain => write!(f, "text/plain"), + Mime::TextProvenanceNotation => write!(f, "text/provenance-notation"), + Mime::TextPrsFallensteinRst => write!(f, "text/prs.fallenstein.rst"), + Mime::TextPrsLinesTag => write!(f, "text/prs.lines.tag"), + Mime::TextPrsPropLogic => write!(f, "text/prs.prop.logic"), + Mime::TextRaptorfec => write!(f, "text/raptorfec"), + Mime::TextRed => write!(f, "text/RED"), + Mime::TextRfc822Headers => write!(f, "text/rfc822-headers"), + Mime::TextRtf => write!(f, "text/rtf"), + Mime::TextRtpEncAescm128 => write!(f, "text/rtp-enc-aescm128"), + Mime::TextRtploopback => write!(f, "text/rtploopback"), + Mime::TextRtx => write!(f, "text/rtx"), + Mime::TextSgml => write!(f, "text/SGML"), + Mime::TextShaclc => write!(f, "text/shaclc"), + Mime::TextShex => write!(f, "text/shex"), + Mime::TextSpdx => write!(f, "text/spdx"), + Mime::TextStrings => write!(f, "text/strings"), + Mime::TextT140 => write!(f, "text/t140"), + Mime::TextTabSeparatedValues => write!(f, "text/tab-separated-values"), + Mime::TextTroff => write!(f, "text/troff"), + Mime::TextTurtle => write!(f, "text/turtle"), + Mime::TextUlpfec => write!(f, "text/ulpfec"), + Mime::TextUriList => write!(f, "text/uri-list"), + Mime::TextVcard => write!(f, "text/vcard"), + Mime::TextVndA => write!(f, "text/vnd.a"), + Mime::TextVndAbc => write!(f, "text/vnd.abc"), + Mime::TextVndAsciiArt => write!(f, "text/vnd.ascii-art"), + Mime::TextVndCurl => write!(f, "text/vnd.curl"), + Mime::TextVndDebianCopyright => write!(f, "text/vnd.debian.copyright"), + Mime::TextVndDmclientscript => write!(f, "text/vnd.DMClientScript"), + Mime::TextVndDvbSubtitle => write!(f, "text/vnd.dvb.subtitle"), + Mime::TextVndEsmertecThemeDescriptor => write!(f, "text/vnd.esmertec.theme-descriptor"), + Mime::TextVndExchangeable => write!(f, "text/vnd.exchangeable"), + Mime::TextVndFamilysearchGedcom => write!(f, "text/vnd.familysearch.gedcom"), + Mime::TextVndFiclabFlt => write!(f, "text/vnd.ficlab.flt"), + Mime::TextVndFly => write!(f, "text/vnd.fly"), + Mime::TextVndFmiFlexstor => write!(f, "text/vnd.fmi.flexstor"), + Mime::TextVndGml => write!(f, "text/vnd.gml"), + Mime::TextVndGraphviz => write!(f, "text/vnd.graphviz"), + Mime::TextVndHans => write!(f, "text/vnd.hans"), + Mime::TextVndHgl => write!(f, "text/vnd.hgl"), + Mime::TextVndIn3d3dml => write!(f, "text/vnd.in3d.3dml"), + Mime::TextVndIn3dSpot => write!(f, "text/vnd.in3d.spot"), + Mime::TextVndIptcNewsml => write!(f, "text/vnd.IPTC.NewsML"), + Mime::TextVndIptcNitf => write!(f, "text/vnd.IPTC.NITF"), + Mime::TextVndLatexZ => write!(f, "text/vnd.latex-z"), + Mime::TextVndMotorolaReflex => write!(f, "text/vnd.motorola.reflex"), + Mime::TextVndMsMediapackage => write!(f, "text/vnd.ms-mediapackage"), + Mime::TextVndNet2phoneCommcenterCommand => write!(f, "text/vnd.net2phone.commcenter.command"), + Mime::TextVndRadisysMsmlBasicLayout => write!(f, "text/vnd.radisys.msml-basic-layout"), + Mime::TextVndSenxWarpscript => write!(f, "text/vnd.senx.warpscript"), + Mime::TextVndSunJ2meAppDescriptor => write!(f, "text/vnd.sun.j2me.app-descriptor"), + Mime::TextVndSosi => write!(f, "text/vnd.sosi"), + Mime::TextVndTrolltechLinguist => write!(f, "text/vnd.trolltech.linguist"), + Mime::TextVndWapSi => write!(f, "text/vnd.wap.si"), + Mime::TextVndWapSl => write!(f, "text/vnd.wap.sl"), + Mime::TextVndWapWml => write!(f, "text/vnd.wap.wml"), + Mime::TextVndWapWmlscript => write!(f, "text/vnd.wap.wmlscript"), + Mime::TextVtt => write!(f, "text/vtt"), + Mime::TextWgsl => write!(f, "text/wgsl"), + Mime::TextXml => write!(f, "text/xml"), + Mime::TextXmlExternalParsedEntity => write!(f, "text/xml-external-parsed-entity"), + Mime::Video1dInterleavedParityfec => write!(f, "video/1d-interleaved-parityfec"), + Mime::Video3gpp => write!(f, "video/3gpp"), + Mime::Video3gpp2 => write!(f, "video/3gpp2"), + Mime::Video3gppTt => write!(f, "video/3gpp-tt"), + Mime::VideoAv1 => write!(f, "video/AV1"), + Mime::VideoBmpeg => write!(f, "video/BMPEG"), + Mime::VideoBt656 => write!(f, "video/BT656"), + Mime::VideoCelb => write!(f, "video/CelB"), + Mime::VideoDv => write!(f, "video/DV"), + Mime::VideoEncaprtp => write!(f, "video/encaprtp"), + Mime::VideoExample => write!(f, "video/example"), + Mime::VideoFfv1 => write!(f, "video/FFV1"), + Mime::VideoFlexfec => write!(f, "video/flexfec"), + Mime::VideoH261 => write!(f, "video/H261"), + Mime::VideoH263 => write!(f, "video/H263"), + Mime::VideoH2631998 => write!(f, "video/H263-1998"), + Mime::VideoH2632000 => write!(f, "video/H263-2000"), + Mime::VideoH264 => write!(f, "video/H264"), + Mime::VideoH264Rcdo => write!(f, "video/H264-RCDO"), + Mime::VideoH264Svc => write!(f, "video/H264-SVC"), + Mime::VideoH265 => write!(f, "video/H265"), + Mime::VideoH266 => write!(f, "video/H266"), + Mime::VideoIsoSegment => write!(f, "video/iso.segment"), + Mime::VideoJpeg => write!(f, "video/JPEG"), + Mime::VideoJpeg2000 => write!(f, "video/jpeg2000"), + Mime::VideoJxsv => write!(f, "video/jxsv"), + Mime::VideoMj2 => write!(f, "video/mj2"), + Mime::VideoMp1s => write!(f, "video/MP1S"), + Mime::VideoMp2p => write!(f, "video/MP2P"), + Mime::VideoMp2t => write!(f, "video/MP2T"), + Mime::VideoMp4 => write!(f, "video/mp4"), + Mime::VideoMp4vEs => write!(f, "video/MP4V-ES"), + Mime::VideoMpv => write!(f, "video/MPV"), + Mime::VideoMpeg4Generic => write!(f, "video/mpeg4-generic"), + Mime::VideoNv => write!(f, "video/nv"), + Mime::VideoOgg => write!(f, "video/ogg"), + Mime::VideoParityfec => write!(f, "video/parityfec"), + Mime::VideoPointer => write!(f, "video/pointer"), + Mime::VideoQuicktime => write!(f, "video/quicktime"), + Mime::VideoRaptorfec => write!(f, "video/raptorfec"), + Mime::VideoRaw => write!(f, "video/raw"), + Mime::VideoRtpEncAescm128 => write!(f, "video/rtp-enc-aescm128"), + Mime::VideoRtploopback => write!(f, "video/rtploopback"), + Mime::VideoRtx => write!(f, "video/rtx"), + Mime::VideoScip => write!(f, "video/scip"), + Mime::VideoSmpte291 => write!(f, "video/smpte291"), + Mime::VideoSmpte292m => write!(f, "video/SMPTE292M"), + Mime::VideoUlpfec => write!(f, "video/ulpfec"), + Mime::VideoVc1 => write!(f, "video/vc1"), + Mime::VideoVc2 => write!(f, "video/vc2"), + Mime::VideoVndCctv => write!(f, "video/vnd.CCTV"), + Mime::VideoVndDeceHd => write!(f, "video/vnd.dece.hd"), + Mime::VideoVndDeceMobile => write!(f, "video/vnd.dece.mobile"), + Mime::VideoVndDeceMp4 => write!(f, "video/vnd.dece.mp4"), + Mime::VideoVndDecePd => write!(f, "video/vnd.dece.pd"), + Mime::VideoVndDeceSd => write!(f, "video/vnd.dece.sd"), + Mime::VideoVndDeceVideo => write!(f, "video/vnd.dece.video"), + Mime::VideoVndDirectvMpeg => write!(f, "video/vnd.directv.mpeg"), + Mime::VideoVndDirectvMpegTts => write!(f, "video/vnd.directv.mpeg-tts"), + Mime::VideoVndDlnaMpegTts => write!(f, "video/vnd.dlna.mpeg-tts"), + Mime::VideoVndDvbFile => write!(f, "video/vnd.dvb.file"), + Mime::VideoVndFvt => write!(f, "video/vnd.fvt"), + Mime::VideoVndHnsVideo => write!(f, "video/vnd.hns.video"), + Mime::VideoVndIptvforum1dparityfec1010 => write!(f, "video/vnd.iptvforum.1dparityfec-1010"), + Mime::VideoVndIptvforum1dparityfec2005 => write!(f, "video/vnd.iptvforum.1dparityfec-2005"), + Mime::VideoVndIptvforum2dparityfec1010 => write!(f, "video/vnd.iptvforum.2dparityfec-1010"), + Mime::VideoVndIptvforum2dparityfec2005 => write!(f, "video/vnd.iptvforum.2dparityfec-2005"), + Mime::VideoVndIptvforumTtsavc => write!(f, "video/vnd.iptvforum.ttsavc"), + Mime::VideoVndIptvforumTtsmpeg2 => write!(f, "video/vnd.iptvforum.ttsmpeg2"), + Mime::VideoVndMotorolaVideo => write!(f, "video/vnd.motorola.video"), + Mime::VideoVndMotorolaVideop => write!(f, "video/vnd.motorola.videop"), + Mime::VideoVndMpegurl => write!(f, "video/vnd.mpegurl"), + Mime::VideoVndMsPlayreadyMediaPyv => write!(f, "video/vnd.ms-playready.media.pyv"), + Mime::VideoVndNokiaInterleavedMultimedia => write!(f, "video/vnd.nokia.interleaved-multimedia"), + Mime::VideoVndNokiaMp4vr => write!(f, "video/vnd.nokia.mp4vr"), + Mime::VideoVndNokiaVideovoip => write!(f, "video/vnd.nokia.videovoip"), + Mime::VideoVndObjectvideo => write!(f, "video/vnd.objectvideo"), + Mime::VideoVndRadgamettoolsBink => write!(f, "video/vnd.radgamettools.bink"), + Mime::VideoVndRadgamettoolsSmacker => write!(f, "video/vnd.radgamettools.smacker"), + Mime::VideoVndSealedMpeg1 => write!(f, "video/vnd.sealed.mpeg1"), + Mime::VideoVndSealedMpeg4 => write!(f, "video/vnd.sealed.mpeg4"), + Mime::VideoVndSealedSwf => write!(f, "video/vnd.sealed.swf"), + Mime::VideoVndSealedmediaSoftsealMov => write!(f, "video/vnd.sealedmedia.softseal.mov"), + Mime::VideoVndUvvuMp4 => write!(f, "video/vnd.uvvu.mp4"), + Mime::VideoVndYoutubeYt => write!(f, "video/vnd.youtube.yt"), + Mime::VideoVndVivo => write!(f, "video/vnd.vivo"), + Mime::VideoVp8 => write!(f, "video/VP8"), + Mime::VideoVp9 => write!(f, "video/VP9"), + } + } +} + +#[derive(Debug)] +pub struct ParseMimeError(i32); + +impl std::fmt::Display for ParseMimeError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } +} +impl std::error::Error for ParseMimeError {} + +impl std::str::FromStr for Mime { + type Err = ParseMimeError; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let s = if let Some(str) = s.split_once(';') { + str.0 + } else { + s + }; + match MIME_MAP.get(s).copied() { + Some(mimetype) => Ok(mimetype), + None => Err(ParseMimeError(1)), + } + } +} + +impl Mime { + /// Gets the mime type from filename, defaults to [Mime::TextPlain] + pub fn from_filename(filename: &str) -> Self { + match filename.split('.').last() { + Some(v) => match v { + "png" => Mime::ImagePng, + "jpg" => Mime::ImageJpeg, + "json" => Mime::ApplicationJson, + "html" => Mime::TextHtml, + "css" => Mime::TextCss, + "svg" => Mime::ImageSvgXml, + &_ => Mime::TextPlain, + }, + None => Mime::TextPlain, + } + } +} + +#[cfg(test)] +mod test { + use crate::utils::mime::mime_enum::Mime; + + #[test] + fn get_mime_test() { + assert_eq!("text/plain".parse::<Mime>().unwrap(), Mime::TextPlain) + } +} diff --git a/core/http/src/utils/mime/mod.rs b/core/http/src/utils/mime/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..4421654339e44e341cb5eed28443f0770a4ea7a8 --- /dev/null +++ b/core/http/src/utils/mime/mod.rs @@ -0,0 +1,5 @@ +mod map; +mod mime_enum; +pub use map::MIME_MAP; +pub use mime_enum::Mime; +pub use mime_enum::ParseMimeError; diff --git a/core/http/src/utils/mod.rs b/core/http/src/utils/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..6f54242fa58e4f066dad1846c4b4bc586b002a32 --- /dev/null +++ b/core/http/src/utils/mod.rs @@ -0,0 +1,3 @@ +pub mod mime; +pub mod url_utils; +pub mod urlencoded; diff --git a/core/http/src/utils/url_utils/datatypes.rs b/core/http/src/utils/url_utils/datatypes.rs new file mode 100644 index 0000000000000000000000000000000000000000..6e360807ec57cfb988d5e4f2664873f72791b807 --- /dev/null +++ b/core/http/src/utils/url_utils/datatypes.rs @@ -0,0 +1,38 @@ +use std::error; + +use crate::utils::urlencoded::UrlEncodeData; + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)] +pub struct Uri { + pub(super) parts: Vec<UrlEncodeData>, +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct RawUri { + pub(super) raw_string: String, + pub(super) infinte_end: bool, + pub(super) parts: Vec<RawUriElement>, +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum RawUriElement { + Variable, + Name(UrlEncodeData), +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum UriError { + InvalidUriEncoding, +} + +#[derive(Debug)] +pub struct ParseUriError { + pub error: UriError, +} +impl std::fmt::Display for ParseUriError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } +} + +impl error::Error for ParseUriError {} diff --git a/core/http/src/utils/url_utils/mod.rs b/core/http/src/utils/url_utils/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..7a6061d096e735d42bc4f1a5508377758798e101 --- /dev/null +++ b/core/http/src/utils/url_utils/mod.rs @@ -0,0 +1,7 @@ +mod datatypes; +mod uri; +pub use datatypes::ParseUriError; +pub use datatypes::RawUri; +pub use datatypes::RawUriElement; +pub use datatypes::Uri; +pub use datatypes::UriError; diff --git a/core/http/src/utils/url_utils/uri.rs b/core/http/src/utils/url_utils/uri.rs new file mode 100644 index 0000000000000000000000000000000000000000..6b8146be14f1297f202e4fc59bcaa93928a5fbd5 --- /dev/null +++ b/core/http/src/utils/url_utils/uri.rs @@ -0,0 +1,180 @@ +use std::str::FromStr; + +use crate::utils::{url_utils::datatypes::RawUriElement, urlencoded::UrlEncodeData}; + +use super::datatypes::{ParseUriError, RawUri, Uri, UriError}; + +impl Uri { + pub fn new(parts: Vec<&str>) -> Self { + Self { + parts: parts.into_iter().map(UrlEncodeData::from_raw).collect(), + } + } +} + +impl RawUri { + pub fn new(parts: Vec<&str>) -> Self { + let mut result = Self { + infinte_end: false, + parts: Vec::with_capacity(parts.len()), + raw_string: "/".to_owned() + &parts.join("/"), + }; + for part in parts { + if part.starts_with('<') && part.ends_with("..>") { + result.infinte_end = true; + break; + } + if part.starts_with('<') && part.ends_with('>') { + result.parts.push(RawUriElement::Variable); + continue; + } + result + .parts + .push(RawUriElement::Name(UrlEncodeData::from_raw(part))) + } + result + } + pub fn compare_uri(self, uri: Uri) -> bool { + let mut iter_comp = uri.parts.iter(); + let mut counter = 0; + for element in self.parts.iter() { + counter += 1; + let Some(compare_element) = iter_comp.next() else { + return false; + }; + + if *element == RawUriElement::Variable { + continue; + } + if let RawUriElement::Name(name) = element { + if name.encoded() != compare_element.encoded() { + return false; + } + } else { + return false; + } + } + if counter > self.parts.len() && !self.infinte_end { + return false; + } + true + } +} + +impl std::fmt::Display for RawUri { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.raw_string) + } +} + +impl std::fmt::Display for Uri { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let url = self + .parts + .iter() + .map(|part| part.encoded()) + .collect::<Vec<_>>(); + write!(f, "/{}", url.join("/")) + } +} + +impl FromStr for Uri { + type Err = ParseUriError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + let split = s.split('/'); + let mut result = Vec::new(); + for sub in split { + if sub.is_empty() { + continue; + } + result.push(if let Ok(coded) = UrlEncodeData::from_encoded(sub) { + coded + } else { + UrlEncodeData::from_raw(sub) + }); + } + Ok(Self { parts: result }) + } +} + +impl FromStr for RawUri { + type Err = UriError; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let parts = s.split('/').collect::<Vec<&str>>(); + let mut result = Self { + infinte_end: false, + parts: Vec::new(), + raw_string: parts.join("/"), + }; + for part in parts { + if part.is_empty() { + continue; + } + if part.starts_with('<') && part.ends_with("..>") { + result.infinte_end = true; + break; + } + if part.starts_with('<') && part.ends_with('>') { + result.parts.push(RawUriElement::Variable); + continue; + } + result + .parts + .push(RawUriElement::Name(UrlEncodeData::from_raw(part))) + } + Ok(result) + } +} + +#[cfg(test)] +mod test { + use crate::utils::{ + url_utils::{ + datatypes::{RawUri, RawUriElement}, + Uri, + }, + urlencoded::UrlEncodeData, + }; + + #[test] + fn uri_to_string() { + assert_eq!("/a/%20", Uri::new(vec!["a", " "]).to_string()); + } + + #[test] + fn uri_from_string() { + assert_eq!(Uri::new(vec!["a", " "]), "/a/%20".parse().unwrap()) + } + + #[test] + fn raw_uri_from_string() { + assert_eq!( + RawUri { + raw_string: "/<name>/a/<f..>".to_owned(), + infinte_end: true, + parts: vec![ + RawUriElement::Variable, + RawUriElement::Name(UrlEncodeData::from_raw("a")), + ] + }, + "/<name>/a/<f..>".parse().unwrap() + ); + } + + #[test] + fn raw_uri_to_string() { + assert_eq!( + "/<name>/a/<f..>", + RawUri { + raw_string: "/<name>/a/<f..>".to_owned(), + infinte_end: true, + parts: vec![ + RawUriElement::Variable, + RawUriElement::Name(UrlEncodeData::from_raw("a")), + ] + } + .to_string() + ) + } +} diff --git a/core/http/src/utils/urlencoded/datatypes.rs b/core/http/src/utils/urlencoded/datatypes.rs new file mode 100644 index 0000000000000000000000000000000000000000..32079556861b204ba03c414b1fe1c0832faa2029 --- /dev/null +++ b/core/http/src/utils/urlencoded/datatypes.rs @@ -0,0 +1,74 @@ +use crate::utils::urlencoded::endecode::EnCodable; + +use super::endecode::DeCodable; + +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] +/// A way to store UrlEncoded data +pub struct UrlEncodeData { + /// Encoded string + pub(crate) encoded: String, + /// raw data, unencoded + pub(crate) raw: Vec<u8>, + /// raw string if it exists + pub(crate) raw_string: Option<String>, +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)] +pub enum UrlEncodeError { + NonHexAfterPercent, +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct ParseUrlEncodeError { + pub inner: UrlEncodeError, +} + +impl std::fmt::Display for ParseUrlEncodeError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } +} + +impl std::error::Error for ParseUrlEncodeError {} + +impl UrlEncodeData { + /// Generates a [UrlEncodeData] from any raw data that can be a slice of [u8] + pub fn from_raw<T: AsRef<[u8]>>(raw: T) -> Self { + Self { + raw: raw.as_ref().to_owned(), + encoded: raw.encode(), + raw_string: String::from_utf8(raw.as_ref().into()).ok(), + } + } + /// Generates a [UrlEncodeData] from a correctly encoded string + /// + /// # Errors + /// + /// errors if the encoded data is wrongly encoded -> %<invalid_character> + pub fn from_encoded(encoded: &str) -> super::UriParseResult<Self> { + Ok(Self { + encoded: encoded.to_owned(), + raw: encoded.decode()?, + raw_string: String::from_utf8(encoded.decode()?).ok(), + }) + } + + /// Gets a reference to the encoded data + pub fn encoded(&self) -> &str { + self.encoded.as_ref() + } + /// Get a reference to the raw [u8] slice + pub fn raw(&self) -> &[u8] { + self.raw.as_ref() + } + /// Gets an Optional string slice to the raw data + pub fn raw_string(&self) -> Option<&str> { + self.raw_string.as_deref() + } +} + +impl std::fmt::Display for UrlEncodeData { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.encoded) + } +} diff --git a/core/http/src/utils/urlencoded/endecode.rs b/core/http/src/utils/urlencoded/endecode.rs new file mode 100644 index 0000000000000000000000000000000000000000..8a77253972bde4185914391294ab4670c35f4e75 --- /dev/null +++ b/core/http/src/utils/urlencoded/endecode.rs @@ -0,0 +1,112 @@ +use super::{datatypes::ParseUrlEncodeError, UriParseResult}; + +/// Base of the HexaDecimal Number system +static BASE16_HEXA_DECIMAL: u8 = 0x10; +/// Highest possible Value per digit +static BASE16_HEXA_DECIMAL_POSSIBLE_VALUE_PER_DIGIT: u8 = 0xF; +/// Bits of a hexa decimal number +static BASE16_HEXA_DECIMAL_DIGIT_BITS: u8 = 4; + +pub trait EnCodable { + /// Encodes the give data into a Percent Encoded [String] + fn encode(&self) -> String; +} + +pub trait DeCodable { + /// Decodes the given data into a [`Vec<u8>`] + /// + /// # Errors + /// Errors if the encoding isn't right + fn decode(&self) -> UriParseResult<Vec<u8>>; +} + +impl<T: AsRef<[u8]>> EnCodable for T { + fn encode(&self) -> String { + self.as_ref().encode() + } +} + +impl EnCodable for [u8] { + fn encode(self: &[u8]) -> String { + let mut result = String::with_capacity(self.len()); + let result_vec = unsafe { result.as_mut_vec() }; + self.iter().for_each(|byte| { + if !matches!(byte, b'0'..=b'9' | b'A'..=b'Z' | b'a'..=b'z' | b'-' | b'_' | b'.' | b'~') + { + result_vec.push(b'%'); + result_vec.push(hex_to_digit(byte >> BASE16_HEXA_DECIMAL_DIGIT_BITS)); + result_vec.push(hex_to_digit( + byte & BASE16_HEXA_DECIMAL_POSSIBLE_VALUE_PER_DIGIT, + )); + } else { + result_vec.push(*byte) + } + }); + result + } +} +impl DeCodable for &str { + fn decode(&self) -> UriParseResult<Vec<u8>> { + let mut first = true; + let mut result = Vec::with_capacity(self.len()); + + for i in self.split('%') { + if first { + first = false; + result.extend_from_slice(i.as_bytes()); + continue; + } + let Ok(char) = u8::from_str_radix(i[0..=1].as_ref(), BASE16_HEXA_DECIMAL.into()) else { + return Err(ParseUrlEncodeError { inner: super::datatypes::UrlEncodeError::NonHexAfterPercent }); + }; + result.push(char); + result.extend_from_slice(i[2..].as_bytes()); + } + Ok(result) + } +} + +/// converts a [u8] digit into the ascii code of its counterpart. The digit shouldn't be bigger +/// than [BASE16_HEXA_DECIMAL_POSSIBLE_VALUE_PER_DIGIT] +fn hex_to_digit(digit: u8) -> u8 { + match digit { + 0..=9 => b'0' + digit, + 10..=255 => b'A' + digit - 10, + } +} + +#[cfg(test)] +mod test { + use crate::utils::urlencoded::endecode::DeCodable; + use crate::utils::urlencoded::endecode::EnCodable; + + #[test] + fn urlencoded_test() { + assert_eq!( + "Darius%20is%20the%20biggest%20genius%2FGenie%2FHuman%20extraordin%C3%A4ire", + b"Darius is the biggest genius/Genie/Human extraordin\xC3\xA4ire".encode() + ); + } + #[test] + fn urldecoded_test() { + assert_eq!( + "Darius is the biggest genius/Genie/Human extraordinäire", + String::from_utf8( + "Darius%20is%20the%20biggest%20genius%2FGenie%2FHuman%20extraordin%C3%A4ire" + .decode() + .unwrap() + ) + .unwrap() + ); + assert_eq!( + Err(crate::utils::urlencoded::datatypes::ParseUrlEncodeError { + inner: crate::utils::urlencoded::datatypes::UrlEncodeError::NonHexAfterPercent + }), + "Darius%2iis%20the%20biggest%20genius%2FGenie%2FHuman%20extraordin%C3%A4ire".decode() + ); + assert_eq!( + "hi?asdf=sadf%%&jkl=s", + String::from_utf8("hi?asdf=sadf%25%25&jkl=s".decode().unwrap()).unwrap() + ) + } +} diff --git a/core/http/src/utils/urlencoded/mod.rs b/core/http/src/utils/urlencoded/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..bf5f2929e3402acbbe07cce909947008a7d15a96 --- /dev/null +++ b/core/http/src/utils/urlencoded/mod.rs @@ -0,0 +1,7 @@ +mod datatypes; +mod endecode; +use std::result; + +type UriParseResult<T> = result::Result<T, datatypes::ParseUrlEncodeError>; +pub use datatypes::UrlEncodeData; +pub use endecode::{DeCodable, EnCodable}; diff --git a/examples/1.rs b/examples/1.rs new file mode 100644 index 0000000000000000000000000000000000000000..8d6483429f19c02d5d2559d6d4821bd1f30cd112 --- /dev/null +++ b/examples/1.rs @@ -0,0 +1,113 @@ + +use std::{collections::HashMap, path::PathBuf}; + +use http::handling::{ + file_handlers::NamedFile, + methods::Method, + request::{Request, ParseFormError}, + response::{Outcome, Response, Status}, + routes::{Data, Route}, +}; + +fn hashmap_to_string(map: &HashMap<&str, Result<&str, ParseFormError>>) -> String { + let mut result = String::new(); + for (key, value) in map { + result.push_str(key); + result.push('='); + result.push_str(value.as_ref().unwrap()); + result.push(';'); + } + result.pop(); // Remove the trailing semicolon if desired + result +} + +fn handle_static_hi(request: Request<>, data: Data) -> Outcome<Response, Status, Data> { + let keys = if let Ok(keys) = request.get_get_form_keys(&["asdf", "jkl"]) { + keys + } else { + return Outcome::Forward(data); + }; + let response = hashmap_to_string(&keys); + Outcome::Success(Response { + headers: vec![], + cookies: None, + status: Some(Status::Ok), + body: Box::new(response), + }) + // Outcome::Forward(data) +} + +fn handler(request: Request<>, _data: Data) -> Outcome<Response, Status, Data> { + let response = fileserver(request.uri.raw_string().unwrap().strip_prefix("static/").unwrap()); + let response = match response { + Ok(dat) => Response { + headers: vec![], + cookies: None, + status: Some(Status::Ok), + body: Box::new(dat), + }, + Err(_) => return Outcome::Failure(Status::NotFound), + }; + Outcome::Success(response) +} + +fn fileserver(path: &str) -> Result<NamedFile, Status> { + NamedFile::open(PathBuf::from("static/".to_string() + path)) +} + +fn post_hi_handler(request: Request, data: Data) -> Outcome<Response, Status, Data> { + if data.is_empty() { + return Outcome::Forward(data); + } + let dat = if let Ok(val) = request.get_post_data(&["message"], &data) { + post_hi(String::from_utf8_lossy(val.get("message").unwrap().as_ref().unwrap()).to_string()) + } else { + return Outcome::Failure(Status::BadRequest); + }; + Outcome::Success(Response { + headers: vec![], + cookies: None, + status: Some(Status::Ok), + body: Box::new(dat), + }) +} + +fn post_hi(msg: String) -> String { + msg +} + +#[tokio::main] +async fn main() { + let fileserver = Route { + format: None, + handler, + name: Some("file_server"), + uri: "static/<path..>", + method: Method::Get, + rank: 1, + }; + + let post_test = Route { + format: None, + handler: post_hi_handler, + name: Some("post_test"), + uri: "post", + method: Method::Post, + rank: 0, + }; + + let static_hi = Route { + format: None, + handler: handle_static_hi, + name: Some("Handle_Static_hi"), + uri: "static/hi", + method: Method::Get, + rank: 0, + }; + http::build("127.0.0.1:8080", "127.0.0.1:8443") + .await + .mount("/", vec![fileserver, post_test, static_hi]) + .mount("/post/", vec![post_test]) + .launch() + .await; +} diff --git a/generatersenum.py b/generatersenum.py new file mode 100644 index 0000000000000000000000000000000000000000..2c686bd3723dfe71e8fd961c918f3da077a628d3 --- /dev/null +++ b/generatersenum.py @@ -0,0 +1,73 @@ +import csv + + +def generate_rust_enum(csv_file): + rust_enum = "use phf::phf_map;\n\nenum Mime {\n" + + with open(csv_file, "r") as file: + csv_data = csv.reader(file) + next(csv_data) # Skip the header row + + for row in csv_data: + if row[1] == "": + continue + if "DEPRECATED" in row[0]: + continue + name = format_enum_member(row[0:2]) + rust_enum += f"\t{name},\n" + + rust_enum += "}\n\n" + rust_enum += "impl std::fmt::Display for Mime {\n" + rust_enum += "\tfn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n" + rust_enum += "\t\tmatch self {\n" + + with open(csv_file, "r") as file: + csv_data = csv.reader(file) + next(csv_data) # Skip the header row + for row in csv_data: + if row[1] == "": + continue + if "DEPRECATED" in row[0]: + continue + name = format_enum_member(row[0:2]) + rust_enum += f'\t\t\tMime::{name} => write!(f, "{row[1]}"),\n' + + rust_enum += "\t\t}\n\t}\n}\n\n" + + rust_enum += "static MimeMap: phf::Map<&'static str, Mime> = phf_map! {\n" + with open(csv_file, "r") as file: + csv_data = csv.reader(file) + next(csv_data) + for row in csv_data: + if row[1] == "": + continue + if "DEPRECATED" in row[0]: + continue + key = row[1] + value = format_enum_member(row[0:2]) + rust_enum += f'\t"{key}" => Mime::{value},\n' + rust_enum += "};" + + return rust_enum + + +def format_enum_member(name): + prefix = "".join(name[1].split("/")[0:-1]) + name = name[0].split("-") + words = [] + parts = [] + for part in name: + parts += part.split("+") + for part in parts: + words += part.split(".") + + formatted_name = "".join(word.capitalize() for word in words) + if not formatted_name.startswith(prefix.capitalize()): + formatted_name = prefix.capitalize() + formatted_name + return formatted_name + + +# Usage example +csv_file = "mimes.csv" +rust_enum_code = generate_rust_enum(csv_file) +print(rust_enum_code) diff --git a/site/404.html b/site/404.html new file mode 100644 index 0000000000000000000000000000000000000000..b5a9b4aacc5cc6a062e6c97e8b959a9148ff2f8f --- /dev/null +++ b/site/404.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <title>404</title> + </head> + <body> + <h1>404</h1> + <p>Hi from Rust</p> + <form action="/post/post" method="post" enctype="multipart/form-data"> + <label for="message">Enter your message:</label> + <input type="text" id="message" name="message" /> + <button type="submit">Send</button> + </form> + <form action="/static/hi" method="get"> + <label for="jump">Enter asdf</label> + <input type="text" id="jump" name="asdf" /> + <label for="jkl">Enter jkl;</label> + <input type="text" id="jkl" name="jkl" /> + <button type="submit">Send</button> + </form> + </body> +</html> diff --git a/site/411.html b/site/411.html new file mode 100644 index 0000000000000000000000000000000000000000..802df869502c653815ec84b8fbc2c90854bf871f --- /dev/null +++ b/site/411.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> + +<html> + <head> + <meta charset="utf-8" /> + <title>411</title> + </head> + <h1>411</h1> +</html> diff --git a/site/Cargo.lock b/site/Cargo.lock index d1bf5078f09d5e69784d6dfd70bfab679737d362..8373d437f28e393a378f4a04ae77f127649ecccc 100644 --- a/site/Cargo.lock +++ b/site/Cargo.lock @@ -2,6 +2,727 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + +[[package]] +name = "http" +version = "0.1.0" +dependencies = [ + "phf", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.2", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.144" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" + +[[package]] +name = "mio" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebffdb73fe72e917997fad08bdbf31ac50b0fa91cec93e69a0662e4264d454c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "openssl" +version = "0.10.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "phf" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_shared" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "proc-macro2" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustix" +version = "0.37.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "security-framework" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + [[package]] name = "site" version = "0.1.0" +dependencies = [ + "http", + "tokio", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +dependencies = [ + "autocfg", + "cfg-if", + "fastrand", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio" +version = "1.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +dependencies = [ + "autocfg", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "unicode-ident" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/site/Cargo.toml b/site/Cargo.toml index e6a315340d89f3e8aa591389c7be8147b0c83995..1d8b4005c671ad045ca83a15315ba430f0a5f99f 100644 --- a/site/Cargo.toml +++ b/site/Cargo.toml @@ -5,4 +5,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + [dependencies] +http = { path = "../core/http", features = ["secure"]} +tokio = { version = "1.28.2", features = ["full"] } diff --git a/site/assets/favicon.svg b/site/assets/favicon.svg new file mode 100644 index 0000000000000000000000000000000000000000..b4d91476b910e4581810b8fc8924869a7a8f381f --- /dev/null +++ b/site/assets/favicon.svg @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> + +<svg + fill="#000000" + height="800px" + width="800px" + version="1.1" + id="Capa_1" + viewBox="0 0 511 511" + xml:space="preserve" + sodipodi:docname="favicon.svg" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"><defs + id="defs290" /><sodipodi:namedview + id="namedview288" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:showpageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#505050" + showgrid="false" + inkscape:zoom="1.51125" + inkscape:cx="390.73615" + inkscape:cy="400" + inkscape:window-width="5120" + inkscape:window-height="1387" + inkscape:window-x="0" + inkscape:window-y="28" + inkscape:window-maximized="1" + inkscape:current-layer="Capa_1" /> +<g + id="g285" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1"> + <path + d="M487.5,128.106H479v-24.5c0-2.905-1.678-5.549-4.307-6.786C405.088,64.066,325.408,63.6,255.5,95.371 C185.592,63.6,105.912,64.067,36.307,96.82C33.678,98.057,32,100.701,32,103.606v24.5h-8.5c-12.958,0-23.5,10.542-23.5,23.5v264 c0,12.958,10.542,23.5,23.5,23.5h464c12.958,0,23.5-10.542,23.5-23.5v-264C511,138.648,500.458,128.106,487.5,128.106z M263,239.583c0-0.009,0-0.019,0-0.028V108.416c64.137-28.707,136.861-28.707,201,0v27.161c0,0.01-0.001,0.02-0.001,0.029 s0.001,0.02,0.001,0.029v244.438c-32.237-13.461-66.371-20.193-100.5-20.193c-34.129,0-68.264,6.732-100.5,20.193V239.583z M215,96.391c11.187,3.204,22.217,7.198,33,12.025v117.177l-12.34-8.227c-2.52-1.68-5.801-1.68-8.32,0L215,225.593V96.391z M47,135.626c0-0.007,0.001-0.013,0.001-0.02S47,135.594,47,135.587v-27.171c48.563-21.736,102.046-26.999,153-15.82v32.856 c-26.767-5.505-54.078-6.777-81.328-3.75c-4.117,0.457-7.083,4.165-6.626,8.282c0.458,4.116,4.162,7.085,8.282,6.626 c26.708-2.967,53.479-1.562,79.671,4.165v48.686c-15.912-3.265-32.14-5.067-48.377-5.323c-4.145-0.078-7.552,3.239-7.618,7.38 c-0.065,4.142,3.239,7.552,7.38,7.618c16.331,0.258,32.654,2.164,48.614,5.647v16.66c-43.389-8.909-88.39-6.644-130.748,6.665 c-3.952,1.241-6.148,5.451-4.907,9.403c1.007,3.204,3.964,5.254,7.153,5.254c0.745,0,1.502-0.112,2.25-0.347 c40.908-12.852,84.428-14.773,126.252-5.638v2.825c0,2.766,1.522,5.308,3.961,6.612c2.438,1.306,5.398,1.162,7.699-0.372 l19.84-13.227l16.5,11v136.454c-32.237-13.461-66.371-20.193-100.5-20.193c-34.129,0-68.264,6.732-100.5,20.193V135.626z M224,424.106H23.5c-4.687,0-8.5-3.813-8.5-8.5v-264c0-4.687,3.813-8.5,8.5-8.5H32v248.5v8c0,4.142,3.358,7.5,7.5,7.5H224V424.106z M57.29,392.106c58.099-22.934,122.32-22.935,180.42,0H57.29z M272,424.106h-33v-17h33V424.106z M453.71,392.106H273.29 C331.389,369.172,395.61,369.172,453.71,392.106z M496,415.606c0,4.687-3.813,8.5-8.5,8.5H287v-17h184.5c4.142,0,7.5-3.358,7.5-7.5 v-8v-248.5h8.5c4.687,0,8.5,3.813,8.5,8.5V415.606z" + id="path243" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M309.96,317.749c-8.302,1.74-16.615,3.911-24.708,6.454c-3.952,1.242-6.148,5.452-4.907,9.403 c1.007,3.204,3.964,5.254,7.153,5.254c0.745,0,1.502-0.112,2.25-0.347c7.628-2.396,15.464-4.443,23.288-6.083 c4.054-0.85,6.652-4.825,5.802-8.879C317.989,319.497,314.011,316.9,309.96,317.749z" + id="path245" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M439.502,338.859c3.189,0,6.147-2.051,7.153-5.254c1.241-3.952-0.956-8.162-4.907-9.403 c-32.073-10.076-65.329-13.842-98.844-11.188c-4.129,0.326-7.211,3.938-6.885,8.068s3.935,7.213,8.068,6.885 c31.59-2.499,62.935,1.048,93.165,10.546C438,338.748,438.757,338.859,439.502,338.859z" + id="path247" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M287.498,306.767c0.745,0,1.502-0.112,2.25-0.347c48.249-15.159,99.256-15.159,147.504,0 c3.952,1.24,8.162-0.956,9.403-4.907c1.241-3.952-0.956-8.162-4.907-9.403c-51.191-16.083-105.306-16.083-156.496,0 c-3.952,1.241-6.149,5.451-4.907,9.403C281.352,304.716,284.309,306.767,287.498,306.767z" + id="path249" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M287.498,274.859c0.745,0,1.502-0.112,2.25-0.347c27.681-8.697,56.409-12.412,85.399-11.037 c4.147,0.192,7.651-2.999,7.847-7.137c0.196-4.138-2.999-7.65-7.137-7.847c-30.753-1.456-61.236,2.483-90.605,11.71 c-3.952,1.242-6.149,5.452-4.907,9.403C281.352,272.81,284.309,274.859,287.498,274.859z" + id="path251" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M441.748,260.202c-10.76-3.38-21.846-6.086-32.952-8.043c-4.08-0.719-7.968,2.006-8.688,6.085 c-0.719,4.079,2.005,7.969,6.085,8.688c10.467,1.844,20.917,4.395,31.058,7.581c0.749,0.235,1.505,0.347,2.25,0.347 c3.189,0,6.147-2.051,7.153-5.254C447.896,265.653,445.7,261.443,441.748,260.202z" + id="path253" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M287.498,242.767c0.745,0,1.502-0.112,2.25-0.347c48.249-15.159,99.256-15.159,147.504,0 c3.952,1.24,8.162-0.956,9.403-4.907c1.241-3.952-0.956-8.162-4.907-9.403c-51.191-16.083-105.306-16.083-156.496,0 c-3.952,1.241-6.149,5.451-4.907,9.403C281.352,240.716,284.309,242.767,287.498,242.767z" + id="path255" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M334.678,185.702c-16.732,1.858-33.362,5.36-49.426,10.407c-3.952,1.241-6.148,5.451-4.907,9.403 c1.007,3.204,3.964,5.254,7.153,5.254c0.745,0,1.502-0.112,2.25-0.347c15.141-4.757,30.815-8.057,46.585-9.809 c4.117-0.457,7.083-4.165,6.626-8.282S338.79,185.244,334.678,185.702z" + id="path257" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M367.386,199.137c23.725,0.375,47.231,4.17,69.866,11.283c0.748,0.234,1.505,0.347,2.25,0.347 c3.189,0,6.146-2.051,7.153-5.254c1.241-3.952-0.956-8.162-4.907-9.403c-24.015-7.545-48.955-11.572-74.125-11.97 c-4.125-0.078-7.552,3.239-7.618,7.38S363.244,199.072,367.386,199.137z" + id="path259" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M390.671,168.704c4.116,0.46,7.825-2.509,8.282-6.626c0.458-4.117-2.509-7.825-6.626-8.282 c-36.252-4.027-72.278-0.526-107.075,10.406c-3.952,1.242-6.148,5.452-4.907,9.403c1.007,3.204,3.964,5.254,7.153,5.254 c0.745,0,1.502-0.112,2.25-0.347C322.545,168.208,356.5,164.909,390.671,168.704z" + id="path261" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M441.748,164.202c-5.418-1.702-10.96-3.246-16.472-4.588c-4.03-0.98-8.082,1.488-9.062,5.512 c-0.98,4.024,1.488,8.082,5.512,9.062c5.196,1.265,10.419,2.72,15.526,4.324c0.748,0.235,1.505,0.347,2.25,0.347 c3.189,0,6.147-2.051,7.153-5.254C447.896,169.653,445.7,165.443,441.748,164.202z" + id="path263" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M287.498,146.767c0.745,0,1.502-0.112,2.25-0.347c5.103-1.604,10.325-3.058,15.521-4.324 c4.024-0.98,6.492-5.037,5.512-9.062s-5.038-6.492-9.062-5.512c-5.513,1.342-11.053,2.886-16.468,4.587 c-3.951,1.242-6.148,5.452-4.907,9.403C281.352,144.716,284.309,146.767,287.498,146.767z" + id="path265" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M336.329,136.611c34.172-3.796,68.126-0.496,100.923,9.809c0.748,0.234,1.505,0.347,2.25,0.347 c3.189,0,6.146-2.051,7.153-5.254c1.241-3.952-0.956-8.162-4.907-9.403c-34.797-10.933-70.824-14.435-107.076-10.406 c-4.117,0.457-7.083,4.165-6.626,8.282C328.504,134.102,332.21,137.07,336.329,136.611z" + id="path267" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M93.96,317.749c-8.302,1.74-16.615,3.911-24.708,6.454c-3.952,1.242-6.148,5.452-4.907,9.403 c1.007,3.204,3.964,5.254,7.153,5.254c0.745,0,1.502-0.112,2.25-0.347c7.628-2.396,15.464-4.443,23.288-6.083 c4.054-0.85,6.652-4.825,5.802-8.879S98.011,316.9,93.96,317.749z" + id="path269" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M223.502,338.859c3.189,0,6.147-2.051,7.153-5.254c1.241-3.952-0.956-8.162-4.907-9.403 c-32.073-10.076-65.331-13.842-98.844-11.188c-4.129,0.326-7.211,3.938-6.885,8.068s3.934,7.213,8.068,6.885 c31.591-2.499,62.935,1.048,93.165,10.546C222,338.748,222.757,338.859,223.502,338.859z" + id="path271" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M71.498,306.767c0.745,0,1.502-0.112,2.25-0.347c48.249-15.159,99.256-15.159,147.504,0 c3.952,1.24,8.162-0.956,9.403-4.907c1.241-3.952-0.956-8.162-4.907-9.403c-51.191-16.083-105.307-16.083-156.496,0 c-3.952,1.241-6.149,5.451-4.907,9.403C65.352,304.716,68.309,306.767,71.498,306.767z" + id="path273" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M71.498,274.859c0.745,0,1.502-0.112,2.25-0.347c27.681-8.697,56.411-12.412,85.399-11.037 c4.158,0.192,7.65-2.999,7.847-7.137c0.196-4.138-2.999-7.65-7.137-7.847c-30.756-1.456-61.236,2.483-90.605,11.71 c-3.952,1.242-6.149,5.452-4.907,9.403C65.352,272.81,68.309,274.859,71.498,274.859z" + id="path275" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M190.194,266.932c10.467,1.844,20.917,4.395,31.058,7.581c0.749,0.235,1.505,0.347,2.25,0.347 c3.189,0,6.147-2.051,7.153-5.254c1.241-3.952-0.956-8.162-4.907-9.403c-10.76-3.38-21.846-6.086-32.952-8.043 c-4.079-0.719-7.969,2.006-8.688,6.085C183.39,262.323,186.114,266.213,190.194,266.932z" + id="path277" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M118.678,185.702c-16.732,1.858-33.362,5.36-49.426,10.407c-3.952,1.241-6.148,5.451-4.907,9.403 c1.007,3.204,3.964,5.254,7.153,5.254c0.745,0,1.502-0.112,2.25-0.347c15.141-4.757,30.815-8.057,46.585-9.809 c4.117-0.457,7.083-4.165,6.626-8.282C126.503,188.212,122.788,185.244,118.678,185.702z" + id="path279" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M64.345,173.605c1.007,3.204,3.964,5.254,7.153,5.254c0.745,0,1.502-0.112,2.25-0.347 c32.797-10.305,66.752-13.604,100.923-9.809c4.116,0.46,7.825-2.509,8.282-6.626c0.458-4.117-2.509-7.825-6.626-8.282 c-36.253-4.027-72.278-0.526-107.075,10.406C65.3,165.444,63.104,169.654,64.345,173.605z" + id="path281" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> + <path + d="M71.498,146.767c0.745,0,1.502-0.112,2.25-0.347c5.103-1.604,10.325-3.058,15.521-4.324 c4.024-0.98,6.492-5.037,5.512-9.062s-5.038-6.492-9.062-5.512c-5.513,1.342-11.053,2.886-16.468,4.587 c-3.951,1.242-6.148,5.452-4.907,9.403C65.352,144.716,68.309,146.767,71.498,146.767z" + id="path283" + style="stroke:#ffffff;stroke-opacity:1;fill:#ffffff;fill-opacity:1" /> +</g> +</svg> diff --git a/site/src/main.rs b/site/src/main.rs index e7a11a969c037e00a796aafeff6258501ec15e9a..3520b3bd3c4dd083cea7c153cd36180312dff64f 100644 --- a/site/src/main.rs +++ b/site/src/main.rs @@ -1,3 +1,75 @@ -fn main() { - println!("Hello, world!"); +use http::handling::{methods::Method, routes::{Route, Data}, request::Request, response::{Response, Outcome, Status}, file_handlers::NamedFile}; + +fn static_files_handler(request: Request<>, _data: Data) -> Outcome<Response, Status, Data> { + let response = static_files(request.uri.raw_string().unwrap()); + let response = match response { + Ok(dat) => Response { + headers: vec![], + cookies: None, + status: Some(Status::Ok), + body: Box::new(dat), + }, + Err(_) => return Outcome::Failure(Status::NotFound), + }; + Outcome::Success(response) +} + +fn static_files(path: &str) -> Result<NamedFile, Status> { + NamedFile::open(("static/".to_string() + path).into()) +} + +fn index_handler(_request: Request, _data: Data) -> Outcome<Response, Status, Data> { + Outcome::Success(Response { headers: vec![], cookies: None, status: None, body: Box::new(index()) }) +} + +fn index() -> NamedFile { + NamedFile::open("templates/index.html".into()).unwrap() +} + +fn favicon_handler(_request: Request, _data: Data) -> Outcome<Response, Status, Data> { + let response = Response { + headers: vec![], + cookies: None, + status: None, + body: Box::new(NamedFile::open("/assets/favicon.svg".into()).unwrap()) + }; + Outcome::Success(response) +} + +#[tokio::main] +async fn main() { + let index_route = Route { + format: None, + handler: index_handler, + name: Some("index"), + uri: "", + method: Method::Get, + rank: 0, + }; + + let static_route = Route { + format: None, + handler: static_files_handler, + name: Some("static files"), + uri: "", + method: Method::Get, + rank: 0 + }; + + let favicon = Route { + format: None, + handler: favicon_handler, + name: Some("favicon"), + uri: "favicon.ico", + method: Method::Get, + rank: 0 + }; + + // http::build("127.0.0.1:8000") + http::build("127.0.0.1:8443", "127.0.0.1:8080") + .await + .mount("/", vec![index_route, favicon]) + .mount("/static", vec![static_route]) + .launch() + .await; } diff --git a/site/static/style.css b/site/static/style.css new file mode 100644 index 0000000000000000000000000000000000000000..27589ec6d20134a278d02f57fe10c5f40ea056e5 --- /dev/null +++ b/site/static/style.css @@ -0,0 +1,16 @@ +body { + background-color: #212121; + color: #ffffff; + font-family: + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Oxygen, + Ubuntu, + Cantarell, + "Open Sans", + "Helvetica Neue", + sans-serif; +} diff --git a/site/static/table.html b/site/static/table.html new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/site/templates/index.html b/site/templates/index.html new file mode 100644 index 0000000000000000000000000000000000000000..7dc2842858c99981c04ebbb86641ad3a0f15d7e6 --- /dev/null +++ b/site/templates/index.html @@ -0,0 +1,21 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <title>LMS - The Library Management System</title> + <link rel="stylesheet" href="/static/style.css" /> + </head> + <body> + <header> + <nav> + <div>LOGO</div> + <div> + <div>Dashboard</div> + <div>Books</div> + <div>Magazines</div> + <div>Newspapers</div> + </div> + </nav> + </header> + </body> +</html> diff --git a/small.csv b/small.csv new file mode 100644 index 0000000000000000000000000000000000000000..aa3809cbacfbe48e7c7ad0d29099295f648890c0 --- /dev/null +++ b/small.csv @@ -0,0 +1,20 @@ +Name, format, asdf +vnd.motorola.video,video/vnd.motorola.video,[Tom_McGinty] +vnd.motorola.videop,video/vnd.motorola.videop,[Tom_McGinty] +vnd.mpegurl,video/vnd.mpegurl,[Heiko_Recktenwald] +vnd.ms-playready.media.pyv,video/vnd.ms-playready.media.pyv,[Steve_DiAcetis] +vnd.nokia.interleaved-multimedia,video/vnd.nokia.interleaved-multimedia,[Petteri_Kangaslampi] +vnd.nokia.mp4vr,video/vnd.nokia.mp4vr,[Miska_M._Hannuksela] +vnd.nokia.videovoip,video/vnd.nokia.videovoip,[Nokia] +vnd.objectvideo,video/vnd.objectvideo,[John_Clark] +vnd.radgamettools.bink,video/vnd.radgamettools.bink,[Henrik_Andersson] +vnd.radgamettools.smacker,video/vnd.radgamettools.smacker,[Henrik_Andersson] +vnd.sealed.mpeg1,video/vnd.sealed.mpeg1,[David_Petersen] +vnd.sealed.mpeg4,video/vnd.sealed.mpeg4,[David_Petersen] +vnd.sealed.swf,video/vnd.sealed.swf,[David_Petersen] +vnd.sealedmedia.softseal.mov,video/vnd.sealedmedia.softseal.mov,[David_Petersen] +vnd.uvvu.mp4,video/vnd.uvvu.mp4,[Michael_A_Dolan] +vnd.youtube.yt,video/vnd.youtube.yt,[Google] +vnd.vivo,video/vnd.vivo,[John_Wolfe] +VP8,video/VP8,[RFC7741] +VP9,video/VP9,[RFC-ietf-payload-vp9-16] diff --git a/tree.txt b/tree.txt new file mode 100644 index 0000000000000000000000000000000000000000..05d432b7e346d3f283399b681f39d6cb0463c3fd --- /dev/null +++ b/tree.txt @@ -0,0 +1,44 @@ +. +├── core +│  ├── codegen +│  │  ├── Cargo.lock +│  │  ├── Cargo.toml +│  │  ├── src +│  │  │  └── lib.rs +│  ├── html +│  │  ├── Cargo.lock +│  │  ├── Cargo.toml +│  │  └── src +│  │    └── lib.rs +│  └── http +│  ├── Cargo.lock +│  ├── Cargo.toml +│  └── src +│    ├── handlers +│    │  ├── file_handlers.rs +│    │  ├── handlers.rs +│    │  └── mod.rs +│    ├── lib.rs +│    ├── routing +│    │  ├── methods.rs +│    │  ├── mod.rs +│    │  └── routes.rs +│    ├── setup.rs +│    ├── threading.rs +│    └── utils +│    └── mod.rs +├── README.md +├── site +│  ├── 404.html +│  ├── Cargo.lock +│  ├── Cargo.toml +│  ├── hello.css +│  ├── img.jpg +│  ├── src +│  │  └── main.rs +│  ├── static +│  │  └── hello.html +│  └── target +│  └── CACHEDIR.TAG +└── tree.txt +