示例#1
0
 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;
 }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 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));
 }
示例#7
0
 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));
 }
示例#8
0
 public T GetOrSetValue <T>(String key, T defaultValue, TryConverter <String, T> converter, IEnumerable <String> sections)
 {
     return(GetOrSetValue(key, defaultValue, null, converter, sections));
 }
示例#9
0
        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);
        }
示例#10
0
        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));
        }
示例#11
0
        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));
        }
示例#12
0
        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);
        }
示例#14
0
 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));
 }
示例#15
0
        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)));
        }
示例#16
0
 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));
 }