ipldNodeEquals function

bool ipldNodeEquals(
  1. IPLDNode a,
  2. IPLDNode b
)

Structural equality for IPLDNode values.

Implementation

bool ipldNodeEquals(IPLDNode a, IPLDNode b) {
  if (a.kind != b.kind) return false;
  switch (a.kind) {
    case Kind.NULL:
      return true;
    case Kind.BOOL:
      return a.boolValue == b.boolValue;
    case Kind.INTEGER:
      return a.intValue == b.intValue;
    case Kind.BIG_INT:
      return _bytesEqual(a.bigIntValue, b.bigIntValue);
    case Kind.FLOAT:
      return a.floatValue == b.floatValue;
    case Kind.STRING:
      return a.stringValue == b.stringValue;
    case Kind.BYTES:
      return _bytesEqual(a.bytesValue, b.bytesValue);
    case Kind.LINK:
      return a.linkValue.codec == b.linkValue.codec &&
          _bytesEqual(a.linkValue.multihash, b.linkValue.multihash);
    case Kind.LIST:
      if (a.listValue.values.length != b.listValue.values.length) {
        return false;
      }
      for (var i = 0; i < a.listValue.values.length; i++) {
        if (!ipldNodeEquals(a.listValue.values[i], b.listValue.values[i])) {
          return false;
        }
      }
      return true;
    case Kind.MAP:
      if (a.mapValue.entries.length != b.mapValue.entries.length) {
        return false;
      }
      for (final entry in a.mapValue.entries) {
        final other = _optionalField(b.mapValue, entry.key);
        if (other == null || !ipldNodeEquals(entry.value, other)) {
          return false;
        }
      }
      return true;
    // coverage:ignore-start
    default:
      return false;
    // coverage:ignore-end
  }
}