userver: /data/code/userver/libraries/proto-structs/tests/structs.hpp Source File
Loading...
Searching...
No Matches
structs.hpp
1#pragma once
2
3#include <userver/proto-structs/io/fwd.hpp>
4#include <userver/proto-structs/io/supported_types.hpp>
5#include <userver/proto-structs/type_mapping.hpp>
6
8
9namespace messages {
10class ConversionFailure;
11class Scalar;
12class WellKnownStd;
13class WellKnownUsrv;
14class WellKnownJson;
15class Optional;
16class Repeated;
17class Map;
18class Oneof;
19class Indirect;
20class Strong;
21class Erroneous;
22} // namespace messages
23
24namespace structs {
25
26enum class ConversionFailureType { kUnspecified = 0, kException = 1, kError = 2, kErrorWithUnknownField = 3 };
27
29 ConversionFailureType error_type = {};
30};
31
32} // namespace structs
33
34namespace proto_structs::traits {
35
36template <>
37struct CompatibleMessageTrait<::structs::ConversionFailure> {
38 using Type = ::messages::ConversionFailure;
39};
40
41} // namespace proto_structs::traits
42
43namespace structs {
44
45enum class TestEnum { kUnspecified = 0, kValue1 = 1, kValue2 = 2 };
46
47struct Scalar {
48 using ProtobufMessage = messages::Scalar;
49
50 bool f1 = {};
51 int32_t f2 = {};
52 uint32_t f3 = {};
53 int64_t f4 = {};
54 uint64_t f5 = {};
55 float f6 = {};
56 double f7 = {};
57 std::string f8 = {};
58 std::string f9 = {};
59 TestEnum f10 = {};
60 std::size_t f11 = {};
61};
62
64 using ProtobufMessage = messages::WellKnownStd;
65
66 std::chrono::time_point<std::chrono::system_clock> f1 = {};
67 std::chrono::milliseconds f2 = {};
68 std::chrono::year_month_day f3 = {};
69 std::chrono::hh_mm_ss<std::chrono::microseconds> f4 = {};
70};
71
73 using ProtobufMessage = messages::WellKnownUsrv;
74
75 ups::Any f1 = {};
76 ups::Timestamp f2 = {};
77 ups::Duration f3 = {};
78 ups::Date f4 = {};
79 ups::TimeOfDay f5 = {};
80 USERVER_NAMESPACE::utils::datetime::TimeOfDay<std::chrono::microseconds> f6 = {};
81 USERVER_NAMESPACE::decimal64::Decimal<3> f7 = {};
82};
83
85 using ProtobufMessage = messages::WellKnownJson;
86
87 formats::json::Value f1 = {};
88 formats::json::Array f2 = {};
89 formats::json::Object f3 = {};
90};
91
92struct Optional {
93 using ProtobufMessage = messages::Optional;
94
95 std::optional<int32_t> f1 = {};
96 std::optional<std::string> f2 = {};
97 std::optional<TestEnum> f3 = {};
98 std::optional<Simple> f4 = {};
99};
100
101struct Repeated {
102 using ProtobufMessage = messages::Repeated;
103
104 std::vector<int32_t> f1 = {};
105 std::vector<std::string> f2 = {};
106 std::vector<TestEnum> f3 = {};
107 std::vector<Simple> f4 = {};
108};
109
110struct Map {
111 using ProtobufMessage = messages::Map;
112
113 std::map<int32_t, int32_t> f1 = {};
114 std::unordered_map<std::string, std::string> f2 = {};
115 std::map<bool, TestEnum> f3 = {};
116 std::unordered_map<std::string, Simple, USERVER_NAMESPACE::utils::StrCaseHash> f4 = {};
117};
118
119struct Oneof {
120 using ProtobufMessage = messages::Oneof;
122
123 Type test_oneof = {};
124};
125
126struct Indirect {
127 using ProtobufMessage = messages::Indirect;
128
129 template <typename T>
130 using Box = USERVER_NAMESPACE::utils::Box<T>;
131
132 using OneofType = ups::Oneof<Box<Simple>, Box<std::string>>;
133
134 Box<Simple> f1 = {};
135 std::optional<Box<ups::Duration>> f2 = {};
136 std::vector<Box<Simple>> f3 = {};
137 std::map<int32_t, Box<Simple>> f4 = {};
138 OneofType test_oneof = {};
139 Box<int32_t> f7 = {};
140 Box<std::vector<Box<TestEnum>>> f8 = {};
141 Box<std::map<std::string, Box<Simple>>> f9 = {};
142};
143
144struct Strong {
145 struct Tag {};
146
147 using ProtobufMessage = messages::Strong;
148 using F1Strong = USERVER_NAMESPACE::utils::StrongTypedef<Tag, int32_t>;
149 using F2Strong = USERVER_NAMESPACE::utils::StrongTypedef<Tag, std::string>;
150 using F3Strong = USERVER_NAMESPACE::utils::StrongTypedef<Tag, TestEnum>;
151 using F4Strong = USERVER_NAMESPACE::utils::StrongTypedef<Tag, Simple>;
152 using F5Strong = USERVER_NAMESPACE::utils::StrongTypedef<Tag, ups::Duration>;
153 using OneofType = ups::Oneof<F5Strong>;
154
155 F1Strong f1 = {};
156 std::optional<F2Strong> f2 = {};
157 std::vector<F3Strong> f3 = {};
158 std::map<int32_t, F4Strong> f4 = {};
159 OneofType test_oneof = {};
160};
161
162struct Erroneous {
163 using ProtobufMessage = messages::Erroneous;
165
166 std::optional<ConversionFailure> f1 = {};
167 std::vector<ConversionFailure> f2 = {};
168 std::unordered_map<int32_t, ConversionFailure> f3 = {};
169 OneofType test_oneof = {};
170};
171
173ReadProtoStruct(ups::io::ReadContext&, ups::io::To<ConversionFailure>, const messages::ConversionFailure&);
174void WriteProtoStruct(ups::io::WriteContext& ctx, const ConversionFailure&, messages::ConversionFailure&);
175
176Scalar ReadProtoStruct(ups::io::ReadContext&, ups::io::To<Scalar>, const messages::Scalar&);
177void WriteProtoStruct(ups::io::WriteContext&, const Scalar&, messages::Scalar&);
178void WriteProtoStruct(ups::io::WriteContext&, Scalar&&, messages::Scalar&);
179
180WellKnownStd ReadProtoStruct(ups::io::ReadContext&, ups::io::To<WellKnownStd>, const messages::WellKnownStd&);
181void WriteProtoStruct(ups::io::WriteContext&, const WellKnownStd&, messages::WellKnownStd&);
182void WriteProtoStruct(ups::io::WriteContext&, WellKnownStd&&, messages::WellKnownStd&);
183
184WellKnownUsrv ReadProtoStruct(ups::io::ReadContext&, ups::io::To<WellKnownUsrv>, const messages::WellKnownUsrv&);
185void WriteProtoStruct(ups::io::WriteContext&, const WellKnownUsrv&, messages::WellKnownUsrv&);
186void WriteProtoStruct(ups::io::WriteContext&, WellKnownUsrv&&, messages::WellKnownUsrv&);
187
188WellKnownJson ReadProtoStruct(ups::io::ReadContext&, ups::io::To<WellKnownJson>, const messages::WellKnownJson&);
189void WriteProtoStruct(ups::io::WriteContext&, const WellKnownJson&, messages::WellKnownJson&);
190void WriteProtoStruct(ups::io::WriteContext&, WellKnownJson&&, messages::WellKnownJson&);
191
192Optional ReadProtoStruct(ups::io::ReadContext&, ups::io::To<Optional>, const messages::Optional&);
193void WriteProtoStruct(ups::io::WriteContext&, const Optional&, messages::Optional&);
194void WriteProtoStruct(ups::io::WriteContext&, Optional&&, messages::Optional&);
195
196Repeated ReadProtoStruct(ups::io::ReadContext&, ups::io::To<Repeated>, const messages::Repeated&);
197void WriteProtoStruct(ups::io::WriteContext&, const Repeated&, messages::Repeated&);
198void WriteProtoStruct(ups::io::WriteContext&, Repeated&&, messages::Repeated&);
199
200Map ReadProtoStruct(ups::io::ReadContext&, ups::io::To<Map>, const messages::Map&);
201void WriteProtoStruct(ups::io::WriteContext&, const Map&, messages::Map&);
202void WriteProtoStruct(ups::io::WriteContext&, Map&&, messages::Map&);
203
204Oneof ReadProtoStruct(ups::io::ReadContext&, ups::io::To<Oneof>, const messages::Oneof&);
205void WriteProtoStruct(ups::io::WriteContext&, const Oneof&, messages::Oneof&);
206void WriteProtoStruct(ups::io::WriteContext&, Oneof&&, messages::Oneof&);
207
208Indirect ReadProtoStruct(ups::io::ReadContext&, ups::io::To<Indirect>, const messages::Indirect&);
209void WriteProtoStruct(ups::io::WriteContext&, const Indirect&, messages::Indirect&);
210void WriteProtoStruct(ups::io::WriteContext&, Indirect&&, messages::Indirect&);
211
212Strong ReadProtoStruct(ups::io::ReadContext&, ups::io::To<Strong>, const messages::Strong&);
213void WriteProtoStruct(ups::io::WriteContext&, const Strong&, messages::Strong&);
214void WriteProtoStruct(ups::io::WriteContext&, Strong&&, messages::Strong&);
215
216Erroneous ReadProtoStruct(ups::io::ReadContext&, ups::io::To<Erroneous>, const messages::Erroneous&);
217void WriteProtoStruct(ups::io::WriteContext&, const Erroneous&, messages::Erroneous&);
218
219void CheckScalarEqual(const Scalar&, const messages::Scalar&);
220void CheckWellKnownStdEqual(const WellKnownStd&, const messages::WellKnownStd&);
221void CheckWellKnownUsrvEqual(const WellKnownUsrv&, const messages::WellKnownUsrv&);
222void CheckWellKnownJsonEqual(const WellKnownJson&, const messages::WellKnownJson&);
223void CheckOptionalEqual(const Optional&, const messages::Optional&);
224void CheckRepeatedEqual(const Repeated&, const messages::Repeated&);
225void CheckMapEqual(const Map&, const messages::Map&);
226void CheckOneofEqual(const Oneof&, const messages::Oneof&);
227void CheckIndirectEqual(const Indirect&, const messages::Indirect&);
228void CheckStrongEqual(const Strong&, const messages::Strong&);
229
230} // namespace structs