| // Copyright 2014 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef LIBBRILLO_BRILLO_MIME_UTILS_H_ |
| #define LIBBRILLO_BRILLO_MIME_UTILS_H_ |
| |
| #include <string> |
| #include <utility> |
| #include <vector> |
| |
| #include <base/compiler_specific.h> |
| #include <base/macros.h> |
| #include <brillo/brillo_export.h> |
| |
| namespace brillo { |
| namespace mime { |
| |
| namespace types { |
| // Main MIME type categories |
| BRILLO_EXPORT extern const char kApplication[]; // application |
| BRILLO_EXPORT extern const char kAudio[]; // audio |
| BRILLO_EXPORT extern const char kImage[]; // image |
| BRILLO_EXPORT extern const char kMessage[]; // message |
| BRILLO_EXPORT extern const char kMultipart[]; // multipart |
| BRILLO_EXPORT extern const char kText[]; // test |
| BRILLO_EXPORT extern const char kVideo[]; // video |
| } // namespace types |
| |
| namespace parameters { |
| // Common MIME parameters |
| BRILLO_EXPORT extern const char kCharset[]; // charset=... |
| } // namespace parameters |
| |
| namespace image { |
| // Common image MIME types |
| BRILLO_EXPORT extern const char kJpeg[]; // image/jpeg |
| BRILLO_EXPORT extern const char kPng[]; // image/png |
| BRILLO_EXPORT extern const char kBmp[]; // image/bmp |
| BRILLO_EXPORT extern const char kTiff[]; // image/tiff |
| BRILLO_EXPORT extern const char kGif[]; // image/gif |
| } // namespace image |
| |
| namespace text { |
| // Common text MIME types |
| BRILLO_EXPORT extern const char kPlain[]; // text/plain |
| BRILLO_EXPORT extern const char kHtml[]; // text/html |
| BRILLO_EXPORT extern const char kXml[]; // text/xml |
| } // namespace text |
| |
| namespace application { |
| // Common application MIME types |
| // application/octet-stream |
| BRILLO_EXPORT extern const char kOctet_stream[]; |
| // application/json |
| BRILLO_EXPORT extern const char kJson[]; |
| // application/x-www-form-urlencoded |
| BRILLO_EXPORT extern const char kWwwFormUrlEncoded[]; |
| // application/x-protobuf |
| BRILLO_EXPORT extern const char kProtobuf[]; |
| } // namespace application |
| |
| namespace multipart { |
| // Common multipart MIME types |
| // multipart/form-data |
| BRILLO_EXPORT extern const char kFormData[]; |
| // multipart/mixed |
| BRILLO_EXPORT extern const char kMixed[]; |
| } // namespace multipart |
| |
| using Parameters = std::vector<std::pair<std::string, std::string>>; |
| |
| // Combine a MIME type, subtype and parameters into a MIME string. |
| // e.g. Combine("text", "plain", {{"charset", "utf-8"}}) will give: |
| // "text/plain; charset=utf-8" |
| BRILLO_EXPORT std::string Combine(const std::string& type, |
| const std::string& subtype, |
| const Parameters& parameters = {}) |
| WARN_UNUSED_RESULT; |
| |
| // Splits a MIME string into type and subtype. |
| // "text/plain;charset=utf-8" => ("text", "plain") |
| BRILLO_EXPORT bool Split(const std::string& mime_string, |
| std::string* type, |
| std::string* subtype); |
| |
| // Splits a MIME string into type, subtype, and parameters. |
| // "text/plain;charset=utf-8" => ("text", "plain", {{"charset","utf-8"}}) |
| BRILLO_EXPORT bool Split(const std::string& mime_string, |
| std::string* type, |
| std::string* subtype, |
| Parameters* parameters); |
| |
| // Returns the MIME type from MIME string. |
| // "text/plain;charset=utf-8" => "text" |
| BRILLO_EXPORT std::string GetType(const std::string& mime_string); |
| |
| // Returns the MIME sub-type from MIME string. |
| // "text/plain;charset=utf-8" => "plain" |
| BRILLO_EXPORT std::string GetSubtype(const std::string& mime_string); |
| |
| // Returns the MIME parameters from MIME string. |
| // "text/plain;charset=utf-8" => {{"charset","utf-8"}} |
| BRILLO_EXPORT Parameters GetParameters(const std::string& mime_string); |
| |
| // Removes parameters from a MIME string |
| // "text/plain;charset=utf-8" => "text/plain" |
| BRILLO_EXPORT std::string RemoveParameters(const std::string& mime_string) |
| WARN_UNUSED_RESULT; |
| |
| // Appends a parameter to a MIME string. |
| // "text/plain" => "text/plain; charset=utf-8" |
| BRILLO_EXPORT std::string AppendParameter(const std::string& mime_string, |
| const std::string& paramName, |
| const std::string& paramValue) |
| WARN_UNUSED_RESULT; |
| |
| // Returns the value of a parameter on a MIME string (empty string if missing). |
| // ("text/plain;charset=utf-8","charset") => "utf-8" |
| BRILLO_EXPORT std::string GetParameterValue(const std::string& mime_string, |
| const std::string& paramName); |
| |
| } // namespace mime |
| } // namespace brillo |
| |
| #endif // LIBBRILLO_BRILLO_MIME_UTILS_H_ |