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