Files
Discord.Net/src/Discord.Net.Core/Utils/Comparers.cs
NaN 257f246d1d Format the project with 'dotnet format' (#2551)
* Sync and Re-Format

* Fix Title string.

* Fix indentation.
2023-02-13 18:45:59 +01:00

54 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
namespace Discord
{
/// <summary>
/// Represents a collection of <see cref="IEqualityComparer{T}"/> for various Discord objects.
/// </summary>
public static class DiscordComparers
{
/// <summary>
/// Gets an <see cref="IEqualityComparer{T}"/> to be used to compare users.
/// </summary>
public static IEqualityComparer<IUser> UserComparer { get; } = new EntityEqualityComparer<IUser, ulong>();
/// <summary>
/// Gets an <see cref="IEqualityComparer{T}"/> to be used to compare guilds.
/// </summary>
public static IEqualityComparer<IGuild> GuildComparer { get; } = new EntityEqualityComparer<IGuild, ulong>();
/// <summary>
/// Gets an <see cref="IEqualityComparer{T}"/> to be used to compare channels.
/// </summary>
public static IEqualityComparer<IChannel> ChannelComparer { get; } = new EntityEqualityComparer<IChannel, ulong>();
/// <summary>
/// Gets an <see cref="IEqualityComparer{T}"/> to be used to compare roles.
/// </summary>
public static IEqualityComparer<IRole> RoleComparer { get; } = new EntityEqualityComparer<IRole, ulong>();
/// <summary>
/// Gets an <see cref="IEqualityComparer{T}"/> to be used to compare messages.
/// </summary>
public static IEqualityComparer<IMessage> MessageComparer { get; } = new EntityEqualityComparer<IMessage, ulong>();
private sealed class EntityEqualityComparer<TEntity, TId> : EqualityComparer<TEntity>
where TEntity : IEntity<TId>
where TId : IEquatable<TId>
{
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;
}
}
}
}