userver: userver/ydb/io/structs.hpp File Reference
Loading...
Searching...
No Matches
structs.hpp File Reference

Detailed Description

YDB struct serialization traits and customization.

Definition in file structs.hpp.

Go to the source code of this file.

#include <ydb-cpp-sdk/client/result/result.h>
#include <ydb-cpp-sdk/client/value/value.h>
#include <cstddef>
#include <memory>
#include <optional>
#include <string_view>
#include <tuple>
#include <type_traits>
#include <fmt/ranges.h>
#include <boost/pfr/core.hpp>
#include <boost/pfr/core_name.hpp>
#include <userver/utils/assert.hpp>
#include <userver/utils/constexpr_indices.hpp>
#include <userver/utils/enumerate.hpp>
#include <userver/utils/forward_like.hpp>
#include <userver/utils/trivial_map.hpp>
#include <userver/ydb/exceptions.hpp>
#include <userver/ydb/impl/cast.hpp>
#include <userver/ydb/io/generic_optional.hpp>
#include <userver/ydb/io/traits.hpp>
+ This graph shows which files directly or indirectly include this file:

Classes

struct  ydb::CustomMemberName
 
struct  ydb::StructMemberNames< N >
 Specifies C++ to YDB struct member names mapping. It's enough to only specify the names that are different between C++ and YDB. More...
 

Functions

 ydb::StructMemberNames () -> StructMemberNames< 0 >
 
template<std::size_t N>
 ydb::StructMemberNames (CustomMemberName(&&)[N]) -> StructMemberNames< N >
 

Variables

template<typename T>
constexpr auto ydb::kStructMemberNames = impl::DetectStructMemberNames<T>()
 Customization point for YDB serialization of structs.
 

Variable Documentation

◆ kStructMemberNames

template<typename T>
auto ydb::kStructMemberNames = impl::DetectStructMemberNames<T>()
inlineconstexpr

Customization point for YDB serialization of structs.

In order to get serialization for a struct, you need to define kYdbMemberNames inside it:

Field names can be overridden:

namespace struct_test {
struct MyStructCustomNames {
static constexpr ydb::StructMemberNames kYdbMemberNames{{
{"custom_key", "key"},
{"custom_value_str", "value_str"},
}};
std::string custom_key;
std::string custom_value_str;
std::int32_t value_int;
};
} // namespace struct_test

To enable YDB serialization for an external struct, specialize ydb::kStructMemberNames for it:

namespace struct_test {
struct MyStructExternalSpecialization {
std::string key;
std::string value_str;
std::int32_t value_int;
bool operator==(const MyStructExternalSpecialization&) const = default;
};
} // namespace struct_test
template <>
Warning
The struct must not reside in an anonymous namespace, otherwise struct member names detection will break.

For extra fields on C++ side, parsing throws ydb::ParseError. For extra fields on YDB side, parsing throws ydb::ParseError.

Definition at line 109 of file structs.hpp.