Added proper equality checks to Color, Permissions and StringEnums
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
namespace Discord
|
||||
using System;
|
||||
|
||||
namespace Discord
|
||||
{
|
||||
public sealed class ChannelType : StringEnum
|
||||
public sealed class ChannelType : StringEnum, IEquatable<ChannelType>
|
||||
{
|
||||
/// <summary> A text-only channel. </summary>
|
||||
public static ChannelType Text { get; } = new ChannelType("text");
|
||||
@@ -25,10 +27,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
public static implicit operator ChannelType(string value) => FromString(value);
|
||||
public static bool operator ==(ChannelType a, ChannelType b) => a?.Value == b?.Value;
|
||||
public static bool operator !=(ChannelType a, ChannelType b) => a?.Value != b?.Value;
|
||||
public override bool Equals(object obj) => (obj as ChannelType)?.Value == Value;
|
||||
public override int GetHashCode() => Value.GetHashCode();
|
||||
}
|
||||
public static implicit operator ChannelType(string value) => FromString(value);
|
||||
public static bool operator ==(ChannelType a, ChannelType b) => ((object)a == null && (object)b == null) || (a?.Equals(b) ?? false);
|
||||
public static bool operator !=(ChannelType a, ChannelType b) => !(a == b);
|
||||
public override int GetHashCode() => Value.GetHashCode();
|
||||
public override bool Equals(object obj) => (obj as ChannelType)?.Equals(this) ?? false;
|
||||
public bool Equals(ChannelType type) => type != null && type.Value == Value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,10 +25,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
public static implicit operator PermissionTarget(string value) => FromString(value);
|
||||
public static bool operator ==(PermissionTarget a, PermissionTarget b) => a?.Value == b?.Value;
|
||||
public static bool operator !=(PermissionTarget a, PermissionTarget b) => a?.Value != b?.Value;
|
||||
public override bool Equals(object obj) => (obj as PermissionTarget)?.Value == Value;
|
||||
public override int GetHashCode() => Value.GetHashCode();
|
||||
}
|
||||
public static implicit operator PermissionTarget(string value) => FromString(value);
|
||||
public static bool operator ==(PermissionTarget a, PermissionTarget b) => ((object)a == null && (object)b == null) || (a?.Equals(b) ?? false);
|
||||
public static bool operator !=(PermissionTarget a, PermissionTarget b) => !(a == b);
|
||||
public override int GetHashCode() => Value.GetHashCode();
|
||||
public override bool Equals(object obj) => (obj as PermissionTarget)?.Equals(this) ?? false;
|
||||
public bool Equals(PermissionTarget type) => type != null && type.Value == Value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,10 +29,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
public static implicit operator UserStatus(string value) => FromString(value);
|
||||
public static bool operator ==(UserStatus a, UserStatus b) => a?.Value == b?.Value;
|
||||
public static bool operator !=(UserStatus a, UserStatus b) => a?.Value != b?.Value;
|
||||
public override bool Equals(object obj) => (obj as UserStatus)?.Value == Value;
|
||||
public override int GetHashCode() => Value.GetHashCode();
|
||||
}
|
||||
|
||||
public static implicit operator UserStatus(string value) => FromString(value);
|
||||
public static bool operator ==(UserStatus a, UserStatus b) => ((object)a == null && (object)b == null) || (a?.Equals(b) ?? false);
|
||||
public static bool operator !=(UserStatus a, UserStatus b) => !(a == b);
|
||||
public override int GetHashCode() => Value.GetHashCode();
|
||||
public override bool Equals(object obj) => (obj as UserStatus)?.Equals(this) ?? false;
|
||||
public bool Equals(UserStatus type) => type != null && type.Value == Value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Discord
|
||||
{
|
||||
public sealed class Color
|
||||
public sealed class Color : IEquatable<Color>
|
||||
{
|
||||
public static readonly Color Default = PresetColor(0);
|
||||
|
||||
@@ -77,8 +77,12 @@ namespace Discord
|
||||
_rawValue = (_rawValue & mask) | ((uint)value << bit);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj) => obj is Color && (obj as Color)._rawValue == _rawValue;
|
||||
public override int GetHashCode() => unchecked(_rawValue.GetHashCode() + 1678);
|
||||
public override string ToString() => '#' + _rawValue.ToString("X");
|
||||
}
|
||||
public static bool operator ==(Color a, Color b) => ((object)a == null && (object)b == null) || (a?.Equals(b) ?? false);
|
||||
public static bool operator !=(Color a, Color b) => !(a == b);
|
||||
public override int GetHashCode() => _rawValue.GetHashCode();
|
||||
public override bool Equals(object obj) => (obj as Color)?.Equals(this) ?? false;
|
||||
public bool Equals(Color color) => color != null && color._rawValue == _rawValue;
|
||||
|
||||
public override string ToString() => '#' + _rawValue.ToString("X");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace Discord
|
||||
public bool ManageChannel { get { return GetBit(PermissionsBits.ManageChannel); } set { SetBit(PermissionsBits.ManageChannel, value); } }
|
||||
}
|
||||
|
||||
public abstract class Permissions
|
||||
public abstract class Permissions : IEquatable<Permissions>
|
||||
{
|
||||
private bool _isLocked;
|
||||
private uint _rawValue;
|
||||
@@ -144,8 +144,11 @@ namespace Discord
|
||||
throw new InvalidOperationException("Unable to edit cached permissions directly, use Copy() to make an editable copy.");
|
||||
}
|
||||
|
||||
public override bool Equals(object obj) => obj is Permissions && (obj as Permissions)._rawValue == _rawValue;
|
||||
public override int GetHashCode() => unchecked(_rawValue.GetHashCode() + 393);
|
||||
public static bool operator ==(Permissions a, Permissions b) => ((object)a == null && (object)b == null) || (a?.Equals(b) ?? false);
|
||||
public static bool operator !=(Permissions a, Permissions b) => !(a == b);
|
||||
public override int GetHashCode() => _rawValue.GetHashCode();
|
||||
public override bool Equals(object obj) => (obj as Permissions)?.Equals(this) ?? false;
|
||||
public bool Equals(Permissions permission) => permission?._rawValue == _rawValue;
|
||||
}
|
||||
|
||||
public sealed class DualChannelPermissions
|
||||
@@ -231,9 +234,10 @@ namespace Discord
|
||||
}
|
||||
public DualChannelPermissions Copy() => new DualChannelPermissions(Allow.RawValue, Deny.RawValue);
|
||||
|
||||
public override bool Equals(object obj) => obj is DualChannelPermissions &&
|
||||
(obj as DualChannelPermissions).Allow.Equals(Allow) &&
|
||||
(obj as DualChannelPermissions).Deny.Equals(Deny);
|
||||
public override int GetHashCode() => unchecked(Allow.GetHashCode() + Deny.GetHashCode() + 1724);
|
||||
}
|
||||
public static bool operator ==(DualChannelPermissions a, DualChannelPermissions b) => ((object)a == null && (object)b == null) || (a?.Equals(b) ?? false);
|
||||
public static bool operator !=(DualChannelPermissions a, DualChannelPermissions b) => !(a == b);
|
||||
public override int GetHashCode() => Allow.GetHashCode() ^ Deny.GetHashCode();
|
||||
public override bool Equals(object obj) => (obj as DualChannelPermissions)?.Equals(this) ?? false;
|
||||
public bool Equals(DualChannelPermissions permission) => permission != null && permission.Allow == Allow && permission.Deny == Deny;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user