using System;
using System.Collections.Generic;
namespace Discord
{
///
/// Represents a collection of for various Discord objects.
///
public static class DiscordComparers
{
///
/// Gets an to be used to compare users.
///
public static IEqualityComparer UserComparer { get; } = new EntityEqualityComparer();
///
/// Gets an to be used to compare guilds.
///
public static IEqualityComparer GuildComparer { get; } = new EntityEqualityComparer();
///
/// Gets an to be used to compare channels.
///
public static IEqualityComparer ChannelComparer { get; } = new EntityEqualityComparer();
///
/// Gets an to be used to compare roles.
///
public static IEqualityComparer RoleComparer { get; } = new EntityEqualityComparer();
///
/// Gets an to be used to compare messages.
///
public static IEqualityComparer MessageComparer { get; } = new EntityEqualityComparer();
private sealed class EntityEqualityComparer : EqualityComparer
where TEntity : IEntity
where TId : IEquatable
{
public override bool Equals(TEntity x, TEntity y)
{
return (x, y) switch
{
(null, null) => true,
(null, _) => false,
(_, null) => false,
_ => x.Id.Equals(y.Id)
};
}
public override int GetHashCode(TEntity obj)
{
return obj?.Id.GetHashCode() ?? 0;
}
}
}
}