using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare.Zones.Internals;
namespace AMWD.Net.Api.Cloudflare.Zones
{
///
/// Extensions for Zone Subscriptions.
///
public static class ZoneSubscriptionsExtensions
{
///
/// Create a zone subscription, either plan or add-ons.
///
/// The instance.
/// The request.
/// A cancellation token used to propagate notification that this operation should be canceled.
public static Task> CreateZoneSubscription(this ICloudflareClient client, CreateZoneSubscriptionRequest request, CancellationToken cancellationToken = default)
{
request.ZoneId.ValidateCloudflareId();
var req = new InternalCreateZoneSubscriptionRequest
{
Frequency = request.Frequency,
RatePlan = request.RatePlan
};
return client.PostAsync($"/zones/{request.ZoneId}/subscription", req, null, cancellationToken);
}
///
/// Lists zone subscription details.
///
/// The instance.
/// The zone identifier.
/// A cancellation token used to propagate notification that this operation should be canceled.
public static Task> ZoneSubscriptionDetails(this ICloudflareClient client, string zoneId, CancellationToken cancellationToken = default)
{
zoneId.ValidateCloudflareId();
return client.GetAsync($"/zones/{zoneId}/subscription", null, cancellationToken);
}
///
/// Updates zone subscriptions, either plan or add-ons.
///
/// The instance.
/// The request.
/// A cancellation token used to propagate notification that this operation should be canceled.
public static Task> UpdateZoneSubscription(this ICloudflareClient client, UpdateZoneSubscriptionRequest request, CancellationToken cancellationToken = default)
{
request.ZoneId.ValidateCloudflareId();
var req = new InternalUpdateZoneSubscriptionRequest
{
Frequency = request.Frequency,
RatePlan = request.RatePlan
};
return client.PutAsync($"/zones/{request.ZoneId}/subscription", req, cancellationToken);
}
}
}