/* * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _STRING_FORMAT_H_ #define _STRING_FORMAT_H_ #include "Define.h" #include #include #include namespace Acore { /// Default AC string format function. template inline std::string StringFormat(Format&& fmt, Args&& ... args) { try { return fmt::sprintf(std::forward(fmt), std::forward(args)...); } catch (const fmt::format_error& formatError) { std::string error = "An error occurred formatting string \"" + std::string(fmt) + "\" : " + std::string(formatError.what()); return error; } } template using FormatString = fmt::format_string; // Default string format function. template inline std::string StringFormatFmt(FormatString fmt, Args&&... args) { try { return fmt::format(fmt, std::forward(args)...); } catch (std::exception const& e) { return fmt::format("Wrong format occurred ({}). Fmt string: '{}'", e.what(), fmt.get()); } } /// Returns true if the given char pointer is null. inline bool IsFormatEmptyOrNull(char const* fmt) { return fmt == nullptr; } /// Returns true if the given std::string is empty. inline bool IsFormatEmptyOrNull(std::string_view fmt) { return fmt.empty(); } } namespace Acore::String { template AC_COMMON_API Str Trim(const Str& s, const std::locale& loc = std::locale()); AC_COMMON_API std::string TrimRightInPlace(std::string& str); AC_COMMON_API std::string AddSuffixIfNotExists(std::string str, const char suffix); } // Add support enum for fmt //template , int> = 0> template )> auto format_as(T f) { return fmt::underlying(f); } #endif