/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_dom_MimeType_h #define mozilla_dom_MimeType_h #include "mozilla/TextUtils.h" #include "mozilla/UniquePtr.h" #include "nsTHashMap.h" #include "nsTArray.h" template struct HashKeyType; template <> struct HashKeyType { using HashType = nsStringHashKey; }; template <> struct HashKeyType { using HashType = nsCStringHashKey; }; template class TMimeType final { private: class ParameterValue : public nsTString { public: bool mRequiresQuoting; ParameterValue() : mRequiresQuoting(false) {} }; nsTString mType; nsTString mSubtype; nsTHashMap::HashType, ParameterValue> mParameters; nsTArray> mParameterNames; public: TMimeType(const nsTSubstring& aType, const nsTSubstring& aSubtype) : mType(aType), mSubtype(aSubtype) {} static mozilla::UniquePtr> Parse( const nsTSubstring& aStr); void Serialize(nsTSubstring& aStr) const; // Returns the `/` void GetFullType(nsTSubstring& aStr) const; // @param aName - the name of the parameter // @return true if the parameter name is found, false otherwise. bool HasParameter(const nsTSubstring& aName) const; // @param aName - the name of the parameter // @param aOutput - will hold the value of the parameter (quoted if necessary) // @param aAppend - if true, the method will append to the string; // otherwise the string is truncated before appending. // @return true if the parameter name is found, false otherwise. bool GetParameterValue(const nsTSubstring& aName, nsTSubstring& aOutput, bool aAppend = false) const; // @param aName - the name of the parameter // @param aValue - the value of the parameter void SetParameterValue(const nsTSubstring& aName, const nsTSubstring& aValue); }; using MimeType = TMimeType; using CMimeType = TMimeType; #endif // mozilla_dom_MimeType_h