11// <auto-generated >
22{ {> partial_header} }
3-
43{ {#nrt} }
54#nullable enable
65
@@ -17,21 +16,21 @@ namespace {{packageName}}.{{clientPackage}}
1716 /// < typeparam name= " TTokenBase" >< /typeparam>
1817 {{> visibility} } class RateLimitProvider<TTokenBase > : TokenProvider<TTokenBase > where TTokenBase : TokenBase
1918 {
20- internal Dictionary< string, global::System.Threading.Channels.Channel< TTokenBase>> AvailableTokens { get; } = new{ {^net70OrLater} } Dictionary<string , global::System.Threading.Channels.Channel <TTokenBase >>{ {/net70OrLater} }();
19+ public Dictionary< string, global::System.Threading.Channels.Channel< TTokenBase>> AvailableTokens { get; } = new{ {^net70OrLater} } Dictionary<string , global::System.Threading.Channels.Channel <TTokenBase >>{ {/net70OrLater} }();
2120
2221 /// <summary >
2322 /// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
2423 /// </summary >
2524 /// <param name =" container" ></param >
26- public RateLimitProvider(TokenContainer<TTokenBase > container) : base(container.Tokens )
25+ public RateLimitProvider(TokenContainer<TTokenBase > container) : base()
2726 {
28- foreach (TTokenBase token in _tokens )
27+ foreach (TTokenBase token in container.Tokens )
2928 token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
3029
3130 {{#lambda.copy} }
32- global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length )
31+ global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(container.Tokens.Count )
3332 {
34- FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
33+ FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropOldest
3534 } ;
3635
3736 AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase >(options));
@@ -45,7 +44,7 @@ namespace {{packageName}}.{{clientPackage}}
4544 {
4645 global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
4746 {
48- FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
47+ FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropOldest
4948 } ;
5049
5150 AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase >(options));
@@ -65,7 +64,7 @@ namespace {{packageName}}.{{clientPackage}}
6564 { {/hasApiKeyMethods} }
6665
6766 foreach (var availableToken in AvailableTokens)
68- foreach(TTokenBase token in _tokens )
67+ foreach(TTokenBase token in container.Tokens )
6968 {
7069 {{#hasApiKeyMethods} }
7170 if (token is ApiKeyToken apiKeyToken)
@@ -85,7 +84,7 @@ namespace {{packageName}}.{{clientPackage}}
8584 }
8685 }
8786
88- internal override async System.Threading.Tasks.ValueTask<TTokenBase > GetAsync(string header = "", System.Threading.CancellationToken cancellation = default{ {^netstandard20OrLater} }(global::System.Threading.CancellationToken){ {/netstandard20OrLater} })
87+ public override async System.Threading.Tasks.ValueTask<TTokenBase > GetAsync(string header = "", System.Threading.CancellationToken cancellation = default{ {^netstandard20OrLater} }(global::System.Threading.CancellationToken){ {/netstandard20OrLater} })
8988 {
9089 if (! AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel< TTokenBase> {{nrt?} } tokens))
9190 throw new KeyNotFoundException($"Could not locate a token for header '{ header} '.");
0 commit comments