use super::ReviewAppConfig;
use crate::framework::endpoint::{HerokuEndpoint, Method};
pub struct ReviewAppConfigUpdate<'a> {
pub pipeline_id: &'a str,
pub params: ReviewAppConfigUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> ReviewAppConfigUpdate<'a> {
pub fn new(pipeline_id: &'a str) -> ReviewAppConfigUpdate<'a> {
ReviewAppConfigUpdate {
pipeline_id,
params: ReviewAppConfigUpdateParams {
automatic_review_apps: None,
destroy_stale_apps: None,
stale_days: None,
deploy_target: None,
wait_for_ci: None,
base_name: None,
},
}
}
pub fn base_name(&mut self, base_name: &'a str) -> &mut Self {
self.params.base_name = Some(base_name);
self
}
pub fn wait_for_ci(&mut self, wait_for_ci: bool) -> &mut Self {
self.params.wait_for_ci = Some(wait_for_ci);
self
}
pub fn deploy_target(&mut self, id: &'a str, t_type: &'a str) -> &mut Self {
self.params.deploy_target = Some(DeployTarget {
id: id,
type_field: t_type,
});
self
}
pub fn stale_days(&mut self, stale_days: &'a str) -> &mut Self {
self.params.stale_days = Some(stale_days);
self
}
pub fn destroy_stale_apps(&mut self, destroy_stale_apps: bool) -> &mut Self {
self.params.destroy_stale_apps = Some(destroy_stale_apps);
self
}
pub fn automatic_review_apps(&mut self, automatic_review_apps: bool) -> &mut Self {
self.params.automatic_review_apps = Some(automatic_review_apps);
self
}
pub fn build(&self) -> ReviewAppConfigUpdate<'a> {
ReviewAppConfigUpdate {
pipeline_id: self.pipeline_id,
params: ReviewAppConfigUpdateParams {
automatic_review_apps: self.params.automatic_review_apps,
destroy_stale_apps: self.params.destroy_stale_apps,
stale_days: self.params.stale_days,
deploy_target: self.params.deploy_target.clone(),
wait_for_ci: self.params.wait_for_ci,
base_name: self.params.base_name,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct ReviewAppConfigUpdateParams<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub automatic_review_apps: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub destroy_stale_apps: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stale_days: Option<&'a str>,
pub deploy_target: Option<DeployTarget<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wait_for_ci: Option<bool>,
pub base_name: Option<&'a str>,
}
#[derive(Serialize, Clone, Debug)]
pub struct DeployTarget<'a> {
pub id: &'a str,
#[serde(rename = "type")]
pub type_field: &'a str,
}
impl<'a> HerokuEndpoint<ReviewAppConfig, (), ReviewAppConfigUpdateParams<'a>>
for ReviewAppConfigUpdate<'a>
{
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("pipelines/{}/review-app-config", self.pipeline_id)
}
fn body(&self) -> Option<ReviewAppConfigUpdateParams<'a>> {
Some(self.params.clone())
}
}