| 357 | |
| 358 | template <typename Message> |
| 359 | static Status CheckMessagesEquivalent(const Buffer& l_buf, const Buffer& r_buf) { |
| 360 | ARROW_ASSIGN_OR_RAISE(auto l, ParseFromBuffer<Message>(l_buf)); |
| 361 | ARROW_ASSIGN_OR_RAISE(auto r, ParseFromBuffer<Message>(r_buf)); |
| 362 | |
| 363 | using google::protobuf::util::MessageDifferencer; |
| 364 | |
| 365 | std::string out; |
| 366 | google::protobuf::io::StringOutputStream out_stream{&out}; |
| 367 | MessageDifferencer::StreamReporter reporter{&out_stream}; |
| 368 | |
| 369 | MessageDifferencer differencer; |
| 370 | differencer.set_message_field_comparison(MessageDifferencer::EQUIVALENT); |
| 371 | differencer.ReportDifferencesTo(&reporter); |
| 372 | |
| 373 | if (differencer.Compare(l, r)) { |
| 374 | return Status::OK(); |
| 375 | } |
| 376 | return Status::Invalid("Messages were not equivalent: ", out); |
| 377 | } |
| 378 | |
| 379 | Status CheckMessagesEquivalent(std::string_view message_name, const Buffer& l_buf, |
| 380 | const Buffer& r_buf) { |