#pragma once #include #include #include #include namespace sp { template ::value, bool> = true> inline std::string PrintData(const T& a_Data); template ::value, bool> = true> inline std::string PrintData(T a_Data) { return std::to_string(a_Data); } template <> inline std::string PrintData(const std::string& a_Data) { return "\"" + a_Data + "\""; } template std::string PrintData(const std::pair& a_Data); template std::string PrintData(const std::map& a_Data); template std::string PrintData(const std::vector& a_Data); template std::string PrintData(const std::pair& a_Data) { return "{" + PrintData(a_Data.first) + " => " + PrintData(a_Data.second) + "}"; } template std::string PrintData(const std::map& a_Data) { std::string result = "{"; for (const auto& pair : a_Data) { result += PrintData(pair) + ", "; } return result.substr(0, result.size() - 2) + "}"; } template std::string PrintData(const std::vector& a_Data) { std::string result = "{"; for (const T& value : a_Data) { result += PrintData(value) + ", "; } return result.substr(0, result.size() - 2) + "}"; } } // namespace sp