namespace Recyclarr.Common; public sealed class GenericEqualityComparer : IEqualityComparer { private readonly Func _equalsPredicate; private readonly Func _hashPredicate; public GenericEqualityComparer(Func equalsPredicate, Func hashPredicate) { _equalsPredicate = equalsPredicate; _hashPredicate = hashPredicate; } public bool Equals(T? x, T? y) { if (ReferenceEquals(x, y)) { return true; } if (ReferenceEquals(x, null)) { return false; } if (ReferenceEquals(y, null)) { return false; } if (x.GetType() != y.GetType()) { return false; } return _equalsPredicate(x, y); } public int GetHashCode(T obj) { return _hashPredicate(obj); } }