using System; // ReSharper disable MemberCanBePrivate.Global namespace NodePipeline.Engine.Abstractions.Validation; public readonly struct NodePortKey(string nodeType, string portName, bool input) : IEquatable { public string NodeType { get; } = nodeType; public string PortName { get; } = portName; public bool Input { get; } = input; public bool Equals(NodePortKey other) { return string.Equals(NodeType, other.NodeType, StringComparison.Ordinal) && string.Equals(PortName, other.PortName, StringComparison.Ordinal) && Input == other.Input; } public override bool Equals(object? obj) { return obj is NodePortKey other && Equals(other); } public override int GetHashCode() { unchecked { var hash = 17; hash = hash * 23 + (NodeType?.GetHashCode() ?? 0); hash = hash * 23 + (PortName?.GetHashCode() ?? 0); hash = hash * 23 + Input.GetHashCode(); return hash; } } public static bool operator ==(NodePortKey left, NodePortKey right) { return left.Equals(right); } public static bool operator !=(NodePortKey left, NodePortKey right) { return !left.Equals(right); } public override string ToString() { return $"{NodeType}:{PortName}:{(Input ? "In" : "Out")}"; } }