sources/Google.Solutions.Settings/ISetting.cs (43 lines of code) (raw):

// // Copyright 2020 Google LLC // // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. // using Google.Solutions.Common.Security; using System; using System.Security; namespace Google.Solutions.Settings { /// <summary> /// Base interface for a setting. /// </summary> public interface ISetting { /// <summary> /// Unique, stable key. /// </summary> string Key { get; } /// <summary> /// Name of setting, suitable for displaying. /// </summary> string DisplayName { get; } /// <summary> /// Description of setting, suitable for displaying. /// </summary> string Description { get; } /// <summary> /// Category of setting, suitable for displaying. /// </summary> string Category { get; } /// <summary> /// Determines whether the current value is equivalent to /// the default value. /// </summary> bool IsDefault { get; } /// <summary> /// Reset value to default. /// </summary> void Reset(); /// <summary> /// Determines if the value has been changed and needs /// to be written back to the repository. /// </summary> bool IsDirty { get; } /// <summary> /// Determines whether the user has modified this setting. /// </summary> bool IsSpecified { get; } /// <summary> /// Determines if the user is allowed to change the setting /// (or whether it's mandated by a policy). /// </summary> bool IsReadOnly { get; } } /// <summary> /// Typed setting. /// </summary> public interface ISetting<T> : ISetting { /// <summary> /// Return current value of setting. /// </summary> T Value { get; set; } /// <summary> /// Returns the default value, which might be inherited. /// </summary> T DefaultValue { get; } } /// <summary> /// Internal helper interface that allows automatic /// data type conversion. /// </summary> internal interface IAnySetting : ISetting { /// <summary> /// Assign value, converting data types if necessary. /// </summary> object AnyValue { get; set; } /// <summary> /// Returns the type of setting. /// </summary> Type ValueType { get; } } public static class SecureStringSettingExtensions { public static string GetClearTextValue( this ISetting<SecureString> setting) { return setting.Value?.ToClearText(); } public static void SetClearTextValue( this ISetting<SecureString> setting, string value) { setting.Value = SecureStringExtensions.FromClearText(value); } } }