// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_BASE_NET_STRING_UTIL_H__
#define NET_BASE_NET_STRING_UTIL_H__

#include <string>

#include "base/strings/string_piece_forward.h"
#include "net/base/net_export.h"

// String conversion functions.  By default, they're implemented with ICU, but
// when building with USE_ICU_ALTERNATIVES, they use platform functions instead.

namespace net {

extern const char* const kCharsetLatin1;

// Converts |text| using |charset| to UTF-8, and writes it to |output|.
// On failure, returns false and |output| is cleared.
bool ConvertToUtf8(base::StringPiece text,
                   const char* charset,
                   std::string* output);

// Converts |text| using |charset| to UTF-8, normalizes the result, and writes
// it to |output|.  On failure, returns false and |output| is cleared.
bool ConvertToUtf8AndNormalize(base::StringPiece text,
                               const char* charset,
                               std::string* output);

// Converts |text| using |charset| to UTF-16, and writes it to |output|.
// On failure, returns false and |output| is cleared.
bool ConvertToUTF16(base::StringPiece text,
                    const char* charset,
                    std::u16string* output);

// Converts |text| using |charset| to UTF-16, and writes it to |output|.
// Any characters that can not be converted are replaced with U+FFFD.
bool ConvertToUTF16WithSubstitutions(base::StringPiece text,
                                     const char* charset,
                                     std::u16string* output);

// Converts |str| to uppercase using the default locale, and writes it to
// |output|. On failure returns false and |output| is cleared.
NET_EXPORT_PRIVATE bool ToUpper(base::StringPiece16 str,
                                std::u16string* output);

}  // namespace net

#endif  // NET_BASE_NET_STRING_UTIL_H__
