1
1
// <auto-generated >
2
2
{ {> partial_header} }
3
-
4
3
{ {#nrt} }
5
4
#nullable enable
6
5
@@ -17,21 +16,21 @@ namespace {{packageName}}.{{clientPackage}}
17
16
/// < typeparam name= " TTokenBase" >< /typeparam>
18
17
{{> visibility} } class RateLimitProvider<TTokenBase > : TokenProvider<TTokenBase > where TTokenBase : TokenBase
19
18
{
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} }();
21
20
22
21
/// <summary >
23
22
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
24
23
/// </summary >
25
24
/// <param name =" container" ></param >
26
- public RateLimitProvider(TokenContainer<TTokenBase > container) : base(container.Tokens )
25
+ public RateLimitProvider(TokenContainer<TTokenBase > container) : base()
27
26
{
28
- foreach (TTokenBase token in _tokens )
27
+ foreach (TTokenBase token in container.Tokens )
29
28
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
30
29
31
30
{{#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 )
33
32
{
34
- FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
33
+ FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropOldest
35
34
} ;
36
35
37
36
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase >(options));
@@ -45,7 +44,7 @@ namespace {{packageName}}.{{clientPackage}}
45
44
{
46
45
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
47
46
{
48
- FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
47
+ FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropOldest
49
48
} ;
50
49
51
50
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase >(options));
@@ -65,7 +64,7 @@ namespace {{packageName}}.{{clientPackage}}
65
64
{ {/hasApiKeyMethods} }
66
65
67
66
foreach (var availableToken in AvailableTokens)
68
- foreach(TTokenBase token in _tokens )
67
+ foreach(TTokenBase token in container.Tokens )
69
68
{
70
69
{{#hasApiKeyMethods} }
71
70
if (token is ApiKeyToken apiKeyToken)
@@ -85,7 +84,7 @@ namespace {{packageName}}.{{clientPackage}}
85
84
}
86
85
}
87
86
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} })
89
88
{
90
89
if (! AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel< TTokenBase> {{nrt?} } tokens))
91
90
throw new KeyNotFoundException($"Could not locate a token for header '{ header} '.");
0 commit comments