3#include <ydb-cpp-sdk/client/value/value.h>
7#include <userver/ydb/io/traits.hpp>
14struct GenericOptionalValueTraits {
15 static std::optional<T> Parse(NYdb::TValueParser& parser,
const ParseContext& context) {
16 std::optional<T> result;
17 parser.OpenOptional();
18 if (!parser.IsNull()) {
19 result.emplace(
ValueTraits<T>::Parse(parser, context));
21 parser.CloseOptional();
25 template <
typename Builder,
typename U =
const std::optional<T>&>
26 static void Write(NYdb::TValueBuilderBase<Builder>& builder, U&& value) {
27 if (value.has_value()) {
28 builder.BeginOptional();
29 ValueTraits<T>::Write(builder, std::forward<U>(value).value());
30 builder.EndOptional();
36 static NYdb::TType MakeType() {
37 NYdb::TTypeBuilder builder;
39 return builder.Build();