use super::{TeamInvitation, TeamMember};
use crate::framework::endpoint::{HerokuEndpoint, Method};
pub struct TeamInvitationCreate<'a> {
pub team_id: &'a str,
pub params: TeamInvitationCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> TeamInvitationCreate<'a> {
pub fn new(team_id: &'a str, email: &'a str) -> TeamInvitationCreate<'a> {
TeamInvitationCreate {
team_id,
params: TeamInvitationCreateParams {
email: email,
role: None,
},
}
}
pub fn role(&mut self, role: &'a str) -> &mut Self {
self.params.role = Some(role);
self
}
pub fn build(&self) -> TeamInvitationCreate<'a> {
TeamInvitationCreate {
team_id: self.team_id,
params: TeamInvitationCreateParams {
email: self.params.email,
role: self.params.role,
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct TeamInvitationCreateParams<'a> {
pub email: &'a str,
pub role: Option<&'a str>,
}
impl<'a> HerokuEndpoint<TeamInvitation, (), TeamInvitationCreateParams<'a>>
for TeamInvitationCreate<'a>
{
fn method(&self) -> Method {
Method::Put
}
fn path(&self) -> String {
format!("teams/{}/invitations", self.team_id)
}
fn body(&self) -> Option<TeamInvitationCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct TeamMemberCreateorUpdate<'a> {
pub team_id: &'a str,
pub params: TeamMemberCreateorUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> TeamMemberCreateorUpdate<'a> {
pub fn new(team_id: &'a str, email: &'a str, role: &'a str) -> TeamMemberCreateorUpdate<'a> {
TeamMemberCreateorUpdate {
team_id,
params: TeamMemberCreateorUpdateParams {
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) -> TeamMemberCreateorUpdate<'a> {
TeamMemberCreateorUpdate {
team_id: self.team_id,
params: TeamMemberCreateorUpdateParams {
email: self.params.email,
role: self.params.role,
federated: self.params.federated,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct TeamMemberCreateorUpdateParams<'a> {
pub email: &'a str,
pub role: &'a str,
pub federated: Option<bool>,
}
impl<'a> HerokuEndpoint<TeamMember, (), TeamMemberCreateorUpdateParams<'a>>
for TeamMemberCreateorUpdate<'a>
{
fn method(&self) -> Method {
Method::Put
}
fn path(&self) -> String {
format!("teams/{}/members", self.team_id)
}
fn body(&self) -> Option<TeamMemberCreateorUpdateParams<'a>> {
Some(self.params.clone())
}
}