docs: public String diff(StoreDefinition other, String thisName, String otherName) {
          if (this.equals(other)) {
              return "StoreDefinitions are identical.";
          } else {
              StringBuilder sb = new StringBuilder();
              if (!this.getName().equals(other.getName())) {
                  addToDiff("Name", this.getName(), other.getName(), sb, thisName, otherName);
              }
              if (!this.getType().equals(other.getType())) {
                  addToDiff("Type", this.getType(), other.getType(), sb, thisName, otherName);
              }
              if (this.getReplicationFactor() != other.getReplicationFactor()) {
                  addToDiff("Replication factor", this.getReplicationFactor(), other.getReplicationFactor(), sb, thisName, otherName);
              }
              if (this.getRequiredReads() != other.getRequiredReads()) {
                  addToDiff("Required reads", this.getRequiredReads(), other.getRequiredReads(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getPreferredReads(), other.getPreferredReads())) {
                  addToDiff("Preferred reads", this.getPreferredReads(), other.getPreferredReads(), sb, thisName, otherName);
              }
              if (this.getRequiredWrites() != other.getRequiredWrites()) {
                  addToDiff("Required writes", this.getRequiredWrites(), other.getRequiredWrites(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getPreferredWrites(), other.getPreferredWrites())) {
                  addToDiff("Preferred writes", this.getPreferredWrites(), other.getPreferredWrites(), sb, thisName, otherName);
              }
              if (!this.getKeySerializer().equals(other.getKeySerializer())) {
                  addToDiff("Key serializer", this.getKeySerializer(), other.getKeySerializer(), sb, thisName, otherName);
              }
              if (!this.getValueSerializer().equals(other.getValueSerializer())) {
                  addToDiff("Value serializer", this.getValueSerializer(), other.getValueSerializer(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getTransformsSerializer() != null ? this.getTransformsSerializer(): null,
                      other.getTransformsSerializer() != null ? other.getTransformsSerializer(): null)) {
                  // FIXME: This ternary operator is useless. Leaving it as is for consistency with equals().
                  addToDiff("Transforms Serializer", this.getTransformsSerializer(), other.getTransformsSerializer(), sb, thisName, otherName);
              }
              if (this.getRoutingPolicy() != other.getRoutingPolicy()) {
                  addToDiff("Routing policy", this.getRoutingPolicy().toDisplay(), other.getRoutingPolicy().toDisplay(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getViewTargetStoreName(), other.getViewTargetStoreName())) {
                  addToDiff("View target store name", this.getViewTargetStoreName(), other.getViewTargetStoreName(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getValueTransformation() != null ? this.getValueTransformation().getClass(): null,
                      other.getValueTransformation() != null ? other.getValueTransformation().getClass() : null)) {
                  // FIXME: This class comparison is irrelevant since it's always a String. Leaving it as is for consistency with equals().
                  addToDiff("Value transformation", this.getValueTransformation(), other.getValueTransformation(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getZoneReplicationFactor() != null ? this.getZoneReplicationFactor().getClass(): null,
                      other.getZoneReplicationFactor() != null ? other.getZoneReplicationFactor().getClass(): null)) {
                  // FIXME: This class comparison is irrelevant since it's always a HashMap. Leaving it as is for consistency with equals().
                  addToDiff("Zone replication factor", this.getZoneReplicationFactor(), other.getZoneReplicationFactor(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getZoneCountReads(), other.getZoneCountReads())) {
                  addToDiff("Zone count reads", this.getZoneCountReads(), other.getZoneCountReads(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getZoneCountWrites(), other.getZoneCountWrites())) {
                  addToDiff("Zone count writes", this.getZoneCountWrites(), other.getZoneCountWrites(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getRetentionDays(), other.getRetentionDays())) {
                  addToDiff("Retention days", this.getRetentionDays(), other.getRetentionDays(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getRetentionScanThrottleRate(), other.getRetentionScanThrottleRate())) {
                  addToDiff("Retention scan throttle rate", this.getRetentionScanThrottleRate(), other.getRetentionScanThrottleRate(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getSerializerFactory() != null ? getSerializerFactory() : null,
                      other.getSerializerFactory() != null ? other.getSerializerFactory(): null)) {
                  addToDiff("Serialization Factory", this.getSerializerFactory(), other.getSerializerFactory(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getHintedHandoffStrategyType(), other.getHintedHandoffStrategyType())) {
                  addToDiff("Hinted handoff strategy", this.getHintedHandoffStrategyType().toDisplay(), other.getHintedHandoffStrategyType().toDisplay(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getHintPrefListSize(), other.getHintPrefListSize())) {
                  addToDiff("Hinted preference list size", this.getHintPrefListSize(), other.getHintPrefListSize(), sb, thisName, otherName);
              }
              if (!Objects.equal(this.getMemoryFootprintMB(), other.getMemoryFootprintMB())) {
                  addToDiff("Memory footprint (MB)", this.getMemoryFootprintMB(), other.getMemoryFootprintMB(), sb, thisName, otherName);
              }
              sb.append("All other properties are identical.");
              return sb.toString();
          }
      }