diff options
author | babenko <babenko@yandex-team.com> | 2023-03-14 09:33:31 +0300 |
---|---|---|
committer | babenko <babenko@yandex-team.com> | 2023-03-14 09:33:31 +0300 |
commit | e10767756146ca0d8e890326e20671aed5182e2b (patch) | |
tree | 0d15dded16242ddb4d7b64f5e1d21d425742234e /library/cpp/yt/string/enum-inl.h | |
parent | 9aa65dc165f24925a281f89c975cc5117823934f (diff) | |
download | ydb-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.h | 25 |
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); |