in src/Core/Compiling/Policy/RateLimitByKeyCompiler.cs [17:68]
public void Handle(ICompilationContext context, InvocationExpressionSyntax node)
{
if (!node.TryExtractingConfigParameter<RateLimitByKeyConfig>(context, "rate-limit-by-key", out var values))
{
return;
}
var element = new XElement("rate-limit-by-key");
if (!element.AddAttribute(values, nameof(RateLimitByKeyConfig.Calls), "calls"))
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
node.GetLocation(),
"rate-limit-by-key",
nameof(RateLimitByKeyConfig.Calls)
));
return;
}
if (!element.AddAttribute(values, nameof(RateLimitByKeyConfig.RenewalPeriod), "renewal-period"))
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
node.GetLocation(),
"rate-limit-by-key",
nameof(RateLimitByKeyConfig.RenewalPeriod)
));
return;
}
if (!element.AddAttribute(values, nameof(RateLimitByKeyConfig.CounterKey), "counter-key"))
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
node.GetLocation(),
"rate-limit-by-key",
nameof(RateLimitByKeyConfig.CounterKey)
));
return;
}
element.AddAttribute(values, nameof(RateLimitByKeyConfig.IncrementCondition), "increment-condition");
element.AddAttribute(values, nameof(RateLimitByKeyConfig.IncrementCount), "increment-count");
element.AddAttribute(values, nameof(RateLimitByKeyConfig.RetryAfterHeaderName), "retry-after-header-name");
element.AddAttribute(values, nameof(RateLimitByKeyConfig.RetryAfterVariableName), "retry-after-variable-name");
element.AddAttribute(values, nameof(RateLimitByKeyConfig.RemainingCallsHeaderName), "remaining-calls-header-name");
element.AddAttribute(values, nameof(RateLimitByKeyConfig.RemainingCallsVariableName), "remaining-calls-variable-name");
element.AddAttribute(values, nameof(RateLimitByKeyConfig.TotalCallsHeaderName), "total-calls-header-name");
context.AddPolicy(element);
}