private static string AddFunctionMetadataInfo()

in sdk/Sdk.Generators/FunctionMetadataProviderGenerator/FunctionMetadataProviderGenerator.Emitter.cs [108:158]


            private static string AddFunctionMetadataInfo(IReadOnlyList<GeneratorFunctionMetadata> functionMetadata, CancellationToken cancellationToken)
            {
                var functionCount = 0;
                var builder = new StringBuilder();

                foreach (var function in functionMetadata)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    // we're going to base variable names on Function[Num] because some function names have characters we can't use for a dotnet variable
                    var functionVariableName = "Function" + functionCount.ToString();
                    var functionBindingsListVarName = functionVariableName + "RawBindings";
                    var bindingInfo = BuildBindingInfo(functionBindingsListVarName, function.RawBindings);

                    builder.AppendLine(
                    $$"""
                                var {{functionBindingsListVarName}} = new List<string>();
                    {{bindingInfo}}
                                var {{functionVariableName}} = new DefaultFunctionMetadata
                                {
                                    Language = "{{Constants.Languages.DotnetIsolated}}",
                                    Name = "{{function.Name}}",
                                    EntryPoint = "{{function.EntryPoint}}",
                                    RawBindings = {{functionBindingsListVarName}},
                    """);

                    builder.Append(BuildRetryOptions(function.Retry));

                    builder.AppendLine($$"""                
                                    ScriptFile = "{{function.ScriptFile}}"
                    """);
                    builder.AppendLine($$"""            };""");
                    builder.AppendLine($$"""            metadataList.Add({{functionVariableName}});""");

                    functionCount++;
                }

                return builder.ToString();
            }

            private static string BuildBindingInfo(string bindingListVariableName, IList<IDictionary<string, object>> bindings)
            {
                var builder = new StringBuilder();
                foreach (var binding in bindings)
                {
                    var jsonBinding = JsonSerializer.Serialize(binding, _jsonOptions);
                    builder.AppendLine($"""            {bindingListVariableName}.Add(@"{jsonBinding.Replace("\"", "\"\"")}");""");
                }

                return builder.ToString();
            }