use super::{Space, SpaceTransfer, VPN};
use crate::framework::endpoint::{HerokuEndpoint, Method};
pub struct SpaceCreate<'a> {
pub params: SpaceCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> SpaceCreate<'a> {
pub fn new(name: &'a str, team: &'a str) -> SpaceCreate<'a> {
SpaceCreate {
params: SpaceCreateParams {
name: name,
team: team,
cidr: None,
data_cidr: None,
region: None,
shield: None,
},
}
}
pub fn region(&mut self, regions: &'a str) -> &mut Self {
self.params.region = Some(regions);
self
}
pub fn cidr(&mut self, _cidr: &'a str) -> &mut Self {
self.params.cidr = Some(_cidr);
self
}
pub fn data_cidr(&mut self, _data_cidr: &'a str) -> &mut Self {
self.params.data_cidr = Some(_data_cidr);
self
}
pub fn shield(&mut self, _shield: bool) -> &mut Self {
self.params.shield = Some(_shield);
self
}
pub fn build(&self) -> SpaceCreate<'a> {
SpaceCreate {
params: SpaceCreateParams {
name: self.params.name,
team: self.params.team,
cidr: self.params.cidr,
data_cidr: self.params.data_cidr,
region: self.params.region,
shield: self.params.shield,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct SpaceCreateParams<'a> {
pub name: &'a str,
pub team: &'a str,
pub cidr: Option<&'a str>,
pub data_cidr: Option<&'a str>,
pub region: Option<&'a str>,
pub shield: Option<bool>,
}
impl<'a> HerokuEndpoint<Space, (), SpaceCreateParams<'a>> for SpaceCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("spaces")
}
fn body(&self) -> Option<SpaceCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct SpaceTransferCreate<'a> {
pub space_id: &'a str,
pub params: SpaceTransferCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> SpaceTransferCreate<'a> {
pub fn new(space_id: &'a str, new_owner: &'a str) -> SpaceTransferCreate<'a> {
SpaceTransferCreate {
space_id,
params: SpaceTransferCreateParams { new_owner },
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct SpaceTransferCreateParams<'a> {
pub new_owner: &'a str,
}
impl<'a> HerokuEndpoint<SpaceTransfer, (), SpaceTransferCreateParams<'a>>
for SpaceTransferCreate<'a>
{
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("spaces/{}/transfer", self.space_id)
}
fn body(&self) -> Option<SpaceTransferCreateParams<'a>> {
Some(self.params.clone())
}
}
pub struct VPNCreate<'a> {
pub space_id: &'a str,
pub params: VPNCreateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> VPNCreate<'a> {
pub fn new(
space_id: &'a str,
name: &'a str,
public_ip: &'a str,
routable_cidrs: Vec<&'a str>,
) -> VPNCreate<'a> {
VPNCreate {
space_id,
params: VPNCreateParams {
name,
public_ip,
routable_cidrs,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct VPNCreateParams<'a> {
pub name: &'a str,
pub public_ip: &'a str,
pub routable_cidrs: Vec<&'a str>,
}
impl<'a> HerokuEndpoint<VPN, (), VPNCreateParams<'a>> for VPNCreate<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("spaces/{}/vpn-connections", self.space_id)
}
fn body(&self) -> Option<VPNCreateParams<'a>> {
Some(self.params.clone())
}
}