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 Int32Trait {
61 using Type = std::int32_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
68 using Type = std::uint32_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 Int64Trait {
75 using Type = std::int64_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::uint64_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
89 using Type = double;
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::string;
97 static Type Parse(const NYdb::TValueParser& value_parser);
98 template <typename Builder>
99 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
100};
101
102struct Utf8Trait {
103 using Type = Utf8;
104 static Type Parse(const NYdb::TValueParser& value_parser);
105 template <typename Builder>
106 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
107};
108
110 using Type = Timestamp;
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
116struct UuidTrait {
117 using Type = boost::uuids::uuid;
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
123struct JsonTrait {
124 using Type = formats::json::Value;
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
131 using Type = JsonDocument;
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
137template <>
139
140template <>
142
143template <>
144struct ValueTraits<std::optional<JsonTrait::Type>> : OptionalPrimitiveTraits<JsonTrait> {};
145
146template <>
148
149template <>
151
152template <>
154
155template <>
156struct ValueTraits<std::optional<UuidTrait::Type>> : OptionalPrimitiveTraits<UuidTrait> {};
157
158template <>
160
161template <>
162struct ValueTraits<std::optional<Utf8Trait::Type>> : OptionalPrimitiveTraits<Utf8Trait> {};
163
164template <>
166
167template <>
169
170template <>
172
173template <>
175
176template <>
178
179template <>
181
182template <>
184
185template <>
186struct ValueTraits<std::optional<Int64Trait::Type>> : OptionalPrimitiveTraits<Int64Trait> {};
187
188template <>
190
191template <>
193
194template <>
196
197template <>
198struct ValueTraits<std::optional<Int32Trait::Type>> : OptionalPrimitiveTraits<Int32Trait> {};
199
200template <>
202
203template <>
204struct ValueTraits<std::optional<BoolTrait::Type>> : OptionalPrimitiveTraits<BoolTrait> {};
205
206template <>
208
209} // namespace ydb
210
211USERVER_NAMESPACE_END