use super::{Account, AccountFeature, AppTransfer};
use crate::framework::endpoint::{HerokuEndpoint, Method};
pub struct AccountUpdate<'a> {
pub params: AccountUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> AccountUpdate<'a> {
pub fn new() -> AccountUpdate<'a> {
AccountUpdate {
params: AccountUpdateParams {
allow_tracking: None,
beta: None,
name: None,
},
}
}
pub fn allow_tracking(&mut self, allow_tracking: bool) -> &mut Self {
self.params.allow_tracking = Some(allow_tracking);
self
}
pub fn beta(&mut self, beta: bool) -> &mut Self {
self.params.beta = Some(beta);
self
}
pub fn name(&mut self, name: &'a str) -> &mut Self {
self.params.name = Some(name);
self
}
pub fn build(&self) -> AccountUpdate<'a> {
AccountUpdate {
params: AccountUpdateParams {
allow_tracking: self.params.allow_tracking,
beta: self.params.beta,
name: self.params.name,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct AccountUpdateParams<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_tracking: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub beta: Option<bool>,
pub name: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Account, (), AccountUpdateParams<'a>> for AccountUpdate<'a> {
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("account",)
}
fn body(&self) -> Option<AccountUpdateParams<'a>> {
Some(self.params.clone())
}
}
pub struct UserAccountUpdate<'a> {
pub account_id: &'a str,
pub params: UserAccountUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> UserAccountUpdate<'a> {
pub fn new(account_id: &'a str) -> UserAccountUpdate<'a> {
UserAccountUpdate {
account_id,
params: UserAccountUpdateParams {
allow_tracking: None,
beta: None,
name: None,
},
}
}
pub fn allow_tracking(&mut self, allow_tracking: bool) -> &mut Self {
self.params.allow_tracking = Some(allow_tracking);
self
}
pub fn beta(&mut self, beta: bool) -> &mut Self {
self.params.beta = Some(beta);
self
}
pub fn name(&mut self, name: &'a str) -> &mut Self {
self.params.name = Some(name);
self
}
pub fn build(&self) -> UserAccountUpdate<'a> {
UserAccountUpdate {
account_id: self.account_id,
params: UserAccountUpdateParams {
allow_tracking: self.params.allow_tracking,
beta: self.params.beta,
name: self.params.name,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct UserAccountUpdateParams<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_tracking: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub beta: Option<bool>,
pub name: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Account, (), UserAccountUpdateParams<'a>> for UserAccountUpdate<'a> {
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("users/{}", self.account_id)
}
fn body(&self) -> Option<UserAccountUpdateParams<'a>> {
Some(self.params.clone())
}
}
pub struct AccountFeatureUpdate<'a> {
pub feature_id: &'a str,
pub params: AccountFeatureUpdateParams,
}
#[cfg(feature = "builder")]
impl<'a> AccountFeatureUpdate<'a> {
pub fn new(feature_id: &'a str, enabled: bool) -> AccountFeatureUpdate {
AccountFeatureUpdate {
feature_id,
params: AccountFeatureUpdateParams { enabled },
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct AccountFeatureUpdateParams {
pub enabled: bool,
}
impl<'a> HerokuEndpoint<AccountFeature, (), AccountFeatureUpdateParams>
for AccountFeatureUpdate<'a>
{
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("account/features/{}", self.feature_id)
}
fn body(&self) -> Option<AccountFeatureUpdateParams> {
Some(self.params.clone())
}
}
pub struct AppTransferUpdate<'a> {
pub transfer_id: &'a str,
pub params: AppTransferUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> AppTransferUpdate<'a> {
pub fn new(transfer_id: &'a str, state: &'a str) -> AppTransferUpdate<'a> {
AppTransferUpdate {
transfer_id,
params: AppTransferUpdateParams { state },
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct AppTransferUpdateParams<'a> {
pub state: &'a str,
}
impl<'a> HerokuEndpoint<AppTransfer, (), AppTransferUpdateParams<'a>> for AppTransferUpdate<'a> {
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("account/app-transfers/{}", self.transfer_id)
}
fn body(&self) -> Option<AppTransferUpdateParams<'a>> {
Some(self.params.clone())
}
}