using System; namespace ZB.MOM.WW.LmxOpcUa.Host.Domain { /// /// Value-Timestamp-Quality triplet for tag data. (MXA-003, OPC-007) /// public readonly struct Vtq : IEquatable { public object? Value { get; } public DateTime Timestamp { get; } public Quality Quality { get; } public Vtq(object? value, DateTime timestamp, Quality quality) { Value = value; Timestamp = timestamp; Quality = quality; } public static Vtq Good(object? value) => new Vtq(value, DateTime.UtcNow, Quality.Good); public static Vtq Bad(Quality quality = Quality.Bad) => new Vtq(null, DateTime.UtcNow, quality); public static Vtq Uncertain(object? value) => new Vtq(value, DateTime.UtcNow, Quality.Uncertain); public bool Equals(Vtq other) => Equals(Value, other.Value) && Timestamp == other.Timestamp && Quality == other.Quality; public override bool Equals(object? obj) => obj is Vtq other && Equals(other); public override int GetHashCode() => HashCode.Combine(Value, Timestamp, Quality); public override string ToString() => $"Vtq({Value}, {Timestamp:O}, {Quality})"; } }