use reqwest::Method;
use crate::{
Client, RequestOptions, Result, Subscription, SubscriptionListOptions, SubscriptionRequest,
SubscriptionUpdateRequest,
};
use super::path_segment;
#[derive(Debug, Clone)]
pub struct Subscriptions {
client: Client,
}
impl Subscriptions {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub async fn create(
&self,
input: &SubscriptionRequest,
options: RequestOptions,
) -> Result<Subscription> {
let request = self
.client
.request(Method::POST, "/v1/subscriptions")?
.json(input);
self.client.send(request, options).await
}
pub async fn list(&self, options: &SubscriptionListOptions) -> Result<Vec<Subscription>> {
let request = self
.client
.request(Method::GET, "/v1/subscriptions")?
.query(options);
self.client.send_collection(request, "subscriptions").await
}
pub async fn get(&self, id: &str) -> Result<Subscription> {
let request = self.client.request(
Method::GET,
&format!("/v1/subscriptions/{}", path_segment(id)),
)?;
self.client.send(request, RequestOptions::default()).await
}
pub async fn update(
&self,
id: &str,
input: &SubscriptionUpdateRequest,
options: RequestOptions,
) -> Result<Subscription> {
let request = self
.client
.request(
Method::PATCH,
&format!("/v1/subscriptions/{}", path_segment(id)),
)?
.json(input);
self.client.send(request, options).await
}
pub async fn cancel(&self, id: &str, options: RequestOptions) -> Result<Subscription> {
self.client
.post_empty(
&format!("/v1/subscriptions/{}/cancel", path_segment(id)),
options,
)
.await
}
pub async fn resume(&self, id: &str, options: RequestOptions) -> Result<Subscription> {
self.client
.post_empty(
&format!("/v1/subscriptions/{}/resume", path_segment(id)),
options,
)
.await
}
}