use crate::{Client, PageMeta, TwilioError};
use reqwest::Method;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use super::mapitems::{MapItem, MapItems};
#[allow(dead_code)]
#[derive(Deserialize)]
pub struct SyncMapPage {
pub maps: Vec<SyncMap>,
pub meta: PageMeta,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SyncMap {
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 Maps<'a, 'b> {
pub client: &'a Client,
pub service_sid: &'b str,
}
impl Maps<'_, '_> {
pub async fn create(&self, params: CreateParams) -> Result<SyncMap, TwilioError> {
self.client
.send_request::<SyncMap, CreateParams>(
Method::POST,
&format!(
"https://sync.twilio.com/v1/Services/{}/Maps",
&self.service_sid
),
Some(¶ms),
None,
)
.await
}
pub async fn list(&self) -> Result<Vec<SyncMap>, TwilioError> {
let mut maps_page = self
.client
.send_request::<SyncMapPage, ()>(
Method::GET,
&format!(
"https://sync.twilio.com/v1/Services/{}/Maps?PageSize=20",
self.service_sid
),
None,
None,
)
.await?;
let mut results: Vec<SyncMap> = maps_page.maps;
while (maps_page.meta.next_page_url).is_some() {
maps_page = self
.client
.send_request::<SyncMapPage, ()>(
Method::GET,
&maps_page.meta.next_page_url.unwrap(),
None,
None,
)
.await?;
results.append(&mut maps_page.maps);
}
Ok(results)
}
}
pub struct Map<'a, 'b> {
pub client: &'a Client,
pub service_sid: &'b str,
pub sid: &'b str,
}
impl<'b> Map<'_, 'b> {
pub async fn get(&self) -> Result<SyncMap, TwilioError> {
self.client
.send_request::<SyncMap, ()>(
Method::GET,
&format!(
"https://sync.twilio.com/v1/Services/{}/Maps/{}",
self.service_sid, self.sid
),
None,
None,
)
.await
}
pub async fn update(&self, params: UpdateParams) -> Result<SyncMap, TwilioError> {
self.client
.send_request::<SyncMap, UpdateParams>(
Method::POST,
&format!(
"https://sync.twilio.com/v1/Services/{}/Maps/{}",
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/{}/Maps/{}",
self.service_sid, self.sid
),
None,
None,
)
.await
}
pub fn mapitem(&self, key: &'b str) -> MapItem {
MapItem {
client: self.client,
service_sid: self.service_sid,
map_sid: self.sid,
key,
}
}
pub fn mapitems(&self) -> MapItems {
MapItems {
client: self.client,
service_sid: self.service_sid,
map_sid: self.sid,
}
}
}