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); } } }