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