ipldNodeEquals function
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
}
}