userver: userver/ydb/io/primitives.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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