using System; using System.Collections.Generic; using Config.Net.Core; namespace Config.Net.Stores { /// /// Uses system environment variables /// class EnvironmentVariablesStore : IConfigStore { /// /// Readable /// public bool CanRead => true; /// /// Writeable /// public bool CanWrite => true; /// /// Store name /// public string Name => "System Environment"; /// /// Reads value by key /// public string? Read(string key) { if (key == null) return null; foreach(string variant in GetAllKeyVariants(key)) { if (FlatArrays.IsArrayLength(variant, k => Environment.GetEnvironmentVariable(k), out int length)) { return length.ToString(); } if (FlatArrays.IsArrayElement(variant, k => Environment.GetEnvironmentVariable(k), out string? element)) { return element; } string? value = Environment.GetEnvironmentVariable(variant); if (value != null) return value; } return null; } /// /// Writes value by key /// public void Write(string key, string? value) { Environment.SetEnvironmentVariable(key, value); } private IEnumerable GetAllKeyVariants(string key) { var result = new List(); result.Add(key); result.Add(key.ToUpper().Replace(".", "_")); return result; } /// /// Nothing to dispose /// public void Dispose() { } } }