use super::Release;
use crate::framework::endpoint::{HerokuEndpoint, Method};
#[derive(Serialize)]
pub struct ReleaseCreate<'a> {
pub app_id: &'a str,
pub params: ReleaseCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> ReleaseCreate<'a> {
pub fn new(app_id: &'a str, slug: &'a str) -> ReleaseCreate<'a> {
ReleaseCreate {
app_id,
params: ReleaseCreateParams {
slug: slug,
description: None,
},
}
}
pub fn description(&mut self, description: &'a str) -> &mut Self {
self.params.description = Some(description);
self
}
pub fn build(&self) -> ReleaseCreate<'a> {
ReleaseCreate {
app_id: self.app_id,
params: ReleaseCreateParams {
slug: self.params.slug,
description: self.params.description,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct ReleaseCreateParams<'a> {
pub slug: &'a str,
pub description: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Release, (), ReleaseCreateParams<'a>> for ReleaseCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("apps/{}/releases", self.app_id)
}
fn body(&self) -> Option<ReleaseCreateParams<'a>> {
Some(self.params.clone())
}
}
#[derive(Serialize)]
pub struct ReleaseRollback<'a> {
pub app_id: &'a str,
pub params: ReleaseRollbackParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> ReleaseRollback<'a> {
pub fn new(app_id: &'a str, release_id: &'a str) -> ReleaseRollback<'a> {
ReleaseRollback {
app_id,
params: ReleaseRollbackParams {
release: release_id,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct ReleaseRollbackParams<'a> {
pub release: &'a str,
}
impl<'a> HerokuEndpoint<Release, (), ReleaseRollbackParams<'a>> for ReleaseRollback<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("apps/{}/releases", self.app_id)
}
fn body(&self) -> Option<ReleaseRollbackParams<'a>> {
Some(self.params.clone())
}
}