#ifndef RFL_PARSING_VARIANTALTERNATIVEWRAPPER_HPP_ #define RFL_PARSING_VARIANTALTERNATIVEWRAPPER_HPP_ #include #include "../Field.hpp" #include "../Literal.hpp" #include "../internal/StringLiteral.hpp" #include "../internal/get_type_name.hpp" #include "../internal/has_tag_v.hpp" #include "../internal/remove_namespaces.hpp" namespace rfl::parsing { namespace vaw { template struct GetName {}; template struct GetName> { constexpr static internal::StringLiteral name_ = _name; }; template consteval auto make_tag() { if constexpr (internal::has_tag_v) { return typename T::Tag(); } else if constexpr (std::is_same_v, std::string>) { return Literal<"std::string">(); } else if constexpr (_remove_namespaces) { return Literal< internal::remove_namespaces()>()>(); } else { return Literal()>(); } } template using tag_t = std::invoke_result_t< decltype(make_tag>, _remove_namespaces>)>; } // namespace vaw template using VariantAlternativeWrapper = Field>::name_, T>; } // namespace rfl::parsing #endif