use crate::{Client, PageMeta, TwilioError};
use reqwest::Method;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use super::listitems::{ListItem, ListItems};
#[allow(dead_code)]
#[derive(Deserialize)]
pub struct SyncListPage {
lists: Vec<SyncList>,
meta: PageMeta,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SyncList {
pub sid: String,
pub unique_name: String,
pub account_sid: String,
pub service_sid: String,
pub url: String,
pub date_created: String,
pub date_updated: String,
pub date_expires: Option<String>,
pub created_by: String,
pub links: Links,
pub revision: String,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
pub struct Links {
pub items: String,
pub permissions: String,
}
#[skip_serializing_none]
#[derive(Serialize)]
#[serde(rename_all(serialize = "PascalCase"))]
pub struct CreateParams {
pub unique_name: Option<String>,
pub ttl: Option<bool>,
}
#[skip_serializing_none]
#[derive(Serialize)]
#[serde(rename_all(serialize = "PascalCase"))]
pub struct UpdateParams {
pub ttl: Option<bool>,
}
pub struct Lists<'a, 'b> {
pub client: &'a Client,
pub service_sid: &'b str,
}
impl Lists<'_, '_> {
pub async fn create(&self, params: CreateParams) -> Result<SyncList, TwilioError> {
self.client
.send_request::<SyncList, CreateParams>(
Method::POST,
&format!(
"https://sync.twilio.com/v1/Services/{}/Lists",
&self.service_sid
),
Some(¶ms),
None,
)
.await
}
pub async fn list(&self) -> Result<Vec<SyncList>, TwilioError> {
let mut lists_page = self
.client
.send_request::<SyncListPage, ()>(
Method::GET,
&format!(
"https://sync.twilio.com/v1/Services/{}/Lists?PageSize=50",
self.service_sid
),
None,
None,
)
.await?;
let mut results: Vec<SyncList> = lists_page.lists;
while (lists_page.meta.next_page_url).is_some() {
lists_page = self
.client
.send_request::<SyncListPage, ()>(
Method::GET,
&lists_page.meta.next_page_url.unwrap(),
None,
None,
)
.await?;
results.append(&mut lists_page.lists);
}
Ok(results)
}
}
pub struct List<'a, 'b> {
pub client: &'a Client,
pub service_sid: &'b str,
pub sid: &'b str,
}
impl<'b> List<'_, 'b> {
pub async fn get(&self) -> Result<SyncList, TwilioError> {
self.client
.send_request::<SyncList, ()>(
Method::GET,
&format!(
"https://sync.twilio.com/v1/Services/{}/Lists/{}",
self.service_sid, self.sid
),
None,
None,
)
.await
}
pub async fn update(&self, params: UpdateParams) -> Result<SyncList, TwilioError> {
self.client
.send_request::<SyncList, UpdateParams>(
Method::POST,
&format!(
"https://sync.twilio.com/v1/Services/{}/Lists/{}",
self.service_sid, self.sid
),
Some(¶ms),
None,
)
.await
}
pub async fn delete(&self) -> Result<(), TwilioError> {
self.client
.send_request_and_ignore_response::<()>(
Method::DELETE,
&format!(
"https://sync.twilio.com/v1/Services/{}/Lists/{}",
self.service_sid, self.sid
),
None,
None,
)
.await
}
pub fn listitem(&self, index: &'b u32) -> ListItem {
ListItem {
client: self.client,
service_sid: self.service_sid,
list_sid: self.sid,
index,
}
}
pub fn listitems(&self) -> ListItems {
ListItems {
client: self.client,
service_sid: self.service_sid,
list_sid: self.sid,
}
}
}