namespace OliverBooth.Data.Web; /// /// Represents a project. /// internal sealed class Project : IEquatable, IProject { /// public string Description { get; private set; } = string.Empty; /// public string HeroUrl { get; private set; } = string.Empty; /// public Guid Id { get; private set; } = Guid.NewGuid(); /// public string Name { get; private set; } = string.Empty; /// public int Rank { get; private set; } /// public string? RemoteTarget { get; private set; } /// public string? RemoteUrl { get; private set; } /// public string Slug { get; private set; } = string.Empty; /// public ProjectStatus Status { get; private set; } = ProjectStatus.Ongoing; /// /// Returns a value indicating whether two instances of are equal. /// /// The first instance of to compare. /// The second instance of to compare. /// /// if and are equal; otherwise, /// . /// public static bool operator ==(Project? left, Project? right) => Equals(left, right); /// /// Returns a value indicating whether two instances of are not equal. /// /// The first instance of to compare. /// The second instance of to compare. /// /// if and are not equal; otherwise, /// . /// public static bool operator !=(Project? left, Project? right) => !(left == right); /// /// Returns a value indicating whether this instance of is equal to another /// instance. /// /// An instance to compare with this instance. /// /// if is equal to this instance; otherwise, /// . /// public bool Equals(Project? other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return Id.Equals(other.Id); } /// /// Returns a value indicating whether this instance is equal to a specified object. /// /// An object to compare with this instance. /// /// if is an instance of and equals the /// value of this instance; otherwise, . /// public override bool Equals(object? obj) { return ReferenceEquals(this, obj) || obj is Project other && Equals(other); } /// /// Gets the hash code for this instance. /// /// The hash code. public override int GetHashCode() { // ReSharper disable once NonReadonlyMemberInGetHashCode return Id.GetHashCode(); } }