Jarstat
65 строк · 1.6 Кб
1using Jarstat.Domain.Primitives;2using System.Text.Json.Serialization;3
4namespace Jarstat.Domain.Shared;5
6public class Error : IEquatable<Error>7{
8public static readonly Error None = new Error(string.Empty, string.Empty);9
10[JsonConstructor]11public Error(string code, string message, params string[] parameters)12{13Code = code;14Message = message;15Parameters = parameters;16}17
18public string Code { get; }19public string Message { get; }20public string[] Parameters { get; private set; }21
22public Error WithParameters(params string[] parameters) => new Error(Code, Message, parameters);23
24public static implicit operator string(Error error) => error.Code;25
26public static bool operator ==(Error? first, Error? second)27{28return first is not null && second is not null && first.Equals(second);29}30
31public static bool operator !=(Error? first, Error? second)32{33return !(first == second);34}35
36public bool Equals(Error? other)37{38if (other is null)39return false;40
41if (other.GetType() != GetType())42return false;43
44return other.Code == Code && other.Message == Message;45}46
47public override bool Equals(object? obj)48{49if (obj is null)50return false;51
52if (obj.GetType() != GetType())53return false;54
55if (obj is not Error error)56return false;57
58return error.Code == Code && error.Message == Message;59}60
61public override int GetHashCode()62{63return Code.GetHashCode() * 79;64}65}
66