Skip to content

Commit b1d70a2

Browse files
committed
feat chaotic: lazy evaluate the IsStringEnum and make it a concept
Closes: #1163 Tests: протестировано CI commit_hash:2a29b238782c2d675c6947275bebfb73e6128e2e
1 parent bae84b6 commit b1d70a2

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

  • chaotic/include/userver/chaotic/sax_parser

chaotic/include/userver/chaotic/sax_parser/enum.hpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,21 @@ class IntEnumParser : private formats::json::parser::Subscriber<std::int64_t> {
5757
formats::json::parser::Subscriber<IntEnum>* subscriber_{nullptr};
5858
};
5959

60-
template <typename Enum, typename = void>
61-
struct IsStringEnum : std::false_type {};
62-
6360
template <typename Enum>
64-
struct IsStringEnum<Enum, utils::void_t<decltype(Convert(std::string_view{}, chaotic::convert::To<Enum>{}))>>
65-
: std::true_type {};
61+
concept IsStringEnum = requires { Convert(std::string_view{}, chaotic::convert::To<Enum>{}); };
6662

6763
} // namespace impl
6864

6965
template <typename Enum>
70-
std::enable_if_t<
71-
std::is_enum_v<Enum>,
72-
std::conditional_t<impl::IsStringEnum<Enum>::value, impl::StringEnumParser<Enum>, impl::IntEnumParser<Enum>>>
73-
ParserOf(Type<Enum>);
66+
requires std::is_enum_v<Enum>
67+
auto ParserOf(Type<Enum>)
68+
{
69+
if constexpr (impl::IsStringEnum<Enum>) {
70+
return impl::StringEnumParser<Enum>{};
71+
} else {
72+
return impl::IntEnumParser<Enum>{};
73+
}
74+
}
7475

7576
} // namespace chaotic::sax
7677

0 commit comments

Comments
 (0)