use super::{Addon, AddonAttachment, AddonWebhook};
use crate::framework::endpoint::{HerokuEndpoint, Method};
use std::collections::HashMap;
pub struct AddonCreate<'a> {
pub app_id: &'a str,
params: AddonCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> AddonCreate<'a> {
pub fn new(app_id: &'a str, plan: &'a str) -> AddonCreate<'a> {
AddonCreate {
app_id,
params: AddonCreateParams {
attachment: None,
config: None,
plan: plan,
confirm: None,
name: None,
},
}
}
pub fn attachment_name(&mut self, attachment_name: &'a str) -> &mut Self {
self.params.attachment = Some(Attachment {
name: Some(attachment_name),
});
self
}
pub fn config(&mut self, config: HashMap<&'a str, &'a str>) -> &mut Self {
self.params.config = Some(config);
self
}
pub fn confirm(&mut self, confirm: &'a str) -> &mut Self {
self.params.confirm = Some(confirm);
self
}
pub fn name(&mut self, name: &'a str) -> &mut Self {
self.params.name = Some(name);
self
}
pub fn build(&self) -> AddonCreate<'a> {
AddonCreate {
app_id: self.app_id,
params: AddonCreateParams {
attachment: self.params.attachment.clone(),
config: self.params.config.clone(),
plan: self.params.plan,
confirm: self.params.confirm,
name: self.params.name,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct AddonCreateParams<'a> {
pub attachment: Option<Attachment<'a>>,
pub config: Option<HashMap<&'a str, &'a str>>,
pub confirm: Option<&'a str>,
pub plan: &'a str,
pub name: Option<&'a str>,
}
#[derive(Serialize, Clone, Debug)]
pub struct Attachment<'a> {
pub name: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Addon, (), AddonCreateParams<'a>> for AddonCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("apps/{}/addons", self.app_id)
}
fn body(&self) -> Option<AddonCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct AddonResolutionCreate<'a> {
pub params: AddonResolutionCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> AddonResolutionCreate<'a> {
pub fn new(addon: &'a str) -> AddonResolutionCreate<'a> {
AddonResolutionCreate {
params: AddonResolutionCreateParams {
addon: addon,
addon_service: None,
app: None,
},
}
}
pub fn addon_service(&mut self, addon_service: &'a str) -> &mut Self {
self.params.addon_service = Some(addon_service);
self
}
pub fn app(&mut self, app: &'a str) -> &mut Self {
self.params.app = Some(app);
self
}
pub fn build(&self) -> AddonResolutionCreate<'a> {
AddonResolutionCreate {
params: AddonResolutionCreateParams {
addon: self.params.addon,
addon_service: self.params.addon_service,
app: self.params.app,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct AddonResolutionCreateParams<'a> {
pub addon: &'a str,
pub addon_service: Option<&'a str>,
pub app: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Vec<Addon>, (), AddonResolutionCreateParams<'a>>
for AddonResolutionCreate<'a>
{
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("actions/addons/resolve")
}
fn body(&self) -> Option<AddonResolutionCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct AddonActionProvision<'a> {
pub addon_id: &'a str,
}
#[cfg(feature = "builder")]
impl<'a> AddonActionProvision<'a> {
pub fn new(addon_id: &'a str) -> AddonActionProvision<'a> {
AddonActionProvision { addon_id }
}
}
impl<'a> HerokuEndpoint<Addon> for AddonActionProvision<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("addons/{}/actions/provision", self.addon_id)
}
}
pub struct AddonActionDeprovision<'a> {
pub addon_id: &'a str,
}
#[cfg(feature = "builder")]
impl<'a> AddonActionDeprovision<'a> {
pub fn new(addon_id: &'a str) -> AddonActionDeprovision<'a> {
AddonActionDeprovision { addon_id }
}
}
impl<'a> HerokuEndpoint<Addon> for AddonActionDeprovision<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("addons/{}/actions/deprovision", self.addon_id)
}
}
pub struct AttachmentCreate<'a> {
pub params: AttachmentCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> AttachmentCreate<'a> {
pub fn new(addon: &'a str, app: &'a str) -> AttachmentCreate<'a> {
AttachmentCreate {
params: AttachmentCreateParams {
addon: addon,
app: app,
confirm: None,
name: None,
namespace: None,
},
}
}
pub fn confirm(&mut self, confirm: &'a str) -> &mut Self {
self.params.confirm = Some(confirm);
self
}
pub fn name(&mut self, name: &'a str) -> &mut Self {
self.params.name = Some(name);
self
}
pub fn namespace(&mut self, namespace: &'a str) -> &mut Self {
self.params.namespace = Some(namespace);
self
}
pub fn build(&self) -> AttachmentCreate<'a> {
AttachmentCreate {
params: AttachmentCreateParams {
addon: self.params.addon,
app: self.params.app,
confirm: self.params.confirm,
name: self.params.name,
namespace: self.params.namespace,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct AttachmentCreateParams<'a> {
pub addon: &'a str,
pub app: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub confirm: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<&'a str>,
pub namespace: Option<&'a str>,
}
impl<'a> HerokuEndpoint<AddonAttachment, (), AttachmentCreateParams<'a>> for AttachmentCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("addon-attachments")
}
fn body(&self) -> Option<AttachmentCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct AttachmentResolutionCreate<'a> {
pub params: AttachmentResolutionCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> AttachmentResolutionCreate<'a> {
pub fn new(addon_attachment: &'a str) -> AttachmentResolutionCreate<'a> {
AttachmentResolutionCreate {
params: AttachmentResolutionCreateParams {
addon_attachment: addon_attachment,
addon_service: None,
app: None,
},
}
}
pub fn app(&mut self, app: &'a str) -> &mut Self {
self.params.app = Some(app);
self
}
pub fn addon_service(&mut self, addon_service: &'a str) -> &mut Self {
self.params.addon_service = Some(addon_service);
self
}
pub fn build(&self) -> AttachmentResolutionCreate<'a> {
AttachmentResolutionCreate {
params: AttachmentResolutionCreateParams {
addon_attachment: self.params.addon_attachment,
addon_service: self.params.addon_service,
app: self.params.app,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct AttachmentResolutionCreateParams<'a> {
pub addon_attachment: &'a str,
pub addon_service: Option<&'a str>,
pub app: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Vec<AddonAttachment>, (), AttachmentResolutionCreateParams<'a>>
for AttachmentResolutionCreate<'a>
{
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("actions/addon-attachments/resolve")
}
fn body(&self) -> Option<AttachmentResolutionCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct WebhookCreate<'a> {
pub addon_id: &'a str,
pub params: WebhookCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> WebhookCreate<'a> {
pub fn new(
addon_id: &'a str,
include: Vec<&'a str>,
level: &'a str,
url: &'a str,
) -> WebhookCreate<'a> {
WebhookCreate {
addon_id,
params: WebhookCreateParams {
authorization: None,
include: include,
level: level,
secret: None,
url: url,
},
}
}
pub fn authorization(&mut self, authorization: &'a str) -> &mut Self {
self.params.authorization = Some(authorization);
self
}
pub fn secret(&mut self, secret: &'a str) -> &mut Self {
self.params.secret = Some(secret);
self
}
pub fn build(&self) -> WebhookCreate<'a> {
WebhookCreate {
addon_id: self.addon_id,
params: WebhookCreateParams {
authorization: None,
include: self.params.include.clone(),
level: self.params.level,
secret: self.params.secret,
url: self.params.url,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct WebhookCreateParams<'a> {
pub authorization: Option<&'a str>,
pub include: Vec<&'a str>,
pub level: &'a str,
pub secret: Option<&'a str>,
pub url: &'a str,
}
impl<'a> HerokuEndpoint<AddonWebhook, (), WebhookCreateParams<'a>> for WebhookCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("addons/{}/webhooks", self.addon_id)
}
fn body(&self) -> Option<WebhookCreateParams<'a>> {
Some(self.params.clone())
}
}