#ifndef BASE_I18N_MESSAGE_FORMATTER_H_
#define BASE_I18N_MESSAGE_FORMATTER_H_
#include <stdint.h>
#include <memory>
#include <string>
#include <string_view>
#include "base/i18n/base_i18n_export.h"
#include "third_party/icu/source/common/unicode/uversion.h"
U_NAMESPACE_BEGIN
class Formattable;
U_NAMESPACE_END
namespace base {
class Time;
namespace i18n {
class MessageFormatter;
namespace internal {
class BASE_I18N_EXPORT MessageArg {
public:
MessageArg(const char* s);
MessageArg(std::string_view s);
MessageArg(const std::string& s);
MessageArg(const std::u16string& s);
MessageArg(int i);
MessageArg(int64_t i);
MessageArg(double d);
MessageArg(const Time& t);
MessageArg(const MessageArg&) = delete;
MessageArg& operator=(const MessageArg&) = delete;
~MessageArg();
private:
friend class base::i18n::MessageFormatter;
MessageArg();
bool has_value(int* count) const;
std::unique_ptr<icu::Formattable> formattable;
};
}
class BASE_I18N_EXPORT MessageFormatter {
public:
MessageFormatter() = delete;
MessageFormatter(const MessageFormatter&) = delete;
MessageFormatter& operator=(const MessageFormatter&) = delete;
static std::u16string FormatWithNamedArgs(
std::u16string_view msg,
std::string_view name0 = std::string_view(),
const internal::MessageArg& arg0 = internal::MessageArg(),
std::string_view name1 = std::string_view(),
const internal::MessageArg& arg1 = internal::MessageArg(),
std::string_view name2 = std::string_view(),
const internal::MessageArg& arg2 = internal::MessageArg(),
std::string_view name3 = std::string_view(),
const internal::MessageArg& arg3 = internal::MessageArg(),
std::string_view name4 = std::string_view(),
const internal::MessageArg& arg4 = internal::MessageArg(),
std::string_view name5 = std::string_view(),
const internal::MessageArg& arg5 = internal::MessageArg(),
std::string_view name6 = std::string_view(),
const internal::MessageArg& arg6 = internal::MessageArg());
static std::u16string FormatWithNumberedArgs(
std::u16string_view msg,
const internal::MessageArg& arg0 = internal::MessageArg(),
const internal::MessageArg& arg1 = internal::MessageArg(),
const internal::MessageArg& arg2 = internal::MessageArg(),
const internal::MessageArg& arg3 = internal::MessageArg(),
const internal::MessageArg& arg4 = internal::MessageArg(),
const internal::MessageArg& arg5 = internal::MessageArg(),
const internal::MessageArg& arg6 = internal::MessageArg());
};
}
}
#endif