using System.Reflection; namespace BotPages.Core { public static class ActionExtensions { private static readonly Dictionary> _cache = new(); public static string GetActionLabel(this T value) where T : Enum { var fieldName = value.ToString(); var field = typeof(T).GetField(fieldName, BindingFlags.Public | BindingFlags.Static); return field?.GetCustomAttribute()?.Label ?? fieldName; } public static T? FromActionLabel(string? value) where T : struct, Enum { if (value == null) return null; var type = typeof(T); if (!_cache.TryGetValue(type, out var map)) { map = new Dictionary(); var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static); foreach (var field in fields) { var fieldValue = field.GetValue(null)!; var fieldName = field.Name; var attr = field.GetCustomAttribute(); if (attr != null) { fieldName = attr.Label; } map[fieldName] = fieldValue; } } return map.TryGetValue(value, out var result) ? (T)result : null; } } }