Files
Net.Sdk.Web.Extensions/Net.Sdk.Web.Extensions.Azure/InterceptingPageable.cs
T
2024-08-16 20:15:11 +02:00

36 lines
1.0 KiB
C#

using Azure;
namespace Net.Sdk.Web.Extensions.Azure;
internal sealed class InterceptingPageable<T> : Pageable<T> where T : notnull
{
private readonly Action<Page<T>> interceptPage;
private readonly Action interceptSuccess;
private readonly Pageable<T> originalPageable;
public InterceptingPageable(Pageable<T> originalPageable, Action<Page<T>> interceptPage, Action interceptSuccess)
{
this.originalPageable = originalPageable;
this.interceptPage = interceptPage;
this.interceptSuccess = interceptSuccess;
}
public override IEnumerable<Page<T>> AsPages(string? continuationToken = null, int? pageSizeHint = null)
{
foreach (var page in this.originalPageable.AsPages(continuationToken, pageSizeHint))
{
this.interceptPage(page);
yield return page;
}
}
public override IEnumerator<T> GetEnumerator()
{
foreach (var item in this.originalPageable)
{
this.interceptSuccess();
yield return item;
}
}
}