use surf::http::Method;
use crate::endpoints::load_balancing::{
LbPoolId, LbPoolMapping, LoadBalancer, SessionAffinity, SessionAffinityAttributes,
SteeringPolicy,
};
use crate::framework::endpoint::Endpoint;
#[derive(Debug)]
pub struct CreateLoadBalancer<'a> {
pub zone_identifier: &'a str,
pub params: Params<'a>,
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct Params<'a> {
pub name: &'a str,
pub default_pools: &'a [LbPoolId],
pub fallback_pool: &'a LbPoolId,
#[serde(flatten)]
pub optional_params: Option<OptionalParams<'a>>,
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug, Default)]
pub struct OptionalParams<'a> {
pub description: Option<&'a str>,
pub ttl: Option<u32>,
pub pop_pools: Option<LbPoolMapping>,
pub region_pools: Option<LbPoolMapping>,
pub proxied: Option<bool>,
pub steering_policy: Option<SteeringPolicy>,
pub session_affinity: Option<SessionAffinity>,
pub session_affinity_attributes: Option<SessionAffinityAttributes>,
pub session_affinity_ttl: Option<u32>,
}
impl<'a> Endpoint<LoadBalancer, (), Params<'a>> for CreateLoadBalancer<'a> {
fn method(&self) -> Method {
Method::Post
}
fn path(&self) -> String {
format!("zones/{}/load_balancers", self.zone_identifier)
}
fn body(&self) -> Option<Params<'a>> {
Some(self.params.clone())
}
}