use super::Slug;
use crate::framework::endpoint::{HerokuEndpoint, Method};
use std::collections::HashMap;
pub struct SlugCreate<'a> {
pub app_id: &'a str,
pub params: SlugCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> SlugCreate<'a> {
pub fn new(app_id: &'a str, process_types: HashMap<&'a str, &'a str>) -> SlugCreate<'a> {
SlugCreate {
app_id,
params: SlugCreateParams {
process_types: process_types,
buildpack_provided_description: None,
checksum: None,
commit: None,
commit_description: None,
stack: None,
},
}
}
pub fn buildpack_provided_description(
&mut self,
buildpack_provided_description: &'a str,
) -> &mut Self {
self.params.buildpack_provided_description = Some(buildpack_provided_description);
self
}
pub fn checksum(&mut self, checksum: &'a str) -> &mut Self {
self.params.checksum = Some(checksum);
self
}
pub fn commit(&mut self, commit: &'a str) -> &mut Self {
self.params.commit = Some(commit);
self
}
pub fn commit_description(&mut self, commit_description: &'a str) -> &mut Self {
self.params.commit_description = Some(commit_description);
self
}
pub fn stack(&mut self, stack: &'a str) -> &mut Self {
self.params.stack = Some(stack);
self
}
pub fn build(&self) -> SlugCreate<'a> {
SlugCreate {
app_id: self.app_id,
params: SlugCreateParams {
process_types: self.params.process_types.clone(),
buildpack_provided_description: self.params.buildpack_provided_description,
checksum: self.params.checksum,
commit: self.params.commit,
commit_description: self.params.commit_description,
stack: self.params.stack,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct SlugCreateParams<'a> {
pub process_types: HashMap<&'a str, &'a str>,
pub buildpack_provided_description: Option<&'a str>,
pub checksum: Option<&'a str>,
pub commit: Option<&'a str>,
pub commit_description: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stack: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Slug, (), SlugCreateParams<'a>> for SlugCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("apps/{}/slugs", self.app_id)
}
fn body(&self) -> Option<SlugCreateParams<'a>> {
Some(self.params.clone())
}
}