using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Text; namespace Pilz.Cryptography { public abstract class UniquieID : IUniquieID { protected static int currentSimpleID = 0; [JsonProperty(nameof(ID))] protected string _iD; [JsonIgnore] public virtual bool SimpleMode { get; set; } = false; [JsonIgnore] public virtual bool GenerateOnGet { get; set; } = false; [JsonIgnore] public virtual bool HasID => !string.IsNullOrEmpty(_iD); [JsonIgnore] public virtual string ID { get { if (GenerateOnGet) GenerateIfNull(); return _iD; } internal set => _iD = value; } public abstract void Generate(); public abstract override bool Equals(object obj); public virtual void GenerateIfNull() { if (!HasID) Generate(); } public override string ToString() => ID; public override int GetHashCode() { return -1430039477 + EqualityComparer.Default.GetHashCode(_iD); } public static implicit operator string(UniquieID id) => id.ID; public static bool operator ==(UniquieID left, UniquieID right) => left.ID.Equals(right.ID); public static bool operator !=(UniquieID left, UniquieID right) => !left.ID.Equals(right.ID); } }