protected internal ConfigProperty(IPropertyConfig config, [NotNull] String key, T defaultValue, Func <T, Boolean> validate, ICryptKey crypt, ConfigPropertyOptions options, TryConverter <String, T> converter, IEnumerable <String> sections) : base(config, key ?? throw new ArgumentNullException(nameof(key)), crypt, options, sections) { Config = config ?? throw new ArgumentNullException(nameof(config)); DefaultValue = defaultValue; Validate = validate; Converter = converter ?? ConvertUtils.TryConvert; }
protected T GetTypedValue <T>(string expectedTypeName, TryConverter <T> parser, Predicate <T> predicate = null) { var value = GetValueBase(expectedTypeName); if (!parser(value, out var result) || (predicate != null && !predicate(result))) { throw ParsingException.InvalidValue(currentContext, value, RealLineIndex); } RemoveContext(); return(result); }
protected bool GetTypedValue <T>(out T value, string expectedTypeName, TryConverter <T> parser, Predicate <T> predicate = null) { if (!GetValueBase(out var rvalue, expectedTypeName)) { value = default; return(false); } if (!parser(rvalue, out value) || (predicate != null && !predicate(value))) { return(false); } RemoveContext(); return(true); }
public T GetOrSetValue <T>(String key, T defaultValue, ICryptKey crypt, TryConverter <String, T> converter, IEnumerable <String> sections) { sections = sections.Materialize(); String value = GetValue(key, sections); if (GetOrSetValueInternalCrypt(value, defaultValue, crypt, converter, out T result)) { return(result); } if (!IsReadOnly) { SetValue(key, defaultValue, crypt, sections); } return(defaultValue); }
public async Task <T> GetOrSetValueAsync <T>(String key, T defaultValue, ICryptKey crypt, TryConverter <String, T> converter, IEnumerable <String> sections, CancellationToken token) { sections = sections.Materialize(); String value = await GetValueAsync(key, sections, token).ConfigureAwait(false); if (GetOrSetValueInternalCrypt(value, defaultValue, crypt, converter, out T result)) { return(result); } if (!IsReadOnly) { await SetValueAsync(key, defaultValue, crypt, sections, token).ConfigureAwait(false); } return(defaultValue); }
public Task <T> GetOrSetValueAsync <T>(String key, T defaultValue, ICryptKey crypt, TryConverter <String, T> converter, IEnumerable <String> sections) { return(GetOrSetValueAsync(key, defaultValue, crypt, converter, sections, CancellationToken.None)); }
public Task <T> GetOrSetValueAsync <T>(String key, T defaultValue, TryConverter <String, T> converter, IEnumerable <String> sections, CancellationToken token) { return(GetOrSetValueAsync(key, defaultValue, null, converter, sections, token)); }
public T GetOrSetValue <T>(String key, T defaultValue, TryConverter <String, T> converter, IEnumerable <String> sections) { return(GetOrSetValue(key, defaultValue, null, converter, sections)); }
public Boolean GetOrSetValueInternalCrypt <T>(String value, T defaultValue, ICryptKey crypt, TryConverter <String, T> converter, out T result) { crypt ??= Crypt; converter ??= ConvertUtils.TryConvert; if (value is null) { result = default; return(false); } if (crypt.IsDecrypt) { value = crypt.Decrypt(value) ?? value; } result = converter(value, out T cval) ? cval : defaultValue; return(true); }
public async Task <T> GetValueAsync <T>(String key, T defaultValue, ICryptKey crypt, TryConverter <String, T> converter, IEnumerable <String> sections, CancellationToken token) { String value = await GetValueAsync(key, defaultValue.GetString(CultureInfo.InvariantCulture), sections, token).ConfigureAwait(false); return(GetValueInternalCrypt(value, defaultValue, crypt, converter)); }
public T GetValue <T>(String key, T defaultValue, ICryptKey crypt, TryConverter <String, T> converter, IEnumerable <String> sections) { String value = GetValue(key, defaultValue.GetString(CultureInfo.InvariantCulture), sections); return(GetValueInternalCrypt(value, defaultValue, crypt, converter)); }
private T GetValueInternalCrypt <T>(String value, T defaultValue, ICryptKey crypt, TryConverter <String, T> converter) { crypt ??= Crypt; converter ??= ConvertUtils.TryConvert; T cval; if (!crypt.IsDecrypt || value is null) { return(converter(value, out cval) ? cval : defaultValue); } return(converter(crypt.Decrypt(value) ?? value, out cval) ? cval : defaultValue); }
/// <summary> /// Registers the converter. /// </summary> /// <param name="converter">The converter.</param> /// <returns> /// The interpreter (for chaining). /// </returns> public IInterpreter RegisterConverter(TryConverter converter) { _converters.Add(converter); return(this); }
IReadOnlyConfigProperty <T> IReadOnlyPropertyConfig.GetProperty <T>(String key, T value, Func <T, Boolean> validate, ICryptKey crypt, ConfigPropertyOptions options, TryConverter <String, T> converter, IEnumerable <String> sections) { return(GetProperty(key, value, validate, crypt, options, converter, sections)); }
public virtual IConfigProperty <T> GetProperty <T>(String key, T value, Func <T, Boolean> validate, ICryptKey crypt, ConfigPropertyOptions options, TryConverter <String, T> converter, IEnumerable <String> sections) { IImmutableList <String> materialized = sections.AsIImmutableList(); return(GetOrAddProperty <T>(this, key, materialized, () => new ConfigProperty <T>(this, key, value, validate, crypt, options, converter, materialized))); }
public Task <T> GetValueAsync <T>(String key, T defaultValue, ICryptKey crypt, TryConverter <String, T> converter, IEnumerable <String> sections) { return(Config.GetValueAsync(key, defaultValue, crypt, converter, sections)); }