6#include <ydb-cpp-sdk/client/value/value.h>
10#include <userver/ydb/io/traits.hpp>
12USERVER_NAMESPACE_BEGIN
17struct GenericOptionalValueTraits {
18 static std::optional<T> Parse(NYdb::TValueParser& parser,
const ParseContext& context) {
19 std::optional<T> result;
20 parser.OpenOptional();
21 if (!parser.IsNull()) {
22 result.emplace(
ValueTraits<T>::Parse(parser, context));
24 parser.CloseOptional();
28 template <
typename Builder,
typename U =
const std::optional<T>&>
29 static void Write(NYdb::TValueBuilderBase<Builder>& builder, U&& value) {
30 if (value.has_value()) {
31 builder.BeginOptional();
32 ValueTraits<T>::Write(builder, std::forward<U>(value).value());
33 builder.EndOptional();
39 static NYdb::TType MakeType() {
40 NYdb::TTypeBuilder builder;
42 return builder.Build();