compareMessages function

List<Difference> compareMessages(
  1. GeneratedMessage message1,
  2. GeneratedMessage message2
)

Implementation

List<Difference> compareMessages(
    GeneratedMessage message1, GeneratedMessage message2) {
  final differences = <Difference>[];
  final descriptor1 = message1.info_;

  for (var field in descriptor1.byName.values) {
    final fieldName = field.name;
    final fieldValue1 = message1.getField(field.tagNumber);
    final fieldValue2 = message2.getField(field.tagNumber);

    if (fieldValue1 != null && fieldValue2 != null) {
      if (fieldValue1 is GeneratedMessage && fieldValue2 is GeneratedMessage) {
        // Recursively compare nested objects
        final nestedDifferences = compareMessages(fieldValue1, fieldValue2);
        differences.addAll(nestedDifferences);
      } else if (fieldValue1 != fieldValue2) {
        differences.add(Difference(fieldName, fieldValue1, fieldValue2));
      }
    }
  }

  return differences;
}