/* * Copyright (c) 2023 Proton AG * * This file is part of ProtonVPN. * * ProtonVPN is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ProtonVPN is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ProtonVPN. If not, see . */ using System.Reflection; namespace ProtonVPN.Client.Common.Attributes; /// /// Attribute to indicate the corresponding setting name /// [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] public class SettingNameAttribute : Attribute { public string SettingPropertyName { get; } public SettingNameAttribute(string settingPropertyName) { SettingPropertyName = settingPropertyName; } public static string GetSettingName(object owner, string propertyName) { PropertyInfo? propertyInfo = owner.GetType()?.GetProperty(propertyName); return propertyInfo != null && Attribute.GetCustomAttribute(propertyInfo, typeof(SettingNameAttribute)) is SettingNameAttribute attribute && !string.IsNullOrEmpty(attribute.SettingPropertyName) ? attribute.SettingPropertyName : propertyName; } }