Source code

Revision control

Copy as Markdown

Other Tools

/* 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 nsFmtCString_h_
#define nsFmtCString_h_
#include "fmt/format.h"
#include "fmt/xchar.h"
#include "nsString.h"
/**
* nsTFmtString lets you create a nsTString using a C++20-style format
* string. For example:
*
* NS_WARNING(nsFmtCString("Unexpected value: {}", 13.917).get());
* NS_WARNING(nsFmtString(u"Unexpected value: {}", u"weird").get());
*
* nsTFmtString has a small built-in auto-buffer. For larger strings, it
* will allocate on the heap.
*
* See also nsTSubstring::AppendFmt().
*
* Note also that for one-off C strings you can also use fmt::format() directly:
*
* NS_WARNING(std::format("Unexpected value: {}", 13.917).c_str());
*
*/
template <typename T>
class nsTFmtString : public nsTAutoStringN<T, 16> {
public:
template <typename... Args>
explicit nsTFmtString(
fmt::basic_format_string<T, std::type_identity_t<Args>...> aFormatStr,
Args&&... aArgs) {
this->AppendFmt(aFormatStr, std::forward<Args>(aArgs)...);
}
};
template <typename Char>
struct fmt::formatter<nsTFmtString<Char>, Char>
: fmt::formatter<nsTString<Char>, Char> {};
#endif // !defined(nsFmtString_h___)