pub mod logs;
use crate::{Client, PageMeta, TwilioError};
use logs::{Log, Logs};
use reqwest::Method;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
#[allow(dead_code)]
#[derive(Deserialize)]
pub struct EnvironmentPage {
environments: Vec<ServerlessEnvironment>,
meta: PageMeta,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ServerlessEnvironment {
pub sid: String,
pub account_sid: String,
pub service_sid: String,
pub build_sid: String,
pub unique_name: String,
pub domain_suffix: Option<String>,
pub domain_name: String,
pub url: String,
pub date_created: String,
pub date_updated: String,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
pub struct Links {
pub variables: String,
pub deployments: String,
logs: String,
}
#[skip_serializing_none]
#[derive(Serialize)]
#[serde(rename_all(serialize = "PascalCase"))]
pub struct CreateParams {
pub unique_name: String,
pub domain_suffix: Option<String>,
}
pub struct Environments<'a, 'b> {
pub client: &'a Client,
pub service_sid: &'b str,
}
impl Environments<'_, '_> {
pub async fn create<T>(
&self,
params: CreateParams,
) -> Result<ServerlessEnvironment, TwilioError>
where
T: ?Sized + Serialize,
{
self.client
.send_request::<ServerlessEnvironment, CreateParams>(
Method::POST,
&format!(
"https://serverless.twilio.com/v1/Services/{}/Environments",
self.service_sid
),
Some(¶ms),
None,
)
.await
}
pub async fn list(&self) -> Result<Vec<ServerlessEnvironment>, TwilioError> {
let mut environments_page = self
.client
.send_request::<EnvironmentPage, ()>(
Method::GET,
&format!(
"https://serverless.twilio.com/v1/Services/{}/Environments?PageSize=50",
self.service_sid
),
None,
None,
)
.await?;
let mut results: Vec<ServerlessEnvironment> = environments_page.environments;
while (environments_page.meta.next_page_url).is_some() {
environments_page = self
.client
.send_request::<EnvironmentPage, ()>(
Method::GET,
&environments_page.meta.next_page_url.unwrap(),
None,
None,
)
.await?;
results.append(&mut environments_page.environments);
}
Ok(results)
}
}
pub struct Environment<'a, 'b> {
pub client: &'a Client,
pub service_sid: &'b str,
pub sid: &'b str,
}
impl<'b> Environment<'_, 'b> {
pub async fn get(&self) -> Result<ServerlessEnvironment, TwilioError> {
self.client
.send_request::<ServerlessEnvironment, ()>(
Method::GET,
&format!(
"https://serverless.twilio.com/v1/Services/{}/Environments/{}",
self.service_sid, self.sid
),
None,
None,
)
.await
}
pub async fn delete(&self) -> Result<(), TwilioError> {
self.client
.send_request_and_ignore_response::<()>(
Method::DELETE,
&format!(
"https://serverless.twilio.com/v1/Services/{}/Environments/{}",
self.service_sid, self.sid
),
None,
None,
)
.await
}
pub fn log(&self, sid: &'b str) -> Log {
Log {
client: self.client,
service_sid: self.service_sid,
environment_sid: self.sid,
sid,
}
}
pub fn logs(&self) -> Logs {
Logs {
client: self.client,
service_sid: self.service_sid,
environment_sid: self.sid,
}
}
}