src/Microsoft.Azure.WebJobs.Host/Bindings/BindingTemplateExtensions.cs (51 lines of code) (raw):
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Microsoft.Azure.WebJobs.Host.Bindings.Path;
using Microsoft.Azure.WebJobs.Host.Properties;
namespace Microsoft.Azure.WebJobs.Host.Bindings
{
/// <summary>
/// Class containing extension methods for <see cref="BindingTemplate"/> and other binding Types.
/// </summary>
public static class BindingTemplateExtensions
{
/// <summary>
/// Verifies that the specified binding contract contains contract members for each of the
/// parameters in the specified <see cref="BindingTemplate"/>.
/// </summary>
/// <param name="bindingTemplate">The binding template to validate.</param>
/// <param name="bindingDataContract">The data contract to validate against.</param>
public static void ValidateContractCompatibility(this BindingTemplate bindingTemplate, IReadOnlyDictionary<string, Type> bindingDataContract)
{
if (bindingTemplate == null)
{
throw new ArgumentNullException("bindingTemplate");
}
ValidateContractCompatibility(bindingTemplate.ParameterNames, bindingDataContract);
}
/// <summary>
/// Bind the <see cref="BindingTemplate"/> using the specified binding data.
/// </summary>
/// <param name="bindingTemplate">The binding template to validate.</param>
/// <param name="bindingData">The binding data to apply to the template.</param>
/// <returns>The bound template string.</returns>
[Obsolete("Call instance method directly")]
public static string Bind(this BindingTemplate bindingTemplate, IReadOnlyDictionary<string, object> bindingData)
{
if (bindingTemplate == null)
{
throw new ArgumentNullException("bindingTemplate");
}
return bindingTemplate.Bind(bindingData);
}
public static void ValidateContractCompatibility(IEnumerable<string> parameterNames, IReadOnlyDictionary<string, Type> bindingDataContract)
{
if (parameterNames != null && bindingDataContract != null)
{
foreach (string parameterName in parameterNames)
{
if (string.Equals(parameterName, SystemBindingData.Name, StringComparison.OrdinalIgnoreCase))
{
continue;
}
if (BindingParameterResolver.IsSystemParameter(parameterName))
{
continue;
}
if (!bindingDataContract.ContainsKey(parameterName))
{
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resource.UnableToResolveBindingParameterFormat, parameterName));
}
}
}
}
}
}