cloudflare/endpoints/load_balancing/
create_lb.rs1use surf::http::Method;
2
3use crate::endpoints::load_balancing::{
4 LbPoolId, LbPoolMapping, LoadBalancer, SessionAffinity, SessionAffinityAttributes,
5 SteeringPolicy,
6};
7use crate::framework::endpoint::Endpoint;
8
9#[derive(Debug)]
12pub struct CreateLoadBalancer<'a> {
13 pub zone_identifier: &'a str,
15 pub params: Params<'a>,
17}
18
19#[serde_with::skip_serializing_none]
21#[derive(Serialize, Clone, Debug)]
22pub struct Params<'a> {
23 pub name: &'a str,
27 pub default_pools: &'a [LbPoolId],
29 pub fallback_pool: &'a LbPoolId,
31 #[serde(flatten)]
32 pub optional_params: Option<OptionalParams<'a>>,
33}
34
35#[serde_with::skip_serializing_none]
37#[derive(Serialize, Clone, Debug, Default)]
38pub struct OptionalParams<'a> {
39 pub description: Option<&'a str>,
40 pub ttl: Option<u32>,
43 pub pop_pools: Option<LbPoolMapping>,
47 pub region_pools: Option<LbPoolMapping>,
51 pub proxied: Option<bool>,
52 pub steering_policy: Option<SteeringPolicy>,
53 pub session_affinity: Option<SessionAffinity>,
54 pub session_affinity_attributes: Option<SessionAffinityAttributes>,
55 pub session_affinity_ttl: Option<u32>,
56}
57
58impl<'a> Endpoint<LoadBalancer, (), Params<'a>> for CreateLoadBalancer<'a> {
59 fn method(&self) -> Method {
60 Method::Post
61 }
62 fn path(&self) -> String {
63 format!("zones/{}/load_balancers", self.zone_identifier)
64 }
65 fn body(&self) -> Option<Params<'a>> {
66 Some(self.params.clone())
67 }
68}