use super::{Addon, AddonConfig, AddonWebhook};
use crate::framework::endpoint::{HerokuEndpoint, Method};
pub struct AddonUpdate<'a> {
pub app_id: &'a str,
pub addon_id: &'a str,
pub params: AddonUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> AddonUpdate<'a> {
pub fn new(app_id: &'a str, addon_id: &'a str, plan: &'a str) -> AddonUpdate<'a> {
AddonUpdate {
app_id,
addon_id,
params: AddonUpdateParams {
plan: plan,
name: None,
},
}
}
pub fn name(&mut self, name: &'a str) -> &mut Self {
self.params.name = Some(name);
self
}
pub fn build(&self) -> AddonUpdate<'a> {
AddonUpdate {
app_id: self.app_id,
addon_id: self.addon_id,
params: AddonUpdateParams {
plan: self.params.plan,
name: self.params.name,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct AddonUpdateParams<'a> {
pub plan: &'a str,
pub name: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Addon, (), AddonUpdateParams<'a>> for AddonUpdate<'a> {
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("apps/{}/addons/{}", self.app_id, self.addon_id)
}
fn body(&self) -> Option<AddonUpdateParams<'a>> {
Some(self.params.clone())
}
}
pub struct AddonConfigUpdate<'a> {
pub addon_id: &'a str,
pub params: AddonConfigUpdateParams,
}
#[cfg(feature = "builder")]
impl<'a> AddonConfigUpdate<'a> {
pub fn new(addon_id: &'a str) -> AddonConfigUpdate<'a> {
AddonConfigUpdate {
addon_id,
params: AddonConfigUpdateParams { config: None },
}
}
pub fn config(&mut self, config_name: &'a str, config_value: &'a str) -> &mut Self {
self.params.config = Some(vec![AddonConfig {
name: config_name.to_owned(),
value: config_value.to_owned(),
}]);
self
}
pub fn build(&self) -> AddonConfigUpdate<'a> {
AddonConfigUpdate {
addon_id: self.addon_id,
params: AddonConfigUpdateParams {
config: self.params.config.clone(),
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct AddonConfigUpdateParams {
pub config: Option<Vec<AddonConfig>>,
}
impl<'a> HerokuEndpoint<Vec<AddonConfig>, (), AddonConfigUpdateParams> for AddonConfigUpdate<'a> {
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("addons/{}/config", self.addon_id)
}
fn body(&self) -> Option<AddonConfigUpdateParams> {
Some(self.params.clone())
}
}
pub struct WebhookUpdate<'a> {
pub addon_id: &'a str,
pub webhook_id: &'a str,
pub params: WebhookUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> WebhookUpdate<'a> {
pub fn new(addon_id: &'a str, webhook_id: &'a str) -> WebhookUpdate<'a> {
WebhookUpdate {
addon_id,
webhook_id,
params: WebhookUpdateParams {
authorization: None,
include: None,
level: None,
secret: None,
url: None,
},
}
}
pub fn authorization(&mut self, authorization: &'a str) -> &mut Self {
self.params.authorization = Some(authorization);
self
}
pub fn include(&mut self, include: Vec<&'a str>) -> &mut Self {
self.params.include = Some(include);
self
}
pub fn level(&mut self, level: &'a str) -> &mut Self {
self.params.level = Some(level);
self
}
pub fn secret(&mut self, secret: &'a str) -> &mut Self {
self.params.secret = Some(secret);
self
}
pub fn url(&mut self, url: &'a str) -> &mut Self {
self.params.url = Some(url);
self
}
pub fn build(&self) -> WebhookUpdate<'a> {
WebhookUpdate {
addon_id: self.addon_id,
webhook_id: self.webhook_id,
params: WebhookUpdateParams {
authorization: self.params.authorization,
include: self.params.include.clone(),
level: self.params.level,
secret: self.params.secret,
url: self.params.url,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct WebhookUpdateParams<'a> {
pub authorization: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include: Option<Vec<&'a str>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub level: Option<&'a str>,
pub secret: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<&'a str>,
}
impl<'a> HerokuEndpoint<AddonWebhook, (), WebhookUpdateParams<'a>> for WebhookUpdate<'a> {
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("addons/{}/webhooks/{}", self.addon_id, self.webhook_id)
}
fn body(&self) -> Option<WebhookUpdateParams<'a>> {
Some(self.params.clone())
}
}