// <auto-generated/>
#nullable enable annotations
#nullable disable warnings
// Suppress warnings about [Obsolete] member usage in generated code.
#pragma warning disable CS0612, CS0618
namespace System.Runtime.CompilerServices
{
using System;
using System.CodeDom.Compiler;
[GeneratedCode("Microsoft.Extensions.Configuration.Binder.SourceGeneration", "8.0.10.31311")]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
file sealed class InterceptsLocationAttribute : Attribute
{
public InterceptsLocationAttribute(string filePath, int line, int column)
{
}
}
}
namespace Microsoft.Extensions.Configuration.Binder.SourceGeneration
{
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Globalization;
using System.Runtime.CompilerServices;
[GeneratedCode("Microsoft.Extensions.Configuration.Binder.SourceGeneration", "8.0.10.31311")]
file static class BindingExtensions
{
#region OptionsBuilder<TOptions> extensions.
/// <summary>Registers a configuration instance which <typeparamref name="TOptions"/> will bind against.</summary>
[InterceptsLocation(@"/_/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceMonitoringBuilderExtensions.cs", 52, 82)]
public static OptionsBuilder<TOptions> Bind<TOptions>(this OptionsBuilder<TOptions> optionsBuilder, IConfiguration config) where TOptions : class
{
return Bind(optionsBuilder, config, configureBinder: null);
}
/// <summary>Registers a configuration instance which <typeparamref name="TOptions"/> will bind against.</summary>
public static OptionsBuilder<TOptions> Bind<TOptions>(this OptionsBuilder<TOptions> optionsBuilder, IConfiguration config, Action<BinderOptions>? configureBinder) where TOptions : class
{
if (optionsBuilder is null)
{
throw new ArgumentNullException(nameof(optionsBuilder));
}
Configure<TOptions>(optionsBuilder.Services, optionsBuilder.Name, config, configureBinder);
return optionsBuilder;
}
#endregion OptionsBuilder<TOptions> extensions.
#region IServiceCollection extensions.
/// <summary>Registers a configuration instance which TOptions will bind against.</summary>
public static IServiceCollection Configure<TOptions>(this IServiceCollection services, string? name, IConfiguration config, Action<BinderOptions>? configureOptions) where TOptions : class
{
if (services is null)
{
throw new ArgumentNullException(nameof(services));
}
if (config is null)
{
throw new ArgumentNullException(nameof(config));
}
OptionsServiceCollectionExtensions.AddOptions(services);
services.AddSingleton<IOptionsChangeTokenSource<TOptions>>(new ConfigurationChangeTokenSource<TOptions>(name, config));
return services.AddSingleton<IConfigureOptions<TOptions>>(new ConfigureNamedOptions<TOptions>(name, instance => BindCoreMain(config, instance, typeof(TOptions), configureOptions)));
}
#endregion IServiceCollection extensions.
#region Core binding extensions.
private readonly static Lazy<HashSet<string>> s_configKeys_ResourceMonitoringOptions = new(() => new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "CollectionWindow", "SamplingInterval", "PublishingWindow", "CpuConsumptionRefreshInterval", "MemoryConsumptionRefreshInterval", "UseLinuxCalculationV2", "UseZeroToOneRangeForLinuxMetrics", "EnableSystemDiskIoMetrics", "SourceIpAddresses", "UseZeroToOneRangeForMetrics" });
public static void BindCoreMain(IConfiguration configuration, object instance, Type type, Action<BinderOptions>? configureOptions)
{
if (instance is null)
{
return;
}
if (!HasValueOrChildren(configuration))
{
return;
}
BinderOptions? binderOptions = GetBinderOptions(configureOptions);
if (type == typeof(global::Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions))
{
var temp = (global::Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions)instance;
BindCore(configuration, ref temp, defaultValueIfNotFound: false, binderOptions);
return;
}
throw new NotSupportedException($"Unable to bind to type '{type}': generator did not detect the type as input.");
}
public static void BindCore(IConfiguration configuration, ref global::System.Collections.Generic.ISet<string> instance, bool defaultValueIfNotFound, BinderOptions? binderOptions)
{
foreach (IConfigurationSection section in configuration.GetChildren())
{
if (section.Value is string value)
{
instance.Add(value);
}
}
}
public static void BindCore(IConfiguration configuration, ref global::Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions instance, bool defaultValueIfNotFound, BinderOptions? binderOptions)
{
ValidateConfigurationKeys(typeof(global::Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions), s_configKeys_ResourceMonitoringOptions, configuration, binderOptions);
if (configuration["CollectionWindow"] is string value1)
{
instance.CollectionWindow = ParseSystemTimeSpan(value1, () => configuration.GetSection("CollectionWindow").Path);
}
else if (defaultValueIfNotFound)
{
instance.CollectionWindow = default;
}
if (configuration["SamplingInterval"] is string value2)
{
instance.SamplingInterval = ParseSystemTimeSpan(value2, () => configuration.GetSection("SamplingInterval").Path);
}
else if (defaultValueIfNotFound)
{
instance.SamplingInterval = default;
}
if (configuration["PublishingWindow"] is string value3)
{
instance.PublishingWindow = ParseSystemTimeSpan(value3, () => configuration.GetSection("PublishingWindow").Path);
}
else if (defaultValueIfNotFound)
{
instance.PublishingWindow = default;
}
if (configuration["CpuConsumptionRefreshInterval"] is string value4)
{
instance.CpuConsumptionRefreshInterval = ParseSystemTimeSpan(value4, () => configuration.GetSection("CpuConsumptionRefreshInterval").Path);
}
else if (defaultValueIfNotFound)
{
instance.CpuConsumptionRefreshInterval = default;
}
if (configuration["MemoryConsumptionRefreshInterval"] is string value5)
{
instance.MemoryConsumptionRefreshInterval = ParseSystemTimeSpan(value5, () => configuration.GetSection("MemoryConsumptionRefreshInterval").Path);
}
else if (defaultValueIfNotFound)
{
instance.MemoryConsumptionRefreshInterval = default;
}
if (configuration["UseLinuxCalculationV2"] is string value6)
{
instance.UseLinuxCalculationV2 = ParseBool(value6, () => configuration.GetSection("UseLinuxCalculationV2").Path);
}
else if (defaultValueIfNotFound)
{
instance.UseLinuxCalculationV2 = default;
}
if (configuration["UseZeroToOneRangeForLinuxMetrics"] is string value7)
{
instance.UseZeroToOneRangeForLinuxMetrics = ParseBool(value7, () => configuration.GetSection("UseZeroToOneRangeForLinuxMetrics").Path);
}
else if (defaultValueIfNotFound)
{
instance.UseZeroToOneRangeForLinuxMetrics = default;
}
if (configuration["EnableSystemDiskIoMetrics"] is string value8)
{
instance.EnableSystemDiskIoMetrics = ParseBool(value8, () => configuration.GetSection("EnableSystemDiskIoMetrics").Path);
}
else if (defaultValueIfNotFound)
{
instance.EnableSystemDiskIoMetrics = default;
}
if (AsConfigWithChildren(configuration.GetSection("SourceIpAddresses")) is IConfigurationSection section9)
{
global::System.Collections.Generic.ISet<string>? temp11 = instance.SourceIpAddresses;
temp11 ??= (global::System.Collections.Generic.ISet<string>)new HashSet<string>();
BindCore(section9, ref temp11, defaultValueIfNotFound: false, binderOptions);
instance.SourceIpAddresses = temp11;
}
if (configuration["UseZeroToOneRangeForMetrics"] is string value12)
{
instance.UseZeroToOneRangeForMetrics = ParseBool(value12, () => configuration.GetSection("UseZeroToOneRangeForMetrics").Path);
}
else if (defaultValueIfNotFound)
{
instance.UseZeroToOneRangeForMetrics = default;
}
}
/// <summary>If required by the binder options, validates that there are no unknown keys in the input configuration object.</summary>
public static void ValidateConfigurationKeys(Type type, Lazy<HashSet<string>> keys, IConfiguration configuration, BinderOptions? binderOptions)
{
if (binderOptions?.ErrorOnUnknownConfiguration is true)
{
List<string>? temp = null;
foreach (IConfigurationSection section in configuration.GetChildren())
{
if (!keys.Value.Contains(section.Key))
{
(temp ??= new List<string>()).Add($"'{section.Key}'");
}
}
if (temp is not null)
{
throw new InvalidOperationException($"'ErrorOnUnknownConfiguration' was set on the provided BinderOptions, but the following properties were not found on the instance of {type}: {string.Join(", ", temp)}");
}
}
}
public static bool HasValueOrChildren(IConfiguration configuration)
{
if ((configuration as IConfigurationSection)?.Value is not null)
{
return true;
}
return AsConfigWithChildren(configuration) is not null;
}
public static IConfiguration? AsConfigWithChildren(IConfiguration configuration)
{
foreach (IConfigurationSection _ in configuration.GetChildren())
{
return configuration;
}
return null;
}
public static BinderOptions? GetBinderOptions(Action<BinderOptions>? configureOptions)
{
if (configureOptions is null)
{
return null;
}
BinderOptions binderOptions = new();
configureOptions(binderOptions);
if (binderOptions.BindNonPublicProperties)
{
throw new NotSupportedException($"The configuration binding source generator does not support 'BinderOptions.BindNonPublicProperties'.");
}
return binderOptions;
}
public static global::System.TimeSpan ParseSystemTimeSpan(string value, Func<string?> getPath)
{
try
{
return global::System.TimeSpan.Parse(value, CultureInfo.InvariantCulture);
}
catch (Exception exception)
{
throw new InvalidOperationException($"Failed to convert configuration value at '{getPath()}' to type '{typeof(global::System.TimeSpan)}'.", exception);
}
}
public static bool ParseBool(string value, Func<string?> getPath)
{
try
{
return bool.Parse(value);
}
catch (Exception exception)
{
throw new InvalidOperationException($"Failed to convert configuration value at '{getPath()}' to type '{typeof(bool)}'.", exception);
}
}
#endregion Core binding extensions.
}
}