use super::{Team, TeamApp, TeamInvitation, TeamMember};
use crate::framework::endpoint::{HerokuEndpoint, Method};
pub struct TeamCreate<'a> {
pub params: TeamCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> TeamCreate<'a> {
pub fn new(name: &'a str) -> TeamCreate {
TeamCreate {
params: TeamCreateParams {
name: name,
address_1: None,
address_2: None,
card_number: None,
city: None,
country: None,
cvv: None,
expiration_month: None,
expiration_year: None,
first_name: None,
last_name: None,
other: None,
postal_code: None,
state: None,
nonce: None,
device_data: None,
},
}
}
pub fn address_1(&mut self, address_1: &'a str) -> &mut Self {
self.params.address_1 = Some(address_1);
self
}
pub fn address_2(&mut self, address_2: &'a str) -> &mut Self {
self.params.address_2 = Some(address_2);
self
}
pub fn card_number(&mut self, card_number: &'a str) -> &mut Self {
self.params.card_number = Some(card_number);
self
}
pub fn city(&mut self, city: &'a str) -> &mut Self {
self.params.city = Some(city);
self
}
pub fn country(&mut self, country: &'a str) -> &mut Self {
self.params.country = Some(country);
self
}
pub fn cvv(&mut self, cvv: &'a str) -> &mut Self {
self.params.cvv = Some(cvv);
self
}
pub fn expiration_month(&mut self, expiration_month: &'a str) -> &mut Self {
self.params.expiration_month = Some(expiration_month);
self
}
pub fn expiration_year(&mut self, expiration_year: &'a str) -> &mut Self {
self.params.expiration_year = Some(expiration_year);
self
}
pub fn first_name(&mut self, first_name: &'a str) -> &mut Self {
self.params.first_name = Some(first_name);
self
}
pub fn last_name(&mut self, last_name: &'a str) -> &mut Self {
self.params.last_name = Some(last_name);
self
}
pub fn other(&mut self, other: &'a str) -> &mut Self {
self.params.other = Some(other);
self
}
pub fn postal_code(&mut self, postal_code: &'a str) -> &mut Self {
self.params.postal_code = Some(postal_code);
self
}
pub fn state(&mut self, state: &'a str) -> &mut Self {
self.params.state = Some(state);
self
}
pub fn nonce(&mut self, nonce: &'a str) -> &mut Self {
self.params.nonce = Some(nonce);
self
}
pub fn device_data(&mut self, device_data: &'a str) -> &mut Self {
self.params.device_data = Some(device_data);
self
}
pub fn build(&self) -> TeamCreate<'a> {
TeamCreate {
params: TeamCreateParams {
name: self.params.name,
address_1: self.params.address_1,
address_2: self.params.address_2,
card_number: self.params.card_number,
city: self.params.city,
country: self.params.country,
cvv: self.params.cvv,
expiration_month: self.params.expiration_month,
expiration_year: self.params.expiration_year,
first_name: self.params.first_name,
last_name: self.params.last_name,
other: self.params.other,
postal_code: self.params.postal_code,
state: self.params.state,
nonce: self.params.nonce,
device_data: self.params.device_data,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct TeamCreateParams<'a> {
pub name: &'a str,
pub address_1: Option<&'a str>,
pub address_2: Option<&'a str>,
pub card_number: Option<&'a str>,
pub city: Option<&'a str>,
pub country: Option<&'a str>,
pub cvv: Option<&'a str>,
pub expiration_month: Option<&'a str>,
pub expiration_year: Option<&'a str>,
pub first_name: Option<&'a str>,
pub last_name: Option<&'a str>,
pub other: Option<&'a str>,
pub postal_code: Option<&'a str>,
pub state: Option<&'a str>,
pub nonce: Option<&'a str>,
pub device_data: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Team, (), TeamCreateParams<'a>> for TeamCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("teams")
}
fn body(&self) -> Option<TeamCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct TeamCreateByEA<'a> {
pub account_id: &'a str,
pub params: TeamCreateByEAParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> TeamCreateByEA<'a> {
pub fn new(account_id: &'a str, name: &'a str) -> TeamCreateByEA<'a> {
TeamCreateByEA {
account_id: account_id,
params: TeamCreateByEAParams { name },
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct TeamCreateByEAParams<'a> {
pub name: &'a str,
}
impl<'a> HerokuEndpoint<Team, (), TeamCreateByEAParams<'a>> for TeamCreateByEA<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("enterprise-accounts/{}/teams", self.account_id)
}
fn body(&self) -> Option<TeamCreateByEAParams<'a>> {
Some(self.params.clone())
}
}
pub struct TeamAppCreate<'a> {
pub params: TeamAppCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> TeamAppCreate<'a> {
pub fn new() -> TeamAppCreate<'a> {
TeamAppCreate {
params: TeamAppCreateParams {
locked: None,
name: None,
team: None,
personal: None,
region: None,
space: None,
stack: None,
internal_routing: None,
},
}
}
pub fn locked(&mut self, locked: bool) -> &mut Self {
self.params.locked = Some(locked);
self
}
pub fn name(&mut self, name: &'a str) -> &mut Self {
self.params.name = Some(name);
self
}
pub fn team(&mut self, team: &'a str) -> &mut Self {
self.params.team = Some(team);
self
}
pub fn personal(&mut self, personal: bool) -> &mut Self {
self.params.personal = Some(personal);
self
}
pub fn region(&mut self, region: &'a str) -> &mut Self {
self.params.region = Some(region);
self
}
pub fn space(&mut self, space: &'a str) -> &mut Self {
self.params.space = Some(space);
self
}
pub fn stack(&mut self, stack: &'a str) -> &mut Self {
self.params.stack = Some(stack);
self
}
pub fn internal_routing(&mut self, internal_routing: bool) -> &mut Self {
self.params.internal_routing = Some(internal_routing);
self
}
pub fn build(&self) -> TeamAppCreate<'a> {
TeamAppCreate {
params: TeamAppCreateParams {
locked: self.params.locked,
name: self.params.name,
team: self.params.team,
personal: self.params.personal,
region: self.params.region,
space: self.params.space,
stack: self.params.stack,
internal_routing: self.params.internal_routing,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct TeamAppCreateParams<'a> {
pub locked: Option<bool>,
pub name: Option<&'a str>,
pub team: Option<&'a str>,
pub personal: Option<bool>,
pub region: Option<&'a str>,
pub space: Option<&'a str>,
pub stack: Option<&'a str>,
pub internal_routing: Option<bool>,
}
impl<'a> HerokuEndpoint<TeamApp, (), TeamAppCreateParams<'a>> for TeamAppCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("teams/apps")
}
fn body(&self) -> Option<TeamAppCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct TeamInvitationAccept<'a> {
pub token_id: &'a str,
}
#[cfg(feature = "builder")]
impl<'a> TeamInvitationAccept<'a> {
pub fn new(token_id: &'a str) -> TeamInvitationAccept<'a> {
TeamInvitationAccept { token_id }
}
}
impl<'a> HerokuEndpoint<TeamInvitation> for TeamInvitationAccept<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("teams/invitations/{}/accept", self.token_id)
}
}
pub struct TeamMemberCreate<'a> {
pub team_id: &'a str,
pub params: TeamMemberCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> TeamMemberCreate<'a> {
pub fn new(team_id: &'a str, email: &'a str, role: &'a str) -> TeamMemberCreate<'a> {
TeamMemberCreate {
team_id,
params: TeamMemberCreateParams {
email: email,
role: role,
federated: None,
},
}
}
pub fn federated(&mut self, federated: bool) -> &mut Self {
self.params.federated = Some(federated);
self
}
pub fn build(&self) -> TeamMemberCreate<'a> {
TeamMemberCreate {
team_id: self.team_id,
params: TeamMemberCreateParams {
email: self.params.email,
role: self.params.role,
federated: self.params.federated,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct TeamMemberCreateParams<'a> {
pub email: &'a str,
pub role: &'a str,
pub federated: Option<bool>,
}
impl<'a> HerokuEndpoint<TeamMember, (), TeamMemberCreateParams<'a>> for TeamMemberCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("teams/{}/members", self.team_id)
}
fn body(&self) -> Option<TeamMemberCreateParams<'a>> {
Some(self.params.clone())
}
}