| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- //
- // stringizer.h
- // serializer
- //
- // Created by Sam Jaffe on 3/15/23.
- //
- #pragma once
- #include <string>
- #include <string_view>
- #include <type_traits>
- #include <magic_enum/magic_enum.hpp>
- #include <magic_enum/magic_enum_flags.hpp>
- #include <serializer/traits.h>
- namespace serializer {
- using ::std::to_string;
- inline std::string to_string(char const * str) { return str; }
- inline std::string to_string(std::string const & str) { return str; }
- inline std::string to_string(std::string_view str) { return std::string(str); }
- template <typename T> std::string to_string(T const & elem) {
- if constexpr (detail::is_dereferencable_v<T>) {
- using ::serializer::to_string;
- return elem ? to_string(*elem) : "nil";
- } else if constexpr (std::is_enum_v<T>) {
- if constexpr (magic_enum::detail::subtype_v<T> ==
- magic_enum::detail::enum_subtype::flags) {
- return std::string(magic_enum::enum_flags_name<T>(elem));
- } else {
- return std::string(magic_enum::enum_name<T>(elem));
- }
- } else {
- static_assert(detail::always_false<T>{});
- }
- }
- }
|