userver: userver/ydb/io/primitives.hpp Source File
Loading...
Searching...
No Matches
primitives.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/ydb/io/primitives.hpp
4/// @brief YDB primitive type serialization traits
5
6#include <optional>
7#include <string>
8
9#include <userver/formats/json_fwd.hpp>
10
11#include <userver/ydb/io/traits.hpp>
12#include <userver/ydb/types.hpp>
13
14namespace boost::uuids {
15struct uuid;
16}
17
18USERVER_NAMESPACE_BEGIN
19
20namespace ydb {
21
22template <typename PrimitiveTrait>
24 static std::optional<typename PrimitiveTrait::Type> Parse(NYdb::TValueParser& parser, const ParseContext& context);
25
26 static void Write(
27 NYdb::TValueBuilderBase<NYdb::TValueBuilder>& builder,
28 const std::optional<typename PrimitiveTrait::Type>& value
29 );
30
31 static void Write(
32 NYdb::TValueBuilderBase<NYdb::TParamValueBuilder>& builder,
33 const std::optional<typename PrimitiveTrait::Type>& value
34 );
35
36 static NYdb::TType MakeType();
37};
38
39template <typename PrimitiveTrait>
41 static typename PrimitiveTrait::Type Parse(NYdb::TValueParser& parser, const ParseContext& context);
42
43 static void Write(
44 NYdb::TValueBuilderBase<NYdb::TValueBuilder>& builder,
45 const typename PrimitiveTrait::Type& value
46 );
47
48 static void Write(
49 NYdb::TValueBuilderBase<NYdb::TParamValueBuilder>& builder,
50 const typename PrimitiveTrait::Type& value
51 );
52
53 static NYdb::TType MakeType();
54};
55
56struct BoolTrait {
57 using Type = bool;
58 static Type Parse(const NYdb::TValueParser& value_parser);
59 template <typename Builder>
60 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
61};
62
63struct Int8Trait {
64 using Type = std::int8_t;
65 static Type Parse(const NYdb::TValueParser& value_parser);
66 template <typename Builder>
67 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
68};
69
70struct Uint8Trait {
71 using Type = std::uint8_t;
72 static Type Parse(const NYdb::TValueParser& value_parser);
73 template <typename Builder>
74 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
75};
76
77struct Int16Trait {
78 using Type = std::int16_t;
79 static Type Parse(const NYdb::TValueParser& value_parser);
80 template <typename Builder>
81 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
82};
83
85 using Type = std::uint16_t;
86 static Type Parse(const NYdb::TValueParser& value_parser);
87 template <typename Builder>
88 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
89};
90
91struct Int32Trait {
92 using Type = std::int32_t;
93 static Type Parse(const NYdb::TValueParser& value_parser);
94 template <typename Builder>
95 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
96};
97
99 using Type = std::uint32_t;
100 static Type Parse(const NYdb::TValueParser& value_parser);
101 template <typename Builder>
102 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
103};
104
106 using Type = std::int64_t;
107 static Type Parse(const NYdb::TValueParser& value_parser);
108 template <typename Builder>
109 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
110};
111
113 using Type = std::uint64_t;
114 static Type Parse(const NYdb::TValueParser& value_parser);
115 template <typename Builder>
116 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
117};
118
120 using Type = double;
121 static Type Parse(const NYdb::TValueParser& value_parser);
122 template <typename Builder>
123 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
124};
125
127 using Type = std::string;
128 static Type Parse(const NYdb::TValueParser& value_parser);
129 template <typename Builder>
130 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
131};
132
133struct Utf8Trait {
134 using Type = Utf8;
135 static Type Parse(const NYdb::TValueParser& value_parser);
136 template <typename Builder>
137 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
138};
139
141 using Type = Timestamp;
142 static Type Parse(const NYdb::TValueParser& value_parser);
143 template <typename Builder>
144 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
145};
146
147struct UuidTrait {
148 using Type = boost::uuids::uuid;
149 static Type Parse(const NYdb::TValueParser& value_parser);
150 template <typename Builder>
151 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
152};
153
154struct JsonTrait {
155 using Type = formats::json::Value;
156 static Type Parse(const NYdb::TValueParser& value_parser);
157 template <typename Builder>
158 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
159};
160
162 using Type = JsonDocument;
163 static Type Parse(const NYdb::TValueParser& value_parser);
164 template <typename Builder>
165 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
166};
167
168template <>
170
171template <>
173
174template <>
175struct ValueTraits<std::optional<JsonTrait::Type>> : OptionalPrimitiveTraits<JsonTrait> {};
176
177template <>
178struct ValueTraits<formats::json::Value> : PrimitiveTraits<JsonTrait> {};
179
180template <>
182
183template <>
185
186template <>
187struct ValueTraits<std::optional<UuidTrait::Type>> : OptionalPrimitiveTraits<UuidTrait> {};
188
189template <>
191
192template <>
193struct ValueTraits<std::optional<Utf8Trait::Type>> : OptionalPrimitiveTraits<Utf8Trait> {};
194
195template <>
197
198template <>
200
201template <>
203
204template <>
206
207template <>
209
210template <>
212
213template <>
215
216template <>
217struct ValueTraits<std::optional<Int64Trait::Type>> : OptionalPrimitiveTraits<Int64Trait> {};
218
219template <>
221
222template <>
224
225template <>
227
228template <>
229struct ValueTraits<std::optional<Int32Trait::Type>> : OptionalPrimitiveTraits<Int32Trait> {};
230
231template <>
233
234template <>
236
237template <>
239
240template <>
241struct ValueTraits<std::optional<Int16Trait::Type>> : OptionalPrimitiveTraits<Int16Trait> {};
242
243template <>
245
246template <>
247struct ValueTraits<std::optional<Uint8Trait::Type>> : OptionalPrimitiveTraits<Uint8Trait> {};
248
249template <>
251
252template <>
253struct ValueTraits<std::optional<Int8Trait::Type>> : OptionalPrimitiveTraits<Int8Trait> {};
254
255template <>
257
258template <>
259struct ValueTraits<std::optional<BoolTrait::Type>> : OptionalPrimitiveTraits<BoolTrait> {};
260
261template <>
263
264} // namespace ydb
265
266USERVER_NAMESPACE_END