3#include <gtest/gtest.h>
5#include <google/protobuf/util/time_util.h>
7#include <userver/proto-structs/io/impl/read.hpp>
8#include <userver/proto-structs/io/impl/write.hpp>
9#include <userver/proto-structs/io/supported_types_conv.hpp>
11#include "messages.pb.h"
17void CheckJsonValue(
const formats::json::Value& json,
const ::google::protobuf::Value& msg);
18void CheckJsonValue(
const formats::json::Value& json,
const ::google::protobuf::ListValue& msg);
19void CheckJsonValue(
const formats::json::Value& json,
const ::google::protobuf::Struct& msg);
21void CheckJsonValue(
const formats::json::Value& json,
const ::google::protobuf::Value& msg) {
22 if (msg.has_null_value()) {
23 ASSERT_TRUE(json.IsNull());
24 }
else if (msg.has_number_value()) {
25 ASSERT_TRUE(json.IsNumber());
26 EXPECT_EQ(json.As<
double>(), msg.number_value());
27 }
else if (msg.has_string_value()) {
28 ASSERT_TRUE(json.IsString());
29 EXPECT_EQ(json.As<std::string>(), msg.string_value());
30 }
else if (msg.has_bool_value()) {
31 ASSERT_TRUE(json.IsBool());
32 EXPECT_EQ(json.As<
bool>(), msg.bool_value());
33 }
else if (msg.has_list_value()) {
34 CheckJsonValue(json, msg.list_value());
35 }
else if (msg.has_struct_value()) {
36 CheckJsonValue(json, msg.struct_value());
38 ADD_FAILURE() <<
"incomparable 'google::protobuf::Value'";
42void CheckJsonValue(
const formats::json::Value& json,
const ::google::protobuf::ListValue& msg) {
43 ASSERT_TRUE(json.IsArray());
44 ASSERT_EQ(
static_cast<
int>(json.GetSize()), msg.values().size());
46 for (
int i = 0; i < msg.values().size(); ++i) {
47 CheckJsonValue(json[i], msg.values()[i]);
51void CheckJsonValue(
const formats::json::Value& json,
const ::google::protobuf::Struct& msg) {
52 ASSERT_TRUE(json.IsObject());
53 EXPECT_EQ(json.GetSize(), msg.fields().size());
55 for (
const auto& [key, val] : msg.fields()) {
56 ASSERT_TRUE(json.HasMember(key));
57 CheckJsonValue(json[key], val);
63ConversionFailure ReadProtoStruct(
64 ups::io::ReadContext& ctx,
65 ups::io::To<ConversionFailure>,
66 const messages::ConversionFailure& msg
68 if (msg.error_type() == messages::ConversionFailure::TYPE_EXCEPTION) {
69 throw std::runtime_error(
"conversion_failure_exception");
70 }
else if (msg.error_type() == messages::ConversionFailure::TYPE_ERROR) {
71 ctx.AddError(messages::ConversionFailure::kErrorFieldFieldNumber,
"conversion_failure_error");
73 ctx.AddError(1001,
"conversion_failure_error_with_unknown_field");
79void WriteProtoStruct(ups::io::WriteContext& ctx,
const ConversionFailure& obj, messages::ConversionFailure&) {
80 if (obj.error_type == ConversionFailureType::kException) {
81 throw std::runtime_error(
"conversion_failure_exception");
82 }
else if (obj.error_type == ConversionFailureType::kError) {
83 ctx.AddError(messages::ConversionFailure::kErrorFieldFieldNumber,
"conversion_failure_error");
85 ctx.AddError(1001,
"conversion_failure_error_with_unknown_field");
89Scalar ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<Scalar>,
const messages::Scalar& msg) {
91 .f1 = ups::io::impl::ReadField<
92 bool>(ctx, ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF1FieldNumber, &messages::Scalar::f1)),
93 .f2 = ups::io::impl::ReadField<int32_t>(
95 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF2FieldNumber, &messages::Scalar::f2)
97 .f3 = ups::io::impl::ReadField<uint32_t>(
99 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF3FieldNumber, &messages::Scalar::f3)
101 .f4 = ups::io::impl::ReadField<int64_t>(
103 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF4FieldNumber, &messages::Scalar::f4)
105 .f5 = ups::io::impl::ReadField<uint64_t>(
107 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF5FieldNumber, &messages::Scalar::f5)
109 .f6 = ups::io::impl::ReadField<
110 float>(ctx, ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF6FieldNumber, &messages::Scalar::f6)),
111 .f7 = ups::io::impl::ReadField<
double>(
113 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF7FieldNumber, &messages::Scalar::f7)
115 .f8 = ups::io::impl::ReadField<std::string>(
117 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF8FieldNumber, &messages::Scalar::f8)
119 .f9 = ups::io::impl::ReadField<std::string>(
121 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF9FieldNumber, &messages::Scalar::f9)
123 .f10 = ups::io::impl::ReadField<TestEnum>(
125 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF10FieldNumber, &messages::Scalar::f10)
127 .f11 = ups::io::impl::ReadField<std::size_t>(
129 ups::io::impl::CreateFieldGetter(msg, messages::Scalar::kF11FieldNumber, &messages::Scalar::f11)
135void WriteScalarStruct(ups::io::WriteContext& ctx, T&& obj, messages::Scalar& msg) {
136 ups::io::impl::WriteField(
138 std::forward<T>(obj).f1,
139 ups::io::impl::CreateFieldSetter(
141 messages::Scalar::kF1FieldNumber,
142 &messages::Scalar::set_f1,
143 &messages::Scalar::clear_f1
146 ups::io::impl::WriteField(
148 std::forward<T>(obj).f2,
149 ups::io::impl::CreateFieldSetter(
151 messages::Scalar::kF2FieldNumber,
152 &messages::Scalar::set_f2,
153 &messages::Scalar::clear_f2
156 ups::io::impl::WriteField(
158 std::forward<T>(obj).f3,
159 ups::io::impl::CreateFieldSetter(
161 messages::Scalar::kF3FieldNumber,
162 &messages::Scalar::set_f3,
163 &messages::Scalar::clear_f3
166 ups::io::impl::WriteField(
168 std::forward<T>(obj).f4,
169 ups::io::impl::CreateFieldSetter(
171 messages::Scalar::kF4FieldNumber,
172 &messages::Scalar::set_f4,
173 &messages::Scalar::clear_f4
176 ups::io::impl::WriteField(
178 std::forward<T>(obj).f5,
179 ups::io::impl::CreateFieldSetter(
181 messages::Scalar::kF5FieldNumber,
182 &messages::Scalar::set_f5,
183 &messages::Scalar::clear_f5
186 ups::io::impl::WriteField(
188 std::forward<T>(obj).f6,
189 ups::io::impl::CreateFieldSetter(
191 messages::Scalar::kF6FieldNumber,
192 &messages::Scalar::set_f6,
193 &messages::Scalar::clear_f6
196 ups::io::impl::WriteField(
198 std::forward<T>(obj).f7,
199 ups::io::impl::CreateFieldSetter(
201 messages::Scalar::kF7FieldNumber,
202 &messages::Scalar::set_f7,
203 &messages::Scalar::clear_f7
206 ups::io::impl::WriteField(
208 std::forward<T>(obj).f8,
209 ups::io::impl::CreateFieldSetter(
211 messages::Scalar::kF8FieldNumber,
212 &messages::Scalar::set_f8<
const std::string&>,
213 &messages::Scalar::set_f8<std::string>,
214 &messages::Scalar::clear_f8
217 ups::io::impl::WriteField(
219 std::forward<T>(obj).f9,
220 ups::io::impl::CreateFieldSetter(
222 messages::Scalar::kF9FieldNumber,
223 &messages::Scalar::set_f9<
const std::string&>,
224 &messages::Scalar::set_f9<std::string>,
225 &messages::Scalar::clear_f9
228 ups::io::impl::WriteField(
230 std::forward<T>(obj).f10,
231 ups::io::impl::CreateFieldSetter(
233 messages::Scalar::kF10FieldNumber,
234 &messages::Scalar::set_f10,
235 &messages::Scalar::clear_f10
238 ups::io::impl::WriteField(
240 std::forward<T>(obj).f11,
241 ups::io::impl::CreateFieldSetter(
243 messages::Scalar::kF11FieldNumber,
244 &messages::Scalar::set_f11,
245 &messages::Scalar::clear_f11
250void WriteProtoStruct(ups::io::WriteContext& ctx,
const Scalar& obj, messages::Scalar& msg) {
251 WriteScalarStruct(ctx, obj, msg);
254void WriteProtoStruct(ups::io::WriteContext& ctx, Scalar&& obj, messages::Scalar& msg) {
255 WriteScalarStruct(ctx, std::move(obj), msg);
258WellKnownStd ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<WellKnownStd>,
const messages::WellKnownStd& msg) {
260 .f1 = ups::io::impl::ReadField<std::chrono::time_point<std::chrono::system_clock>>(
262 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownStd::kF1FieldNumber, &messages::WellKnownStd::f1)
264 .f2 = ups::io::impl::ReadField<std::chrono::milliseconds>(
266 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownStd::kF2FieldNumber, &messages::WellKnownStd::f2)
268 .f3 = ups::io::impl::ReadField<std::chrono::year_month_day>(
270 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownStd::kF3FieldNumber, &messages::WellKnownStd::f3)
272 .f4 = ups::io::impl::ReadField<std::chrono::hh_mm_ss<std::chrono::microseconds>>(
274 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownStd::kF4FieldNumber, &messages::WellKnownStd::f4)
280void WriteWellKnownStruct(ups::io::WriteContext& ctx, T&& obj, messages::WellKnownStd& msg) {
281 ups::io::impl::WriteField(
283 std::forward<T>(obj).f1,
284 ups::io::impl::CreateFieldSetter(
286 messages::WellKnownStd::kF1FieldNumber,
287 &messages::WellKnownStd::mutable_f1,
288 &messages::WellKnownStd::clear_f1
291 ups::io::impl::WriteField(
293 std::forward<T>(obj).f2,
294 ups::io::impl::CreateFieldSetter(
296 messages::WellKnownStd::kF2FieldNumber,
297 &messages::WellKnownStd::mutable_f2,
298 &messages::WellKnownStd::clear_f2
301 ups::io::impl::WriteField(
303 std::forward<T>(obj).f3,
304 ups::io::impl::CreateFieldSetter(
306 messages::WellKnownStd::kF3FieldNumber,
307 &messages::WellKnownStd::mutable_f3,
308 &messages::WellKnownStd::clear_f3
311 ups::io::impl::WriteField(
313 std::forward<T>(obj).f4,
314 ups::io::impl::CreateFieldSetter(
316 messages::WellKnownStd::kF4FieldNumber,
317 &messages::WellKnownStd::mutable_f4,
318 &messages::WellKnownStd::clear_f4
323void WriteProtoStruct(ups::io::WriteContext& ctx,
const WellKnownStd& obj, messages::WellKnownStd& msg) {
324 WriteWellKnownStruct(ctx, obj, msg);
327void WriteProtoStruct(ups::io::WriteContext& ctx, WellKnownStd&& obj, messages::WellKnownStd& msg) {
328 WriteWellKnownStruct(ctx, std::move(obj), msg);
331WellKnownUsrv ReadProtoStruct(
332 ups::io::ReadContext& ctx,
333 ups::io::To<WellKnownUsrv>,
334 const messages::WellKnownUsrv& msg
337 .f1 = ups::io::impl::ReadField<ups::Any>(
339 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownUsrv::kF1FieldNumber, &messages::WellKnownUsrv::f1)
341 .f2 = ups::io::impl::ReadField<ups::Timestamp>(
343 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownUsrv::kF2FieldNumber, &messages::WellKnownUsrv::f2)
345 .f3 = ups::io::impl::ReadField<ups::Duration>(
347 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownUsrv::kF3FieldNumber, &messages::WellKnownUsrv::f3)
349 .f4 = ups::io::impl::ReadField<ups::Date>(
351 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownUsrv::kF4FieldNumber, &messages::WellKnownUsrv::f4)
353 .f5 = ups::io::impl::ReadField<ups::TimeOfDay>(
355 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownUsrv::kF5FieldNumber, &messages::WellKnownUsrv::f5)
357 .f6 = ups::io::impl::ReadField<USERVER_NAMESPACE::utils::datetime::TimeOfDay<std::chrono::microseconds>>(
359 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownUsrv::kF6FieldNumber, &messages::WellKnownUsrv::f6)
361 .f7 = ups::io::impl::ReadField<USERVER_NAMESPACE::decimal64::Decimal<3>>(
363 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownUsrv::kF7FieldNumber, &messages::WellKnownUsrv::f7)
369void WriteWellKnownStruct(ups::io::WriteContext& ctx, T&& obj, messages::WellKnownUsrv& msg) {
370 ups::io::impl::WriteField(
372 std::forward<T>(obj).f1,
373 ups::io::impl::CreateFieldSetter(
375 messages::WellKnownUsrv::kF1FieldNumber,
376 &messages::WellKnownUsrv::mutable_f1,
377 &messages::WellKnownUsrv::clear_f1
380 ups::io::impl::WriteField(
382 std::forward<T>(obj).f2,
383 ups::io::impl::CreateFieldSetter(
385 messages::WellKnownUsrv::kF2FieldNumber,
386 &messages::WellKnownUsrv::mutable_f2,
387 &messages::WellKnownUsrv::clear_f2
390 ups::io::impl::WriteField(
392 std::forward<T>(obj).f3,
393 ups::io::impl::CreateFieldSetter(
395 messages::WellKnownUsrv::kF3FieldNumber,
396 &messages::WellKnownUsrv::mutable_f3,
397 &messages::WellKnownUsrv::clear_f3
400 ups::io::impl::WriteField(
402 std::forward<T>(obj).f4,
403 ups::io::impl::CreateFieldSetter(
405 messages::WellKnownUsrv::kF4FieldNumber,
406 &messages::WellKnownUsrv::mutable_f4,
407 &messages::WellKnownUsrv::clear_f4
410 ups::io::impl::WriteField(
412 std::forward<T>(obj).f5,
413 ups::io::impl::CreateFieldSetter(
415 messages::WellKnownUsrv::kF5FieldNumber,
416 &messages::WellKnownUsrv::mutable_f5,
417 &messages::WellKnownUsrv::clear_f5
420 ups::io::impl::WriteField(
422 std::forward<T>(obj).f6,
423 ups::io::impl::CreateFieldSetter(
425 messages::WellKnownUsrv::kF6FieldNumber,
426 &messages::WellKnownUsrv::mutable_f6,
427 &messages::WellKnownUsrv::clear_f6
430 ups::io::impl::WriteField(
432 std::forward<T>(obj).f7,
433 ups::io::impl::CreateFieldSetter(
435 messages::WellKnownUsrv::kF7FieldNumber,
436 &messages::WellKnownUsrv::mutable_f7,
437 &messages::WellKnownUsrv::clear_f7
442void WriteProtoStruct(ups::io::WriteContext& ctx,
const WellKnownUsrv& obj, messages::WellKnownUsrv& msg) {
443 WriteWellKnownStruct(ctx, obj, msg);
446void WriteProtoStruct(ups::io::WriteContext& ctx, WellKnownUsrv&& obj, messages::WellKnownUsrv& msg) {
447 WriteWellKnownStruct(ctx, std::move(obj), msg);
450WellKnownJson ReadProtoStruct(
451 ups::io::ReadContext& ctx,
452 ups::io::To<WellKnownJson>,
453 const messages::WellKnownJson& msg
456 .f1 = ups::io::impl::ReadField<formats::json::Value>(
458 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownJson::kF1FieldNumber, &messages::WellKnownJson::f1)
460 .f2 = ups::io::impl::ReadField<formats::json::Array>(
462 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownJson::kF2FieldNumber, &messages::WellKnownJson::f2)
464 .f3 = ups::io::impl::ReadField<formats::json::Object>(
466 ups::io::impl::CreateFieldGetter(msg, messages::WellKnownJson::kF3FieldNumber, &messages::WellKnownJson::f3)
472void WriteWellKnownJsonStruct(ups::io::WriteContext& ctx, T&& obj, messages::WellKnownJson& msg) {
473 ups::io::impl::WriteField(
475 std::forward<T>(obj).f1,
476 ups::io::impl::CreateFieldSetter(
478 messages::WellKnownJson::kF1FieldNumber,
479 &messages::WellKnownJson::mutable_f1,
480 &messages::WellKnownJson::clear_f1
483 ups::io::impl::WriteField(
485 std::forward<T>(obj).f2,
486 ups::io::impl::CreateFieldSetter(
488 messages::WellKnownJson::kF2FieldNumber,
489 &messages::WellKnownJson::mutable_f2,
490 &messages::WellKnownJson::clear_f2
493 ups::io::impl::WriteField(
495 std::forward<T>(obj).f3,
496 ups::io::impl::CreateFieldSetter(
498 messages::WellKnownJson::kF3FieldNumber,
499 &messages::WellKnownJson::mutable_f3,
500 &messages::WellKnownJson::clear_f3
505void WriteProtoStruct(ups::io::WriteContext& ctx,
const WellKnownJson& obj, messages::WellKnownJson& msg) {
506 WriteWellKnownJsonStruct(ctx, obj, msg);
509void WriteProtoStruct(ups::io::WriteContext& ctx, WellKnownJson&& obj, messages::WellKnownJson& msg) {
510 WriteWellKnownJsonStruct(ctx, std::move(obj), msg);
513Optional ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<Optional>,
const messages::Optional& msg) {
515 .f1 = ups::io::impl::ReadField<std::optional<int32_t>>(
517 ups::io::impl::CreateFieldGetter(
519 messages::Optional::kF1FieldNumber,
520 &messages::Optional::f1,
521 &messages::Optional::has_f1
524 .f2 = ups::io::impl::ReadField<std::optional<std::string>>(
526 ups::io::impl::CreateFieldGetter(
528 messages::Optional::kF2FieldNumber,
529 &messages::Optional::f2,
530 &messages::Optional::has_f2
533 .f3 = ups::io::impl::ReadField<std::optional<TestEnum>>(
535 ups::io::impl::CreateFieldGetter(
537 messages::Optional::kF3FieldNumber,
538 &messages::Optional::f3,
539 &messages::Optional::has_f3
542 .f4 = ups::io::impl::ReadField<std::optional<Simple>>(
544 ups::io::impl::CreateFieldGetter(
546 messages::Optional::kF4FieldNumber,
547 &messages::Optional::f4,
548 &messages::Optional::has_f4
555void WriteOptionalStruct(ups::io::WriteContext& ctx, T&& obj, messages::Optional& msg) {
556 ups::io::impl::WriteField(
558 std::forward<T>(obj).f1,
559 ups::io::impl::CreateFieldSetter(
561 messages::Optional::kF1FieldNumber,
562 &messages::Optional::set_f1,
563 &messages::Optional::clear_f1
566 ups::io::impl::WriteField(
568 std::forward<T>(obj).f2,
569 ups::io::impl::CreateFieldSetter(
571 messages::Optional::kF2FieldNumber,
572 &messages::Optional::set_f2<
const std::string&>,
573 &messages::Optional::set_f2<std::string>,
574 &messages::Optional::clear_f2
577 ups::io::impl::WriteField(
579 std::forward<T>(obj).f3,
580 ups::io::impl::CreateFieldSetter(
582 messages::Optional::kF3FieldNumber,
583 &messages::Optional::set_f3,
584 &messages::Optional::clear_f3
587 ups::io::impl::WriteField(
589 std::forward<T>(obj).f4,
590 ups::io::impl::CreateFieldSetter(
592 messages::Optional::kF4FieldNumber,
593 &messages::Optional::mutable_f4,
594 &messages::Optional::clear_f4
599void WriteProtoStruct(ups::io::WriteContext& ctx,
const Optional& obj, messages::Optional& msg) {
600 WriteOptionalStruct(ctx, obj, msg);
602void WriteProtoStruct(ups::io::WriteContext& ctx, Optional&& obj, messages::Optional& msg) {
603 WriteOptionalStruct(ctx, std::move(obj), msg);
606Repeated ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<Repeated>,
const messages::Repeated& msg) {
608 .f1 = ups::io::impl::ReadField<std::vector<int32_t>>(
610 ups::io::impl::CreateFieldGetter(msg, messages::Repeated::kF1FieldNumber, &messages::Repeated::f1)
612 .f2 = ups::io::impl::ReadField<std::vector<std::string>>(
614 ups::io::impl::CreateFieldGetter(msg, messages::Repeated::kF2FieldNumber, &messages::Repeated::f2)
616 .f3 = ups::io::impl::ReadField<std::vector<TestEnum>>(
618 ups::io::impl::CreateFieldGetter(msg, messages::Repeated::kF3FieldNumber, &messages::Repeated::f3)
620 .f4 = ups::io::impl::ReadField<std::vector<Simple>>(
622 ups::io::impl::CreateFieldGetter(msg, messages::Repeated::kF4FieldNumber, &messages::Repeated::f4)
628void WriteRepeatedStruct(ups::io::WriteContext& ctx, T&& obj, messages::Repeated& msg) {
629 ups::io::impl::WriteField(
631 std::forward<T>(obj).f1,
632 ups::io::impl::CreateFieldSetter(
634 messages::Repeated::kF1FieldNumber,
635 &messages::Repeated::mutable_f1,
636 &messages::Repeated::clear_f1
639 ups::io::impl::WriteField(
641 std::forward<T>(obj).f2,
642 ups::io::impl::CreateFieldSetter(
644 messages::Repeated::kF2FieldNumber,
645 &messages::Repeated::mutable_f2,
646 &messages::Repeated::clear_f2
649 ups::io::impl::WriteField(
651 std::forward<T>(obj).f3,
652 ups::io::impl::CreateFieldSetter(
654 messages::Repeated::kF3FieldNumber,
655 &messages::Repeated::mutable_f3,
656 &messages::Repeated::clear_f3
659 ups::io::impl::WriteField(
661 std::forward<T>(obj).f4,
662 ups::io::impl::CreateFieldSetter(
664 messages::Repeated::kF4FieldNumber,
665 &messages::Repeated::mutable_f4,
666 &messages::Repeated::clear_f4
671void WriteProtoStruct(ups::io::WriteContext& ctx,
const Repeated& obj, messages::Repeated& msg) {
672 WriteRepeatedStruct(ctx, obj, msg);
675void WriteProtoStruct(ups::io::WriteContext& ctx, Repeated&& obj, messages::Repeated& msg) {
676 WriteRepeatedStruct(ctx, std::move(obj), msg);
679Map ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<Map>,
const messages::Map& msg) {
681 .f1 = ups::io::impl::ReadField<std::map<
683 int32_t>>(ctx, ups::io::impl::CreateFieldGetter(msg, messages::Map::kF1FieldNumber, &messages::Map::f1)),
684 .f2 = ups::io::impl::ReadField<std::unordered_map<std::string, std::string>>(
686 ups::io::impl::CreateFieldGetter(msg, messages::Map::kF2FieldNumber, &messages::Map::f2)
688 .f3 = ups::io::impl::ReadField<std::map<
690 TestEnum>>(ctx, ups::io::impl::CreateFieldGetter(msg, messages::Map::kF3FieldNumber, &messages::Map::f3)),
691 .f4 = ups::io::impl::ReadField<std::unordered_map<std::string, Simple, USERVER_NAMESPACE::utils::StrCaseHash>>(
693 ups::io::impl::CreateFieldGetter(msg, messages::Map::kF4FieldNumber, &messages::Map::f4)
699void WriteMapStruct(ups::io::WriteContext& ctx, T&& obj, messages::Map& msg) {
700 ups::io::impl::WriteField(
702 std::forward<T>(obj).f1,
703 ups::io::impl::CreateFieldSetter(
705 messages::Map::kF1FieldNumber,
706 &messages::Map::mutable_f1,
707 &messages::Map::clear_f1
710 ups::io::impl::WriteField(
712 std::forward<T>(obj).f2,
713 ups::io::impl::CreateFieldSetter(
715 messages::Map::kF2FieldNumber,
716 &messages::Map::mutable_f2,
717 &messages::Map::clear_f2
720 ups::io::impl::WriteField(
722 std::forward<T>(obj).f3,
723 ups::io::impl::CreateFieldSetter(
725 messages::Map::kF3FieldNumber,
726 &messages::Map::mutable_f3,
727 &messages::Map::clear_f3
730 ups::io::impl::WriteField(
732 std::forward<T>(obj).f4,
733 ups::io::impl::CreateFieldSetter(
735 messages::Map::kF4FieldNumber,
736 &messages::Map::mutable_f4,
737 &messages::Map::clear_f4
742void WriteProtoStruct(ups::io::WriteContext& ctx,
const Map& obj, messages::Map& msg) { WriteMapStruct(ctx, obj, msg); }
744void WriteProtoStruct(ups::io::WriteContext& ctx, Map&& obj, messages::Map& msg) {
745 WriteMapStruct(ctx, std::move(obj), msg);
748Oneof ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<Oneof>,
const messages::Oneof& msg) {
750 .test_oneof = ups::io::impl::ReadField<Oneof::Type>(
752 ups::io::impl::CreateFieldGetter(
754 messages::Oneof::kF1FieldNumber,
755 &messages::Oneof::f1,
756 &messages::Oneof::has_f1
758 ups::io::impl::CreateFieldGetter(
760 messages::Oneof::kF2FieldNumber,
761 &messages::Oneof::f2,
762 &messages::Oneof::has_f2
764 ups::io::impl::CreateFieldGetter(
766 messages::Oneof::kF3FieldNumber,
767 &messages::Oneof::f3,
768 &messages::Oneof::has_f3
770 ups::io::impl::CreateFieldGetter(
772 messages::Oneof::kF4FieldNumber,
773 &messages::Oneof::f4,
774 &messages::Oneof::has_f4
781void WriteOneofStruct(ups::io::WriteContext& ctx, T&& obj, messages::Oneof& msg) {
782 ups::io::impl::WriteField(
784 std::forward<T>(obj).test_oneof,
785 ups::io::impl::CreateFieldSetter(
787 messages::Oneof::kF1FieldNumber,
788 &messages::Oneof::set_f1,
789 &messages::Oneof::clear_f1
791 ups::io::impl::CreateFieldSetter(
793 messages::Oneof::kF2FieldNumber,
794 &messages::Oneof::set_f2<
const std::string&>,
795 &messages::Oneof::set_f2<std::string>,
796 &messages::Oneof::clear_f2
798 ups::io::impl::CreateFieldSetter(
800 messages::Oneof::kF3FieldNumber,
801 &messages::Oneof::set_f3,
802 &messages::Oneof::clear_f3
804 ups::io::impl::CreateFieldSetter(
806 messages::Oneof::kF4FieldNumber,
807 &messages::Oneof::mutable_f4,
808 &messages::Oneof::clear_f4
813void WriteProtoStruct(ups::io::WriteContext& ctx,
const Oneof& obj, messages::Oneof& msg) {
814 WriteOneofStruct(ctx, obj, msg);
817void WriteProtoStruct(ups::io::WriteContext& ctx, Oneof&& obj, messages::Oneof& msg) {
818 WriteOneofStruct(ctx, std::move(obj), msg);
821Indirect ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<Indirect>,
const messages::Indirect& msg) {
823 .f1 = ups::io::impl::ReadField<Indirect::Box<Simple>>(
825 ups::io::impl::CreateFieldGetter(msg, messages::Indirect::kF1FieldNumber, &messages::Indirect::f1)
827 .f2 = ups::io::impl::ReadField<std::optional<Indirect::Box<ups::Duration>>>(
829 ups::io::impl::CreateFieldGetter(
831 messages::Indirect::kF2FieldNumber,
832 &messages::Indirect::f2,
833 &messages::Indirect::has_f2
836 .f3 = ups::io::impl::ReadField<std::vector<Indirect::Box<Simple>>>(
838 ups::io::impl::CreateFieldGetter(msg, messages::Indirect::kF3FieldNumber, &messages::Indirect::f3)
840 .f4 = ups::io::impl::ReadField<std::map<int32_t, Indirect::Box<Simple>>>(
842 ups::io::impl::CreateFieldGetter(msg, messages::Indirect::kF4FieldNumber, &messages::Indirect::f4)
844 .test_oneof = ups::io::impl::ReadField<Indirect::OneofType>(
846 ups::io::impl::CreateFieldGetter(
848 messages::Indirect::kF5FieldNumber,
849 &messages::Indirect::f5,
850 &messages::Indirect::has_f5
852 ups::io::impl::CreateFieldGetter(
854 messages::Indirect::kF6FieldNumber,
855 &messages::Indirect::f6,
856 &messages::Indirect::has_f6
859 .f7 = ups::io::impl::ReadField<Indirect::Box<int32_t>>(
861 ups::io::impl::CreateFieldGetter(msg, messages::Indirect::kF7FieldNumber, &messages::Indirect::f7)
863 .f8 = ups::io::impl::ReadField<Indirect::Box<std::vector<Indirect::Box<TestEnum>>>>(
865 ups::io::impl::CreateFieldGetter(msg, messages::Indirect::kF8FieldNumber, &messages::Indirect::f8)
867 .f9 = ups::io::impl::ReadField<Indirect::Box<std::map<std::string, Indirect::Box<Simple>>>>(
869 ups::io::impl::CreateFieldGetter(msg, messages::Indirect::kF9FieldNumber, &messages::Indirect::f9)
875void WriteIndirectStruct(ups::io::WriteContext& ctx, T&& obj, messages::Indirect& msg) {
876 ups::io::impl::WriteField(
878 std::forward<T>(obj).f1,
879 ups::io::impl::CreateFieldSetter(
881 messages::Indirect::kF1FieldNumber,
882 &messages::Indirect::mutable_f1,
883 &messages::Indirect::clear_f1
886 ups::io::impl::WriteField(
888 std::forward<T>(obj).f2,
889 ups::io::impl::CreateFieldSetter(
891 messages::Indirect::kF2FieldNumber,
892 &messages::Indirect::mutable_f2,
893 &messages::Indirect::clear_f2
896 ups::io::impl::WriteField(
898 std::forward<T>(obj).f3,
899 ups::io::impl::CreateFieldSetter(
901 messages::Indirect::kF3FieldNumber,
902 &messages::Indirect::mutable_f3,
903 &messages::Indirect::clear_f3
906 ups::io::impl::WriteField(
908 std::forward<T>(obj).f4,
909 ups::io::impl::CreateFieldSetter(
911 messages::Indirect::kF4FieldNumber,
912 &messages::Indirect::mutable_f4,
913 &messages::Indirect::clear_f4
916 ups::io::impl::WriteField(
918 std::forward<T>(obj).test_oneof,
919 ups::io::impl::CreateFieldSetter(
921 messages::Indirect::kF5FieldNumber,
922 &messages::Indirect::mutable_f5,
923 &messages::Indirect::clear_f5
925 ups::io::impl::CreateFieldSetter(
927 messages::Indirect::kF6FieldNumber,
928 &messages::Indirect::set_f6<
const std::string&>,
929 &messages::Indirect::set_f6<std::string>,
930 &messages::Indirect::clear_f6
933 ups::io::impl::WriteField(
935 std::forward<T>(obj).f7,
936 ups::io::impl::CreateFieldSetter(
938 messages::Indirect::kF7FieldNumber,
939 &messages::Indirect::set_f7,
940 &messages::Indirect::clear_f7
943 ups::io::impl::WriteField(
945 std::forward<T>(obj).f8,
946 ups::io::impl::CreateFieldSetter(
948 messages::Indirect::kF8FieldNumber,
949 &messages::Indirect::mutable_f8,
950 &messages::Indirect::clear_f8
953 ups::io::impl::WriteField(
955 std::forward<T>(obj).f9,
956 ups::io::impl::CreateFieldSetter(
958 messages::Indirect::kF9FieldNumber,
959 &messages::Indirect::mutable_f9,
960 &messages::Indirect::clear_f9
965void WriteProtoStruct(ups::io::WriteContext& ctx,
const Indirect& obj, messages::Indirect& msg) {
966 WriteIndirectStruct(ctx, obj, msg);
969void WriteProtoStruct(ups::io::WriteContext& ctx, Indirect&& obj, messages::Indirect& msg) {
970 WriteIndirectStruct(ctx, std::move(obj), msg);
973Strong ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<Strong>,
const messages::Strong& msg) {
975 .f1 = ups::io::impl::ReadField<USERVER_NAMESPACE::utils::StrongTypedef<Strong::Tag, int32_t>>(
977 ups::io::impl::CreateFieldGetter(msg, messages::Strong::kF1FieldNumber, &messages::Strong::f1)
979 .f2 = ups::io::impl::ReadField<
980 std::optional<USERVER_NAMESPACE::utils::StrongTypedef<Strong::Tag, std::string>>>(
982 ups::io::impl::CreateFieldGetter(
984 messages::Strong::kF2FieldNumber,
985 &messages::Strong::f2,
986 &messages::Strong::has_f2
989 .f3 = ups::io::impl::ReadField<std::vector<USERVER_NAMESPACE::utils::StrongTypedef<Strong::Tag, TestEnum>>>(
991 ups::io::impl::CreateFieldGetter(msg, messages::Strong::kF3FieldNumber, &messages::Strong::f3)
993 .f4 = ups::io::impl::ReadField<std::map<int32_t, USERVER_NAMESPACE::utils::StrongTypedef<Strong::Tag, Simple>>>(
995 ups::io::impl::CreateFieldGetter(msg, messages::Strong::kF4FieldNumber, &messages::Strong::f4)
997 .test_oneof = ups::io::impl::ReadField<Strong::OneofType>(
999 ups::io::impl::CreateFieldGetter(
1001 messages::Strong::kF5FieldNumber,
1002 &messages::Strong::f5,
1003 &messages::Strong::has_f5
1009template <
typename T>
1010void WriteStrongStruct(ups::io::WriteContext& ctx, T&& obj, messages::Strong& msg) {
1011 ups::io::impl::WriteField(
1013 std::forward<T>(obj).f1,
1014 ups::io::impl::CreateFieldSetter(
1016 messages::Strong::kF1FieldNumber,
1017 &messages::Strong::set_f1,
1018 &messages::Strong::clear_f1
1021 ups::io::impl::WriteField(
1023 std::forward<T>(obj).f2,
1024 ups::io::impl::CreateFieldSetter(
1026 messages::Strong::kF2FieldNumber,
1027 &messages::Strong::set_f2<
const std::string&>,
1028 &messages::Strong::set_f2<std::string>,
1029 &messages::Strong::clear_f2
1032 ups::io::impl::WriteField(
1034 std::forward<T>(obj).f3,
1035 ups::io::impl::CreateFieldSetter(
1037 messages::Strong::kF3FieldNumber,
1038 &messages::Strong::mutable_f3,
1039 &messages::Strong::clear_f3
1042 ups::io::impl::WriteField(
1044 std::forward<T>(obj).f4,
1045 ups::io::impl::CreateFieldSetter(
1047 messages::Strong::kF4FieldNumber,
1048 &messages::Strong::mutable_f4,
1049 &messages::Strong::clear_f4
1052 ups::io::impl::WriteField(
1054 std::forward<T>(obj).test_oneof,
1055 ups::io::impl::CreateFieldSetter(
1057 messages::Strong::kF1FieldNumber,
1058 &messages::Strong::mutable_f5,
1059 &messages::Strong::clear_f5
1064void WriteProtoStruct(ups::io::WriteContext& ctx,
const Strong& obj, messages::Strong& msg) {
1065 WriteStrongStruct(ctx, obj, msg);
1068void WriteProtoStruct(ups::io::WriteContext& ctx, Strong&& obj, messages::Strong& msg) {
1069 WriteStrongStruct(ctx, std::move(obj), msg);
1072Erroneous ReadProtoStruct(ups::io::ReadContext& ctx, ups::io::To<Erroneous>,
const messages::Erroneous& msg) {
1074 .f1 = ups::io::impl::ReadField<std::optional<ConversionFailure>>(
1076 ups::io::impl::CreateFieldGetter(
1078 messages::Erroneous::kF1FieldNumber,
1079 &messages::Erroneous::f1,
1080 &messages::Erroneous::has_f1
1083 .f2 = ups::io::impl::ReadField<std::vector<ConversionFailure>>(
1085 ups::io::impl::CreateFieldGetter(msg, messages::Erroneous::kF2FieldNumber, &messages::Erroneous::f2)
1087 .f3 = ups::io::impl::ReadField<std::unordered_map<int32_t, ConversionFailure>>(
1089 ups::io::impl::CreateFieldGetter(msg, messages::Erroneous::kF3FieldNumber, &messages::Erroneous::f3)
1091 .test_oneof = ups::io::impl::ReadField<Erroneous::OneofType>(
1093 ups::io::impl::CreateFieldGetter(
1095 messages::Erroneous::kF4FieldNumber,
1096 &messages::Erroneous::f4,
1097 &messages::Erroneous::has_f4
1103void WriteProtoStruct(ups::io::WriteContext& ctx,
const Erroneous& obj, messages::Erroneous& msg) {
1104 ups::io::impl::WriteField(
1107 ups::io::impl::CreateFieldSetter(
1109 messages::Erroneous::kF1FieldNumber,
1110 &messages::Erroneous::mutable_f1,
1111 &messages::Erroneous::clear_f1
1114 ups::io::impl::WriteField(
1117 ups::io::impl::CreateFieldSetter(
1119 messages::Erroneous::kF2FieldNumber,
1120 &messages::Erroneous::mutable_f2,
1121 &messages::Erroneous::clear_f2
1124 ups::io::impl::WriteField(
1127 ups::io::impl::CreateFieldSetter(
1129 messages::Erroneous::kF3FieldNumber,
1130 &messages::Erroneous::mutable_f3,
1131 &messages::Erroneous::clear_f3
1134 ups::io::impl::WriteField(
1137 ups::io::impl::CreateFieldSetter(
1139 messages::Erroneous::kF4FieldNumber,
1140 &messages::Erroneous::mutable_f4,
1141 &messages::Erroneous::clear_f4
1146void CheckScalarEqual(
const Scalar& obj,
const messages::Scalar& msg) {
1147 EXPECT_EQ(obj.f1, msg.f1());
1148 EXPECT_EQ(obj.f2, msg.f2());
1149 EXPECT_EQ(obj.f3, msg.f3());
1150 EXPECT_EQ(obj.f4, msg.f4());
1151 EXPECT_EQ(obj.f5, msg.f5());
1152 EXPECT_EQ(obj.f6, msg.f6());
1153 EXPECT_EQ(obj.f7, msg.f7());
1154 EXPECT_EQ(obj.f8, msg.f8());
1155 EXPECT_EQ(obj.f9, msg.f9());
1156 EXPECT_EQ(obj.f10,
static_cast<TestEnum>(msg.f10()));
1157 EXPECT_EQ(
static_cast<
int>(obj.f11), msg.f11());
1160void CheckWellKnownStdEqual(
const WellKnownStd& obj,
const messages::WellKnownStd& msg) {
1161 using TimeType = std::chrono::time_point<std::chrono::system_clock>;
1164 obj.f1.time_since_epoch(),
1165 std::chrono::duration_cast<TimeType::duration>(std::chrono::nanoseconds{
1166 ::google::protobuf::util::TimeUtil::TimestampToNanoseconds(msg.f1())
1171 std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::nanoseconds{
1172 ::google::protobuf::util::TimeUtil::DurationToNanoseconds(msg.f2())
1176 EXPECT_EQ(
static_cast<
int>(obj.f3.year()), msg.f3().year());
1177 EXPECT_EQ(
static_cast<
unsigned>(obj.f3.month()),
static_cast<
unsigned>(msg.f3().month()));
1178 EXPECT_EQ(
static_cast<
unsigned>(obj.f3.day()),
static_cast<
unsigned>(msg.f3().day()));
1180 EXPECT_EQ(obj.f4.hours().count(), msg.f4().hours());
1181 EXPECT_EQ(obj.f4.minutes().count(), msg.f4().minutes());
1182 EXPECT_EQ(obj.f4.seconds().count(), msg.f4().seconds());
1184 obj.f4.subseconds().count(),
1185 std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::nanoseconds(msg.f4().nanos())).count()
1189void CheckWellKnownUsrvEqual(
const WellKnownUsrv& obj,
const messages::WellKnownUsrv& msg) {
1190 EXPECT_EQ(obj.f1.GetProtobufAny().type_url(), msg.f1().type_url());
1191 EXPECT_EQ(obj.f1.GetProtobufAny().value(), msg.f1().value());
1193 EXPECT_EQ(obj.f2.Seconds().count(), msg.f2().seconds());
1194 EXPECT_EQ(obj.f2.Nanos().count(), msg.f2().nanos());
1196 EXPECT_EQ(obj.f3.Seconds().count(), msg.f3().seconds());
1197 EXPECT_EQ(obj.f3.Nanos().count(), msg.f3().nanos());
1199 EXPECT_EQ(obj.f4.YearNum(), msg.f4().year());
1200 EXPECT_EQ(obj.f4.MonthNum(), msg.f4().month());
1201 EXPECT_EQ(obj.f4.DayNum(), msg.f4().day());
1203 EXPECT_EQ(obj.f5.Hours().count(), msg.f5().hours());
1204 EXPECT_EQ(obj.f5.Minutes().count(), msg.f5().minutes());
1205 EXPECT_EQ(obj.f5.Seconds().count(), msg.f5().seconds());
1206 EXPECT_EQ(obj.f5.Nanos().count(), msg.f5().nanos());
1208 EXPECT_EQ(obj.f6.Hours().count(), msg.f6().hours());
1209 EXPECT_EQ(obj.f6.Minutes().count(), msg.f6().minutes());
1210 EXPECT_EQ(obj.f6.Seconds().count(), msg.f6().seconds());
1212 obj.f6.Subseconds().count(),
1213 std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::nanoseconds(msg.f6().nanos())).count()
1216 EXPECT_EQ(obj.f7, decimal64::Decimal<3>(msg.f7().value()));
1217 EXPECT_EQ(ToString(obj.f7), msg.f7().value());
1220void CheckWellKnownJsonEqual(
const WellKnownJson& obj,
const messages::WellKnownJson& msg) {
1221 CheckJsonValue(obj.f1, msg.f1());
1222 CheckJsonValue(obj.f2.GetValue(), msg.f2());
1223 CheckJsonValue(obj.f3.GetValue(), msg.f3());
1226void CheckOptionalEqual(
const Optional& obj,
const messages::Optional& msg) {
1228 EXPECT_TRUE(msg.has_f1());
1229 EXPECT_EQ(obj.f1.value(), msg.f1());
1231 EXPECT_FALSE(msg.has_f1());
1235 EXPECT_TRUE(msg.has_f2());
1236 EXPECT_EQ(obj.f2.value(), msg.f2());
1238 EXPECT_FALSE(msg.has_f2());
1242 EXPECT_TRUE(msg.has_f3());
1243 EXPECT_EQ(obj.f3.value(),
static_cast<TestEnum>(msg.f3()));
1245 EXPECT_FALSE(msg.has_f3());
1249 EXPECT_TRUE(msg.has_f4());
1250 CheckSimpleEqual(obj.f4.value(), msg.f4());
1252 EXPECT_FALSE(msg.has_f4());
1256void CheckRepeatedEqual(
const Repeated& obj,
const messages::Repeated& msg) {
1257 ASSERT_EQ(obj.f1.size(),
static_cast<std::size_t>(msg.f1().size()));
1259 for (
int i = 0; i < msg.f1().size(); ++i) {
1260 EXPECT_EQ(obj.f1[i], msg.f1()[i]);
1263 ASSERT_EQ(obj.f2.size(),
static_cast<std::size_t>(msg.f2().size()));
1265 for (
int i = 0; i < msg.f2().size(); ++i) {
1266 EXPECT_EQ(obj.f2[i], msg.f2()[i]);
1269 ASSERT_EQ(obj.f3.size(),
static_cast<std::size_t>(msg.f3().size()));
1271 for (
int i = 0; i < msg.f3().size(); ++i) {
1272 EXPECT_EQ(
static_cast<
int>(obj.f3[i]), msg.f3()[i]);
1275 ASSERT_EQ(obj.f4.size(),
static_cast<std::size_t>(msg.f4().size()));
1277 for (
int i = 0; i < msg.f4().size(); ++i) {
1278 EXPECT_EQ(obj.f4[i].f1, msg.f4()[i].f1());
1282void CheckMapEqual(
const Map& obj,
const messages::Map& msg) {
1283 ASSERT_EQ(obj.f1.size(),
static_cast<std::size_t>(msg.f1().size()));
1285 for (
const auto& [key, value] : msg.f1()) {
1286 ASSERT_EQ(obj.f1.count(key), std::size_t{1});
1287 EXPECT_EQ(obj.f1.at(key), value);
1290 ASSERT_EQ(obj.f2.size(),
static_cast<std::size_t>(msg.f2().size()));
1292 for (
const auto& [key, value] : msg.f2()) {
1293 ASSERT_EQ(obj.f2.count(key), std::size_t{1});
1294 EXPECT_EQ(obj.f2.at(key), value);
1297 ASSERT_EQ(obj.f3.size(),
static_cast<std::size_t>(msg.f3().size()));
1299 for (
const auto& [key, value] : msg.f3()) {
1300 ASSERT_EQ(obj.f3.count(key), std::size_t{1});
1301 EXPECT_EQ(obj.f3.at(key),
static_cast<TestEnum>(value));
1304 ASSERT_EQ(obj.f4.size(),
static_cast<std::size_t>(msg.f4().size()));
1306 for (
const auto& [key, value] : msg.f4()) {
1307 ASSERT_EQ(obj.f4.count(key), std::size_t{1});
1308 CheckSimpleEqual(obj.f4.at(key), value);
1312void CheckOneofEqual(
const Oneof& obj,
const messages::Oneof& msg) {
1313 if (!obj.test_oneof.ContainsAny()) {
1314 EXPECT_EQ(msg.test_oneof_case(), messages::Oneof::TEST_ONEOF_NOT_SET);
1317 if (obj.test_oneof.Contains(0)) {
1318 EXPECT_TRUE(msg.has_f1());
1319 EXPECT_EQ(obj.test_oneof.Get<0>(), msg.f1());
1321 EXPECT_FALSE(msg.has_f1());
1324 if (obj.test_oneof.Contains(1)) {
1325 EXPECT_TRUE(msg.has_f2());
1326 EXPECT_EQ(obj.test_oneof.Get<1>(), msg.f2());
1328 EXPECT_FALSE(msg.has_f2());
1331 if (obj.test_oneof.Contains(2)) {
1332 EXPECT_TRUE(msg.has_f3());
1333 EXPECT_EQ(obj.test_oneof.Get<2>(),
static_cast<TestEnum>(msg.f3()));
1335 EXPECT_FALSE(msg.has_f3());
1338 if (obj.test_oneof.Contains(3)) {
1339 EXPECT_TRUE(msg.has_f4());
1340 CheckSimpleEqual(obj.test_oneof.Get<3>(), msg.f4());
1342 EXPECT_FALSE(msg.has_f4());
1346void CheckIndirectEqual(
const Indirect& obj,
const messages::Indirect& msg) {
1347 CheckSimpleEqual(*obj.f1, msg.f1());
1350 EXPECT_TRUE(msg.has_f2());
1351 EXPECT_EQ((*obj.f2.value()).Seconds().count(), msg.f2().seconds());
1352 EXPECT_EQ((*obj.f2.value()).Nanos().count(), msg.f2().nanos());
1354 EXPECT_FALSE(msg.has_f2());
1357 ASSERT_EQ(obj.f3.size(),
static_cast<std::size_t>(msg.f3().size()));
1359 for (
int i = 0; i < msg.f3().size(); ++i) {
1360 CheckSimpleEqual(*obj.f3[i], msg.f3()[i]);
1363 ASSERT_EQ(obj.f4.size(),
static_cast<std::size_t>(msg.f4().size()));
1365 for (
const auto& [key, value] : msg.f4()) {
1366 ASSERT_EQ(obj.f4.count(key), std::size_t{1});
1367 CheckSimpleEqual(*obj.f4.at(key), value);
1370 if (!obj.test_oneof.ContainsAny()) {
1371 EXPECT_EQ(msg.test_oneof_case(), messages::Indirect::TEST_ONEOF_NOT_SET);
1374 if (obj.test_oneof.Contains(0)) {
1375 EXPECT_TRUE(msg.has_f5());
1376 CheckSimpleEqual(*obj.test_oneof.Get<0>(), msg.f5());
1378 EXPECT_FALSE(msg.has_f5());
1381 if (obj.test_oneof.Contains(1)) {
1382 EXPECT_TRUE(msg.has_f6());
1383 EXPECT_EQ(*obj.test_oneof.Get<1>(), msg.f6());
1385 EXPECT_FALSE(msg.has_f6());
1388 EXPECT_EQ(*obj.f7, msg.f7());
1389 ASSERT_EQ((*obj.f8).size(),
static_cast<std::size_t>(msg.f8().size()));
1391 for (
int i = 0; i < msg.f8().size(); ++i) {
1392 EXPECT_EQ(*((*obj.f8)[i]),
static_cast<TestEnum>(msg.f8()[i]));
1395 ASSERT_EQ((*obj.f9).size(),
static_cast<std::size_t>(msg.f9().size()));
1397 for (
const auto& [key, value] : msg.f9()) {
1398 ASSERT_EQ((*obj.f9).count(key), std::size_t{1});
1399 CheckSimpleEqual(*((*obj.f9).at(key)), value);
1403void CheckStrongEqual(
const Strong& obj,
const messages::Strong& msg) {
1404 EXPECT_EQ(obj.f1.GetUnderlying(), msg.f1());
1407 EXPECT_TRUE(msg.has_f2());
1408 EXPECT_EQ(obj.f2.value().GetUnderlying(), msg.f2());
1410 EXPECT_FALSE(msg.has_f2());
1413 ASSERT_EQ(obj.f3.size(),
static_cast<std::size_t>(msg.f3().size()));
1415 for (
int i = 0; i < msg.f3().size(); ++i) {
1416 EXPECT_EQ(
static_cast<
int>(obj.f3[i].GetUnderlying()), msg.f3()[i]);
1419 ASSERT_EQ(obj.f4.size(),
static_cast<std::size_t>(msg.f4().size()));
1421 for (
const auto& [key, value] : msg.f4()) {
1422 ASSERT_EQ(obj.f4.count(key), std::size_t{1});
1423 CheckSimpleEqual(obj.f4.at(key).GetUnderlying(), value);
1426 if (!obj.test_oneof.ContainsAny()) {
1427 EXPECT_EQ(msg.test_oneof_case(), messages::Strong::TEST_ONEOF_NOT_SET);
1430 if (obj.test_oneof.Contains(0)) {
1431 EXPECT_TRUE(msg.has_f5());
1432 EXPECT_EQ(obj.test_oneof.Get<0>().GetUnderlying().Seconds().count(), msg.f5().seconds());
1433 EXPECT_EQ(obj.test_oneof.Get<0>().GetUnderlying().Nanos().count(), msg.f5().nanos());
1436 EXPECT_FALSE(msg.has_f5());