using Newtonsoft.Json; namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock { public class VersionInfo : IVersionInfo { /// /// Holds info about firmware- and hardware version of a lock and the type of lock (lock version). /// private VersionInfo() { } /// /// Holds the firmware version of the lock. /// public int FirmwareVersion { get; private set; } = 0; /// /// Holds the hardware version (revision) of the lock. /// public int HardwareVersion { get; private set; } = 0; /// /// Holds lock version (2 – classic, 3 – plus, 4 – GPS). /// public int LockVersion { get; private set; } = 0; public override bool Equals(object obj) => Equals(obj as VersionInfo); public bool Equals(VersionInfo other) { if (ReferenceEquals(other, null)) return false; if (ReferenceEquals(this, other)) return true; if (GetType() != other.GetType()) return false; return ToString() == other.ToString(); } public override int GetHashCode() => ToString().GetHashCode(); public override string ToString() => JsonConvert.SerializeObject(this); public static bool operator ==(VersionInfo lhs, VersionInfo rhs) { if (ReferenceEquals(lhs, null)) return ReferenceEquals(rhs, null) ? true /*null == null = true*/: false; return lhs.Equals(rhs); } public static bool operator !=(VersionInfo lhs, VersionInfo rhs) => !(lhs == rhs); public class Builder { private VersionInfo versionInfo = new VersionInfo(); public int FirmwareVersion { get => versionInfo.FirmwareVersion; set => versionInfo.FirmwareVersion = value; } public int HardwareVersion { get => versionInfo.HardwareVersion; set => versionInfo.HardwareVersion = value; } public int LockVersion { get => versionInfo.LockVersion; set => versionInfo.LockVersion = value; } public VersionInfo Build() { return versionInfo; } } } }