// Description: Printable concept for native types
#ifndef PASTELSYS_NATIVE_PRINTABLE_H
#define PASTELSYS_NATIVE_PRINTABLE_H
#include "pastel/sys/printable/printable_concept.h"
#include <sstream>
#include <type_traits>
namespace Pastel
{
// Printable
template <Arithmetic_Concept Type>
std::string asString(Type that)
{
std::stringstream stream;
stream << that;
std::string text;
stream >> text;
return text;
}
template <typename Type>
requires (
std::is_same_v<Type, char> ||
std::is_same_v<Type, wchar_t> ||
std::is_same_v<Type, char16_t> ||
std::is_same_v<Type, char32_t>)
std::string asString(const Type* that)
{
return {that};
}
template <typename Type>
requires (std::is_enum<Type>::value)
std::string asString(Type that)
{
using Pastel::asString;
// Reduce enums to integers.
return asString((std::underlying_type_t<Type>)that);
}
inline std::string asString(std::string that)
{
return that;
}
}
#endif