aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/string/enum-inl.h
diff options
context:
space:
mode:
authorbabenko <babenko@yandex-team.com>2023-03-14 09:33:31 +0300
committerbabenko <babenko@yandex-team.com>2023-03-14 09:33:31 +0300
commite10767756146ca0d8e890326e20671aed5182e2b (patch)
tree0d15dded16242ddb4d7b64f5e1d21d425742234e /library/cpp/yt/string/enum-inl.h
parent9aa65dc165f24925a281f89c975cc5117823934f (diff)
downloadydb-e10767756146ca0d8e890326e20671aed5182e2b.tar.gz
YT-18571: Refactor YT enums to make them Arcadia-friendly
Diffstat (limited to 'library/cpp/yt/string/enum-inl.h')
-rw-r--r--library/cpp/yt/string/enum-inl.h25
1 files changed, 8 insertions, 17 deletions
diff --git a/library/cpp/yt/string/enum-inl.h b/library/cpp/yt/string/enum-inl.h
index 7ce7d2a350..7e6785efb4 100644
--- a/library/cpp/yt/string/enum-inl.h
+++ b/library/cpp/yt/string/enum-inl.h
@@ -27,14 +27,8 @@ void FormatUnknownEnumValue(
template <class T>
std::optional<T> TryParseEnum(TStringBuf value)
{
- static_assert(TEnumTraits<T>::IsEnum);
-
auto tryFromString = [] (TStringBuf value) -> std::optional<T> {
- T result;
- if (auto ok = TEnumTraits<T>::FindValueByLiteral(DecodeEnumValue(value), &result)) {
- return result;
- }
- return {};
+ return TEnumTraits<T>::FindValueByLiteral(DecodeEnumValue(value));
};
if constexpr (TEnumTraits<T>::IsBitEnum) {
@@ -65,28 +59,25 @@ T ParseEnum(TStringBuf value)
template <class T>
void FormatEnum(TStringBuilderBase* builder, T value, bool lowerCase)
{
- static_assert(TEnumTraits<T>::IsEnum);
-
auto formatScalarValue = [builder, lowerCase] (T value) {
- auto* literal = TEnumTraits<T>::FindLiteralByValue(value);
- if (!literal) {
- YT_VERIFY(!TEnumTraits<T>::IsBitEnum);
+ auto optionalLiteral = TEnumTraits<T>::FindLiteralByValue(value);
+ if (!optionalLiteral) {
NYT::NDetail::FormatUnknownEnumValue(
builder,
TEnumTraits<T>::GetTypeName(),
- static_cast<typename TEnumTraits<T>::TUnderlying>(value));
+ ToUnderlying(value));
return;
}
if (lowerCase) {
- CamelCaseToUnderscoreCase(builder, *literal);
+ CamelCaseToUnderscoreCase(builder, *optionalLiteral);
} else {
- builder->AppendString(*literal);
+ builder->AppendString(*optionalLiteral);
}
};
if constexpr (TEnumTraits<T>::IsBitEnum) {
- if (auto* literal = TEnumTraits<T>::FindLiteralByValue(value)) {
+ if (TEnumTraits<T>::FindLiteralByValue(value)) {
formatScalarValue(value);
return;
}
@@ -106,7 +97,7 @@ void FormatEnum(TStringBuilderBase* builder, T value, bool lowerCase)
}
template <class T>
-TString FormatEnum(T value, typename TEnumTraits<T>::TType*)
+TString FormatEnum(T value)
{
TStringBuilder builder;
FormatEnum(&builder, value, /*lowerCase*/ true);