internal FunctionsEnvironmentVariablesConfigurationSource()

in src/Google.Cloud.Functions.Hosting/FunctionsEnvironmentVariablesConfigurationSource.cs [35:69]


        internal FunctionsEnvironmentVariablesConfigurationSource(Func<string, string?> variableProvider) =>
            _variableProvider = variableProvider;

        public IConfigurationProvider Build(IConfigurationBuilder builder) => new Provider(_variableProvider);

        private class Provider : ConfigurationProvider
        {
            private const string KeyPrefix = FunctionsFrameworkOptions.ConfigSection + ":";
            private readonly Func<string, string?> _variableProvider;

            internal Provider(Func<string, string?> variableProvider) =>
                _variableProvider = variableProvider;

            public override void Load()
            {
                var dict = new Dictionary<string, string?>(StringComparer.OrdinalIgnoreCase);
                MaybeAdd(EntryPoint.FunctionTargetEnvironmentVariable, nameof(FunctionsFrameworkOptions.FunctionTarget), target => target);
                MaybeAdd(EntryPoint.PortEnvironmentVariable, "Port", port => port);
                MaybeAdd("DOTNET_RUNNING_IN_CONTAINER", "Address",
                    value => string.Equals(value, "true", StringComparison.OrdinalIgnoreCase) ? "Any" : "Loopback");
                MaybeAdd("K_SERVICE", "JsonLogging", service => string.IsNullOrWhiteSpace(service) ? "False" : "True");

                Data = dict;

                void MaybeAdd(string variableName, string configurationName, Func<string?, string?> mapping)
                {
                    var variable = _variableProvider(variableName);
                    var mappedValue = mapping(variable);
                    if (!string.IsNullOrWhiteSpace(mappedValue))
                    {
                        dict[KeyPrefix + configurationName] = mappedValue;
                    }
                }
            }
        }