use crate::client::Client;
use crate::error::Error;
use crate::types::{
CreateSegmentRequest, EmptyResponse, ListParams, PaginatedList, Segment,
SegmentCalculateRequest, SegmentCalculateResponse, UpdateSegmentRequest,
};
pub struct Segments<'a> {
client: &'a Client,
}
impl<'a> Segments<'a> {
pub fn new(client: &'a Client) -> Self {
Self { client }
}
pub async fn list(
&self,
audience_id: &str,
params: Option<ListParams>,
) -> Result<PaginatedList<Segment>, Error> {
let params = params.unwrap_or_default();
let query_params = params.to_query_params();
self.client
.get_with_params(&format!("/audiences/{}/segments", audience_id), &query_params)
.await
}
pub async fn get(&self, audience_id: &str, id: &str) -> Result<Segment, Error> {
self.client
.get(&format!("/audiences/{}/segments/{}", audience_id, id))
.await
}
pub async fn create(&self, audience_id: &str, data: CreateSegmentRequest) -> Result<Segment, Error> {
self.client
.post(&format!("/audiences/{}/segments", audience_id), &data)
.await
}
pub async fn update(
&self,
audience_id: &str,
id: &str,
data: UpdateSegmentRequest,
) -> Result<Segment, Error> {
self.client
.put(&format!("/audiences/{}/segments/{}", audience_id, id), &data)
.await
}
pub async fn delete(&self, audience_id: &str, id: &str) -> Result<EmptyResponse, Error> {
self.client
.delete(&format!("/audiences/{}/segments/{}", audience_id, id))
.await
}
pub async fn calculate(
&self,
audience_id: &str,
segment_id: &str,
) -> Result<SegmentCalculateResponse, Error> {
self.client
.get(&format!(
"/audiences/{}/segments/{}/calculate",
audience_id, segment_id
))
.await
}
pub async fn preview(
&self,
audience_id: &str,
data: SegmentCalculateRequest,
) -> Result<SegmentCalculateResponse, Error> {
self.client
.post(
&format!("/audiences/{}/segments/preview", audience_id),
&data,
)
.await
}
}