in sdk/Sdk.Generators/FunctionMetadataProviderGenerator/FunctionMetadataProviderGenerator.Parser.cs [92:127]
private bool TryGetBindings(IMethodSymbol method, out IList<IDictionary<string, object>>? bindings, out bool hasHttpTrigger, out GeneratorRetryOptions? validatedRetryOptions)
{
hasHttpTrigger = false;
validatedRetryOptions = null;
if (!TryGetMethodOutputBinding(method, out bool hasMethodOutputBinding, out GeneratorRetryOptions? retryOptions, out IList<IDictionary<string, object>>? methodOutputBindings)
|| !TryGetParameterInputAndTriggerBindings(method, out bool supportsRetryOptions, out hasHttpTrigger, out IList<IDictionary<string, object>>? parameterInputAndTriggerBindings)
|| !TryGetReturnTypeBindings(method, hasHttpTrigger, hasMethodOutputBinding, out IList<IDictionary<string, object>>? returnTypeBindings))
{
bindings = null;
return false;
}
var listSize = methodOutputBindings!.Count + parameterInputAndTriggerBindings!.Count + returnTypeBindings!.Count;
var result = new List<IDictionary<string, object>>(listSize);
result.AddRange(methodOutputBindings);
result.AddRange(parameterInputAndTriggerBindings);
result.AddRange(returnTypeBindings);
bindings = result;
if (retryOptions is not null)
{
if (supportsRetryOptions)
{
validatedRetryOptions = retryOptions;
}
else if (!supportsRetryOptions)
{
_context.ReportDiagnostic(Diagnostic.Create(DiagnosticDescriptors.InvalidRetryOptions, Location.None));
return false;
}
}
return true;
}