use super::{Pipeline, PipelineCoupling, PipelinePromotion, PipelineTransfer};
use crate::framework::endpoint::{HerokuEndpoint, Method};
pub struct PipelineCreate<'a> {
pub params: PipelineCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> PipelineCreate<'a> {
pub fn new(pipeline_name: &'a str) -> PipelineCreate<'a> {
PipelineCreate {
params: PipelineCreateParams {
name: pipeline_name,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct PipelineCreateParams<'a> {
pub name: &'a str,
}
impl<'a> HerokuEndpoint<Pipeline, (), PipelineCreateParams<'a>> for PipelineCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("pipelines")
}
fn body(&self) -> Option<PipelineCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct PipelineCouplingCreate<'a> {
pub params: PipelineCouplingCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> PipelineCouplingCreate<'a> {
pub fn new(
app_id: &'a str,
pipeline_id: &'a str,
pipeline_stage: &'a str,
) -> PipelineCouplingCreate<'a> {
PipelineCouplingCreate {
params: PipelineCouplingCreateParams {
app: app_id,
pipeline: pipeline_id,
stage: pipeline_stage,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct PipelineCouplingCreateParams<'a> {
pub app: &'a str,
pub pipeline: &'a str,
pub stage: &'a str,
}
impl<'a> HerokuEndpoint<PipelineCoupling, (), PipelineCouplingCreateParams<'a>>
for PipelineCouplingCreate<'a>
{
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("pipeline-couplings")
}
fn body(&self) -> Option<PipelineCouplingCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct PipelinePromotionCreate<'a> {
pub params: PipelinePromotionCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> PipelinePromotionCreate<'a> {
pub fn new(
pipeline_id: &'a str,
source_app_id: &'a str,
target_app_id: &'a str,
) -> PipelinePromotionCreate<'a> {
PipelinePromotionCreate {
params: PipelinePromotionCreateParams {
pipeline: PipelineParam { id: pipeline_id },
source: SourceParam {
app: AppParam { id: source_app_id },
},
targets: vec![TargetParam {
app: AppParam { id: target_app_id },
}],
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct PipelinePromotionCreateParams<'a> {
pub pipeline: PipelineParam<'a>,
pub source: SourceParam<'a>,
pub targets: Vec<TargetParam<'a>>,
}
#[derive(Serialize, Clone, Debug)]
pub struct PipelineParam<'a> {
pub id: &'a str,
}
#[derive(Serialize, Clone, Debug)]
pub struct SourceParam<'a> {
pub app: AppParam<'a>,
}
#[derive(Serialize, Clone, Debug)]
pub struct AppParam<'a> {
pub id: &'a str,
}
#[derive(Serialize, Clone, Debug)]
pub struct TargetParam<'a> {
pub app: AppParam<'a>,
}
impl<'a> HerokuEndpoint<PipelinePromotion, (), PipelinePromotionCreateParams<'a>>
for PipelinePromotionCreate<'a>
{
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("pipeline-promotions")
}
fn body(&self) -> Option<PipelinePromotionCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct PipelineTransferCreate<'a> {
pub params: PipelineTransferCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> PipelineTransferCreate<'a> {
pub fn new(
pipeline_id: &'a str,
new_owner_id: &'a str,
new_owner_type: &'a str,
) -> PipelineTransferCreate<'a> {
PipelineTransferCreate {
params: PipelineTransferCreateParams {
pipeline: PipelineParam { id: pipeline_id },
new_owner: NewOwner {
id: new_owner_id,
type_field: new_owner_type,
},
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct PipelineTransferCreateParams<'a> {
pub pipeline: PipelineParam<'a>,
pub new_owner: NewOwner<'a>,
}
#[derive(Serialize, Clone, Debug)]
pub struct NewOwner<'a> {
pub id: &'a str,
#[serde(rename = "type")]
pub type_field: &'a str,
}
impl<'a> HerokuEndpoint<PipelineTransfer, (), PipelineTransferCreateParams<'a>>
for PipelineTransferCreate<'a>
{
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("pipeline-transfers")
}
fn body(&self) -> Option<PipelineTransferCreateParams<'a>> {
Some(self.params.clone())
}
}