namespace SharpChat.Configuration; public class ScopedConfig(Config config, string prefix) : Config { private Config Config { get; } = config ?? throw new ArgumentNullException(nameof(config)); private string Prefix { get; } = prefix ?? throw new ArgumentNullException(nameof(prefix)); private string GetName(string name) { return Prefix + name; } public string? ReadValue(string name, string? fallback = null) { return Config.ReadValue(GetName(name), fallback); } public T? ReadValue<T>(string name, T? fallback = default) { return Config.ReadValue(GetName(name), fallback); } public T? SafeReadValue<T>(string name, T? fallback) { return Config.SafeReadValue(GetName(name), fallback); } public Config ScopeTo(string prefix) { return Config.ScopeTo(GetName(prefix)); } public CachedValue<T> ReadCached<T>(string name, T? fallback = default, TimeSpan? lifetime = null) { return Config.ReadCached(GetName(name), fallback, lifetime); } }