// 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_