#ifndef _UTIL_HPP #define _UTIL_HPP #include <string> #include <string_view> #include <vector> #include <tuple> #include <sstream> #include <iomanip> #include <cstdint> namespace dpp { class user; } namespace Util { uint32_t get_color_of_user(const dpp::user& user); std::vector<std::string_view> split_str(std::string_view s, char delimiter, size_t times); std::string b64encode(const void* data, const size_t &len); std::string b64decode(const void* data, const size_t &len); void point_to_comma(std::string&); unsigned str_to_color(std::string); template <typename T> std::string to_string_with_precision(T a_value, int n = 6) { std::ostringstream out; out.precision(n); out << std::fixed << a_value; return out.str(); } template<typename intT> std::string int_as_hex(intT i) { std::ostringstream sstream; sstream << std::hex << i; return std::move(sstream).str(); } inline char hex_as_byte(char ch) { if (ch >= '0' && ch <= '9') return ch - '0'; if (ch >= 'A' && ch <= 'F') return ch - 'A' + 10; if (ch >= 'a' && ch <= 'f') return ch - 'a' + 10; return 0; } template<typename intT> intT hex_as_int(std::string_view i) { intT fres = 0; for (auto c : i) { fres <<= 4; fres |= hex_as_byte(c); } return fres; }; inline std::string b64encode(std::string_view str) { return b64encode(str.data(), str.size()); } inline std::string b64decode(std::string_view str64) { return b64decode(str64.data(), str64.size()); } } #endif // _UTIL_HPP