using System.Collections.Generic; using System.Linq; namespace Unity.VisualScripting { public static class UnitPortDefinitionUtility { public static string Label(this IUnitPortDefinition definition) { return StringUtility.FallbackWhitespace(definition.label, definition.key?.Filter(symbols: false, punctuation: false).Prettify() ?? "?"); } public static IEnumerable Warnings(FlowGraph graph, IEnumerable definitions = null) { if (definitions == null) { definitions = LinqUtility.Concat(graph.controlInputDefinitions, graph.controlOutputDefinitions, graph.valueInputDefinitions, graph.valueOutputDefinitions); } var hasDuplicate = definitions.DistinctBy(d => d.key).Count() != definitions.Count(); if (hasDuplicate) { yield return Warning.Caution("Some port definitions with non-unique keys are currently ignored."); } foreach (var definition in definitions) { if (!definition.isValid) { yield return InvalidWarning(definition); } } } public static Warning InvalidWarning(IUnitPortDefinition definition) { if (!StringUtility.IsNullOrWhiteSpace(definition.label)) { return Warning.Caution($"{definition.GetType().HumanName().ToLower().FirstCharacterToUpper()} '{definition.label}' is not properly configured and is currently ignored."); } else { return Warning.Caution($"A {definition.GetType().HumanName().ToLower()} with incomplete configuration is currently ignored."); } } } }