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
11USERVER_NAMESPACE_BEGIN
12
13namespace ydb {
14
15template <typename PrimitiveTrait>
17 static std::optional<typename PrimitiveTrait::Type> Parse(
18 NYdb::TValueParser& parser, const ParseContext& context);
19
20 static void Write(NYdb::TValueBuilderBase<NYdb::TValueBuilder>& builder,
21 const std::optional<typename PrimitiveTrait::Type>& value);
22
23 static void Write(NYdb::TValueBuilderBase<NYdb::TParamValueBuilder>& builder,
24 const std::optional<typename PrimitiveTrait::Type>& value);
25
26 static NYdb::TType MakeType();
27};
28
29template <typename PrimitiveTrait>
30struct PrimitiveTraits {
31 static typename PrimitiveTrait::Type Parse(NYdb::TValueParser& parser,
32 const ParseContext& context);
33
34 static void Write(NYdb::TValueBuilderBase<NYdb::TValueBuilder>& builder,
35 const typename PrimitiveTrait::Type& value);
36
37 static void Write(NYdb::TValueBuilderBase<NYdb::TParamValueBuilder>& builder,
38 const typename PrimitiveTrait::Type& value);
39
40 static NYdb::TType MakeType();
41};
42
43struct BoolTrait {
44 using Type = bool;
45 static Type Parse(const NYdb::TValueParser& value_parser);
46 template <typename Builder>
47 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
48};
49
50struct Int32Trait {
51 using Type = std::int32_t;
52 static Type Parse(const NYdb::TValueParser& value_parser);
53 template <typename Builder>
54 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
55};
56
57struct Uint32Trait {
58 using Type = std::uint32_t;
59 static Type Parse(const NYdb::TValueParser& value_parser);
60 template <typename Builder>
61 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
62};
63
64struct Int64Trait {
65 using Type = std::int64_t;
66 static Type Parse(const NYdb::TValueParser& value_parser);
67 template <typename Builder>
68 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
69};
70
71struct Uint64Trait {
72 using Type = std::uint64_t;
73 static Type Parse(const NYdb::TValueParser& value_parser);
74 template <typename Builder>
75 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
76};
77
78struct DoubleTrait {
79 using Type = double;
80 static Type Parse(const NYdb::TValueParser& value_parser);
81 template <typename Builder>
82 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
83};
84
85struct StringTrait {
86 using Type = std::string;
87 static Type Parse(const NYdb::TValueParser& value_parser);
88 template <typename Builder>
89 static void Write(NYdb::TValueBuilderBase<Builder>& builder,
90 const Type& value);
91};
92
93struct Utf8Trait {
94 using Type = Utf8;
95 static Type Parse(const NYdb::TValueParser& value_parser);
96 template <typename Builder>
97 static void Write(NYdb::TValueBuilderBase<Builder>& builder,
98 const Type& value);
99};
100
101struct TimestampTrait {
102 using Type = Timestamp;
103 static Type Parse(const NYdb::TValueParser& value_parser);
104 template <typename Builder>
105 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
106};
107
108struct JsonTrait {
109 using Type = formats::json::Value;
110 static Type Parse(const NYdb::TValueParser& value_parser);
111 template <typename Builder>
112 static void Write(NYdb::TValueBuilderBase<Builder>& builder,
113 const Type& value);
114};
115
116struct JsonDocumentTrait {
117 using Type = JsonDocument;
118 static Type Parse(const NYdb::TValueParser& value_parser);
119 template <typename Builder>
120 static void Write(NYdb::TValueBuilderBase<Builder>& builder,
121 const Type& value);
122};
123
124template <>
125struct ValueTraits<std::optional<JsonDocumentTrait::Type>>
126 : OptionalPrimitiveTraits<JsonDocumentTrait> {};
127
128template <>
129struct ValueTraits<JsonDocument> : PrimitiveTraits<JsonDocumentTrait> {};
130
131template <>
132struct ValueTraits<std::optional<JsonTrait::Type>>
133 : OptionalPrimitiveTraits<JsonTrait> {};
134
135template <>
136struct ValueTraits<formats::json::Value> : PrimitiveTraits<JsonTrait> {};
137
138template <>
139struct ValueTraits<std::optional<TimestampTrait::Type>>
140 : OptionalPrimitiveTraits<TimestampTrait> {};
141
142template <>
143struct ValueTraits<TimestampTrait::Type> : PrimitiveTraits<TimestampTrait> {};
144
145template <>
146struct ValueTraits<std::optional<Utf8Trait::Type>>
147 : OptionalPrimitiveTraits<Utf8Trait> {};
148
149template <>
150struct ValueTraits<Utf8Trait::Type> : PrimitiveTraits<Utf8Trait> {};
151
152template <>
153struct ValueTraits<std::optional<StringTrait::Type>>
154 : OptionalPrimitiveTraits<StringTrait> {};
155
156template <>
157struct ValueTraits<StringTrait::Type> : PrimitiveTraits<StringTrait> {};
158
159template <>
160struct ValueTraits<std::optional<DoubleTrait::Type>>
161 : OptionalPrimitiveTraits<DoubleTrait> {};
162
163template <>
164struct ValueTraits<DoubleTrait::Type> : PrimitiveTraits<DoubleTrait> {};
165
166template <>
167struct ValueTraits<std::optional<Uint64Trait::Type>>
168 : OptionalPrimitiveTraits<Uint64Trait> {};
169
170template <>
171struct ValueTraits<Uint64Trait::Type> : PrimitiveTraits<Uint64Trait> {};
172
173template <>
174struct ValueTraits<std::optional<Int64Trait::Type>>
175 : OptionalPrimitiveTraits<Int64Trait> {};
176
177template <>
178struct ValueTraits<Int64Trait::Type> : PrimitiveTraits<Int64Trait> {};
179
180template <>
181struct ValueTraits<std::optional<Uint32Trait::Type>>
182 : OptionalPrimitiveTraits<Uint32Trait> {};
183
184template <>
185struct ValueTraits<Uint32Trait::Type> : PrimitiveTraits<Uint32Trait> {};
186
187template <>
188struct ValueTraits<std::optional<Int32Trait::Type>>
189 : OptionalPrimitiveTraits<Int32Trait> {};
190
191template <>
192struct ValueTraits<Int32Trait::Type> : PrimitiveTraits<Int32Trait> {};
193
194template <>
195struct ValueTraits<std::optional<BoolTrait::Type>>
196 : OptionalPrimitiveTraits<BoolTrait> {};
197
198template <>
199struct ValueTraits<BoolTrait::Type> : PrimitiveTraits<BoolTrait> {};
200
201} // namespace ydb
202
203USERVER_NAMESPACE_END