private static EndpointHandlerParameterDeclaration ForAttribute(IParameterBindingSourceAttribute attribute, ParameterInfo parameterInfo, EndpointDeclarationFactoryOptions options) { return(attribute switch { FromBodyAttribute => new JsonBodyEndpointParameterDeclaration(parameterInfo.ParameterType, parameterInfo.Name ?? string.Empty), IParameterBindingSourceWithNameAttribute attributeWithName => ParameterBinder.GetParameterDeclarationForBindingAttribute(attributeWithName, parameterInfo.Name ?? string.Empty, parameterInfo.ParameterType, parameterInfo.HasDefaultValue, parameterInfo.DefaultValue, options), _ => throw new InvalidEndpointSetupException($"Cannot handle IParameterBindingSourceAttribute of {attribute?.GetType()}") });
public static EndpointHandlerParameterDeclaration GetParameterDeclarationForBindingAttribute(IParameterBindingSourceWithNameAttribute parameterBindingSourceWithNameAttribute, string parameterName, Type type, bool hasDefaultValue, object?defaultValue, EndpointDeclarationFactoryOptions options) { var parameterNameToBind = parameterBindingSourceWithNameAttribute.Name ?? parameterName; var(factory, infos) = GetParameterDeclaration(parameterNameToBind, type, hasDefaultValue, defaultValue, parameterBindingSourceWithNameAttribute.Source, type.IsArray, options); return(new SyncEndpointParameterDeclaration(factory, infos)); }