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()
{
}
}
}