userver: userver/ydb/io/primitives.hpp Source File
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
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
41 Write(NYdb::TValueBuilderBase<NYdb::TValueBuilder>& builder, const typename PrimitiveTrait::Type& value);
42
43 static void
44 Write(NYdb::TValueBuilderBase<NYdb::TParamValueBuilder>& builder, const typename PrimitiveTrait::Type& value);
45
46 static NYdb::TType MakeType();
47};
48
49struct BoolTrait {
50 using Type = bool;
51 static Type Parse(const NYdb::TValueParser& value_parser);
52 template <typename Builder>
53 static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
54};
55
56struct Int32Trait {
57 using Type = std::int32_t;
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
64 using Type = std::uint32_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 Int64Trait {
71 using Type = std::int64_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
78 using Type = std::uint64_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 = double;
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
92 using Type = std::string;
93 static Type Parse(const NYdb::TValueParser& value_parser);
94 template <typename Builder>
95 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
96};
97
98struct Utf8Trait {
99 using Type = Utf8;
100 static Type Parse(const NYdb::TValueParser& value_parser);
101 template <typename Builder>
102 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
103};
104
106 using Type = Timestamp;
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
112struct UuidTrait {
113 using Type = boost::uuids::uuid;
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
119struct JsonTrait {
120 using Type = formats::json::Value;
121 static Type Parse(const NYdb::TValueParser& value_parser);
122 template <typename Builder>
123 static void Write(NYdb::TValueBuilderBase<Builder>& builder, const Type& value);
124};
125
127 using Type = JsonDocument;
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
133template <>
135
136template <>
138
139template <>
140struct ValueTraits<std::optional<JsonTrait::Type>> : OptionalPrimitiveTraits<JsonTrait> {};
141
142template <>
144
145template <>
147
148template <>
150
151template <>
152struct ValueTraits<std::optional<UuidTrait::Type>> : OptionalPrimitiveTraits<UuidTrait> {};
153
154template <>
156
157template <>
158struct ValueTraits<std::optional<Utf8Trait::Type>> : OptionalPrimitiveTraits<Utf8Trait> {};
159
160template <>
162
163template <>
165
166template <>
168
169template <>
171
172template <>
174
175template <>
177
178template <>
180
181template <>
182struct ValueTraits<std::optional<Int64Trait::Type>> : OptionalPrimitiveTraits<Int64Trait> {};
183
184template <>
186
187template <>
189
190template <>
192
193template <>
194struct ValueTraits<std::optional<Int32Trait::Type>> : OptionalPrimitiveTraits<Int32Trait> {};
195
196template <>
198
199template <>
200struct ValueTraits<std::optional<BoolTrait::Type>> : OptionalPrimitiveTraits<BoolTrait> {};
201
202template <>
204
205} // namespace ydb
206
207USERVER_NAMESPACE_END