fastly_api/apis/
backend_api.rs

1/*
2 * Fastly API
3 *
4 * Via the Fastly API you can perform any of the operations that are possible within the management console,  including creating services, domains, and backends, configuring rules or uploading your own application code, as well as account operations such as user administration and billing reports. The API is organized into collections of endpoints that allow manipulation of objects related to Fastly services and accounts. For the most accurate and up-to-date API reference content, visit our [Developer Hub](https://www.fastly.com/documentation/reference/api/) 
5 *
6 */
7
8
9use reqwest;
10
11use crate::apis::ResponseContent;
12use super::{Error, configuration};
13
14/// struct for passing parameters to the method [`create_backend`]
15#[derive(Clone, Debug, Default)]
16pub struct CreateBackendParams {
17    /// Alphanumeric string identifying the service.
18    pub service_id: String,
19    /// Integer identifying a service version.
20    pub version_id: i32,
21    /// A hostname, IPv4, or IPv6 address for the backend. This is the preferred way to specify the location of your backend.
22    pub address: Option<String>,
23    /// Whether or not this backend should be automatically load balanced. If true, all backends with this setting that don't have a `request_condition` will be selected based on their `weight`.
24    pub auto_loadbalance: Option<bool>,
25    /// Maximum duration in milliseconds that Fastly will wait while receiving no data on a download from a backend. If exceeded, the response received so far will be considered complete and the fetch will end. May be set at runtime using `bereq.between_bytes_timeout`.
26    pub between_bytes_timeout: Option<i32>,
27    /// Unused.
28    pub client_cert: Option<String>,
29    /// A freeform descriptive note.
30    pub comment: Option<String>,
31    /// Maximum duration in milliseconds to wait for a connection to this backend to be established. If exceeded, the connection is aborted and a synthetic `503` response will be presented instead. May be set at runtime using `bereq.connect_timeout`.
32    pub connect_timeout: Option<i32>,
33    /// Maximum duration in milliseconds to wait for the server response to begin after a TCP connection is established and the request has been sent. If exceeded, the connection is aborted and a synthetic `503` response will be presented instead. May be set at runtime using `bereq.first_byte_timeout`.
34    pub first_byte_timeout: Option<i32>,
35    /// The name of the healthcheck to use with this backend.
36    pub healthcheck: Option<String>,
37    /// The hostname of the backend. May be used as an alternative to `address` to set the backend location.
38    pub hostname: Option<String>,
39    /// IPv4 address of the backend. May be used as an alternative to `address` to set the backend location.
40    pub ipv4: Option<String>,
41    /// IPv6 address of the backend. May be used as an alternative to `address` to set the backend location.
42    pub ipv6: Option<String>,
43    /// How long in seconds to keep a persistent connection to the backend between requests. By default, Varnish keeps connections open as long as it can.
44    pub keepalive_time: Option<i32>,
45    /// Maximum number of concurrent connections this backend will accept.
46    pub max_conn: Option<i32>,
47    /// Maximum allowed TLS version on SSL connections to this backend. If your backend server is not able to negotiate a connection meeting this constraint, a synthetic `503` error response will be generated.
48    pub max_tls_version: Option<String>,
49    /// Minimum allowed TLS version on SSL connections to this backend. If your backend server is not able to negotiate a connection meeting this constraint, a synthetic `503` error response will be generated.
50    pub min_tls_version: Option<String>,
51    /// The name of the backend.
52    pub name: Option<String>,
53    /// If set, will replace the client-supplied HTTP `Host` header on connections to this backend. Applied after VCL has been processed, so this setting will take precedence over changing `bereq.http.Host` in VCL.
54    pub override_host: Option<String>,
55    /// Port on which the backend server is listening for connections from Fastly. Setting `port` to 80 or 443 will also set `use_ssl` automatically (to false and true respectively), unless explicitly overridden by setting `use_ssl` in the same request.
56    pub port: Option<i32>,
57    /// Prefer IPv6 connections to origins for hostname backends.
58    pub prefer_ipv6: Option<bool>,
59    /// Name of a Condition, which if satisfied, will select this backend during a request. If set, will override any `auto_loadbalance` setting. By default, the first backend added to a service is selected for all requests.
60    pub request_condition: Option<String>,
61    /// Value that when shared across backends will enable those backends to share the same health check.
62    pub share_key: Option<String>,
63    /// Identifier of the POP to use as a [shield](https://docs.fastly.com/en/guides/shielding).
64    pub shield: Option<String>,
65    /// CA certificate attached to origin.
66    pub ssl_ca_cert: Option<String>,
67    /// Overrides `ssl_hostname`, but only for cert verification. Does not affect SNI at all.
68    pub ssl_cert_hostname: Option<String>,
69    /// Be strict on checking SSL certs.
70    pub ssl_check_cert: Option<bool>,
71    /// List of [OpenSSL ciphers](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) to support for connections to this origin. If your backend server is not able to negotiate a connection meeting this constraint, a synthetic `503` error response will be generated.
72    pub ssl_ciphers: Option<String>,
73    /// Client certificate attached to origin.
74    pub ssl_client_cert: Option<String>,
75    /// Client key attached to origin.
76    pub ssl_client_key: Option<String>,
77    /// Use `ssl_cert_hostname` and `ssl_sni_hostname` to configure certificate validation.
78    pub ssl_hostname: Option<String>,
79    /// Overrides `ssl_hostname`, but only for SNI in the handshake. Does not affect cert validation at all.
80    pub ssl_sni_hostname: Option<String>,
81    /// Whether to enable TCP keepalives for backend connections. Varnish defaults to using keepalives if this is unspecified.
82    pub tcp_keepalive_enable: Option<bool>,
83    /// Interval in seconds between subsequent keepalive probes.
84    pub tcp_keepalive_interval: Option<i32>,
85    /// Number of unacknowledged probes to send before considering the connection dead.
86    pub tcp_keepalive_probes: Option<i32>,
87    /// Interval in seconds between the last data packet sent and the first keepalive probe.
88    pub tcp_keepalive_time: Option<i32>,
89    /// Whether or not to require TLS for connections to this backend.
90    pub use_ssl: Option<bool>,
91    /// Weight used to load balance this backend against others. May be any positive integer. If `auto_loadbalance` is true, the chance of this backend being selected is equal to its own weight over the sum of all weights for backends that have `auto_loadbalance` set to true.
92    pub weight: Option<i32>
93}
94
95/// struct for passing parameters to the method [`delete_backend`]
96#[derive(Clone, Debug, Default)]
97pub struct DeleteBackendParams {
98    /// Alphanumeric string identifying the service.
99    pub service_id: String,
100    /// Integer identifying a service version.
101    pub version_id: i32,
102    /// The name of the backend.
103    pub backend_name: String
104}
105
106/// struct for passing parameters to the method [`get_backend`]
107#[derive(Clone, Debug, Default)]
108pub struct GetBackendParams {
109    /// Alphanumeric string identifying the service.
110    pub service_id: String,
111    /// Integer identifying a service version.
112    pub version_id: i32,
113    /// The name of the backend.
114    pub backend_name: String
115}
116
117/// struct for passing parameters to the method [`list_backends`]
118#[derive(Clone, Debug, Default)]
119pub struct ListBackendsParams {
120    /// Alphanumeric string identifying the service.
121    pub service_id: String,
122    /// Integer identifying a service version.
123    pub version_id: i32
124}
125
126/// struct for passing parameters to the method [`update_backend`]
127#[derive(Clone, Debug, Default)]
128pub struct UpdateBackendParams {
129    /// Alphanumeric string identifying the service.
130    pub service_id: String,
131    /// Integer identifying a service version.
132    pub version_id: i32,
133    /// The name of the backend.
134    pub backend_name: String,
135    /// A hostname, IPv4, or IPv6 address for the backend. This is the preferred way to specify the location of your backend.
136    pub address: Option<String>,
137    /// Whether or not this backend should be automatically load balanced. If true, all backends with this setting that don't have a `request_condition` will be selected based on their `weight`.
138    pub auto_loadbalance: Option<bool>,
139    /// Maximum duration in milliseconds that Fastly will wait while receiving no data on a download from a backend. If exceeded, the response received so far will be considered complete and the fetch will end. May be set at runtime using `bereq.between_bytes_timeout`.
140    pub between_bytes_timeout: Option<i32>,
141    /// Unused.
142    pub client_cert: Option<String>,
143    /// A freeform descriptive note.
144    pub comment: Option<String>,
145    /// Maximum duration in milliseconds to wait for a connection to this backend to be established. If exceeded, the connection is aborted and a synthetic `503` response will be presented instead. May be set at runtime using `bereq.connect_timeout`.
146    pub connect_timeout: Option<i32>,
147    /// Maximum duration in milliseconds to wait for the server response to begin after a TCP connection is established and the request has been sent. If exceeded, the connection is aborted and a synthetic `503` response will be presented instead. May be set at runtime using `bereq.first_byte_timeout`.
148    pub first_byte_timeout: Option<i32>,
149    /// The name of the healthcheck to use with this backend.
150    pub healthcheck: Option<String>,
151    /// The hostname of the backend. May be used as an alternative to `address` to set the backend location.
152    pub hostname: Option<String>,
153    /// IPv4 address of the backend. May be used as an alternative to `address` to set the backend location.
154    pub ipv4: Option<String>,
155    /// IPv6 address of the backend. May be used as an alternative to `address` to set the backend location.
156    pub ipv6: Option<String>,
157    /// How long in seconds to keep a persistent connection to the backend between requests. By default, Varnish keeps connections open as long as it can.
158    pub keepalive_time: Option<i32>,
159    /// Maximum number of concurrent connections this backend will accept.
160    pub max_conn: Option<i32>,
161    /// Maximum allowed TLS version on SSL connections to this backend. If your backend server is not able to negotiate a connection meeting this constraint, a synthetic `503` error response will be generated.
162    pub max_tls_version: Option<String>,
163    /// Minimum allowed TLS version on SSL connections to this backend. If your backend server is not able to negotiate a connection meeting this constraint, a synthetic `503` error response will be generated.
164    pub min_tls_version: Option<String>,
165    /// The name of the backend.
166    pub name: Option<String>,
167    /// If set, will replace the client-supplied HTTP `Host` header on connections to this backend. Applied after VCL has been processed, so this setting will take precedence over changing `bereq.http.Host` in VCL.
168    pub override_host: Option<String>,
169    /// Port on which the backend server is listening for connections from Fastly. Setting `port` to 80 or 443 will also set `use_ssl` automatically (to false and true respectively), unless explicitly overridden by setting `use_ssl` in the same request.
170    pub port: Option<i32>,
171    /// Prefer IPv6 connections to origins for hostname backends.
172    pub prefer_ipv6: Option<bool>,
173    /// Name of a Condition, which if satisfied, will select this backend during a request. If set, will override any `auto_loadbalance` setting. By default, the first backend added to a service is selected for all requests.
174    pub request_condition: Option<String>,
175    /// Value that when shared across backends will enable those backends to share the same health check.
176    pub share_key: Option<String>,
177    /// Identifier of the POP to use as a [shield](https://docs.fastly.com/en/guides/shielding).
178    pub shield: Option<String>,
179    /// CA certificate attached to origin.
180    pub ssl_ca_cert: Option<String>,
181    /// Overrides `ssl_hostname`, but only for cert verification. Does not affect SNI at all.
182    pub ssl_cert_hostname: Option<String>,
183    /// Be strict on checking SSL certs.
184    pub ssl_check_cert: Option<bool>,
185    /// List of [OpenSSL ciphers](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) to support for connections to this origin. If your backend server is not able to negotiate a connection meeting this constraint, a synthetic `503` error response will be generated.
186    pub ssl_ciphers: Option<String>,
187    /// Client certificate attached to origin.
188    pub ssl_client_cert: Option<String>,
189    /// Client key attached to origin.
190    pub ssl_client_key: Option<String>,
191    /// Use `ssl_cert_hostname` and `ssl_sni_hostname` to configure certificate validation.
192    pub ssl_hostname: Option<String>,
193    /// Overrides `ssl_hostname`, but only for SNI in the handshake. Does not affect cert validation at all.
194    pub ssl_sni_hostname: Option<String>,
195    /// Whether to enable TCP keepalives for backend connections. Varnish defaults to using keepalives if this is unspecified.
196    pub tcp_keepalive_enable: Option<bool>,
197    /// Interval in seconds between subsequent keepalive probes.
198    pub tcp_keepalive_interval: Option<i32>,
199    /// Number of unacknowledged probes to send before considering the connection dead.
200    pub tcp_keepalive_probes: Option<i32>,
201    /// Interval in seconds between the last data packet sent and the first keepalive probe.
202    pub tcp_keepalive_time: Option<i32>,
203    /// Whether or not to require TLS for connections to this backend.
204    pub use_ssl: Option<bool>,
205    /// Weight used to load balance this backend against others. May be any positive integer. If `auto_loadbalance` is true, the chance of this backend being selected is equal to its own weight over the sum of all weights for backends that have `auto_loadbalance` set to true.
206    pub weight: Option<i32>
207}
208
209
210/// struct for typed errors of method [`create_backend`]
211#[derive(Debug, Clone, Serialize, Deserialize)]
212#[serde(untagged)]
213pub enum CreateBackendError {
214    UnknownValue(serde_json::Value),
215}
216
217/// struct for typed errors of method [`delete_backend`]
218#[derive(Debug, Clone, Serialize, Deserialize)]
219#[serde(untagged)]
220pub enum DeleteBackendError {
221    UnknownValue(serde_json::Value),
222}
223
224/// struct for typed errors of method [`get_backend`]
225#[derive(Debug, Clone, Serialize, Deserialize)]
226#[serde(untagged)]
227pub enum GetBackendError {
228    UnknownValue(serde_json::Value),
229}
230
231/// struct for typed errors of method [`list_backends`]
232#[derive(Debug, Clone, Serialize, Deserialize)]
233#[serde(untagged)]
234pub enum ListBackendsError {
235    UnknownValue(serde_json::Value),
236}
237
238/// struct for typed errors of method [`update_backend`]
239#[derive(Debug, Clone, Serialize, Deserialize)]
240#[serde(untagged)]
241pub enum UpdateBackendError {
242    UnknownValue(serde_json::Value),
243}
244
245
246/// Create a backend for a particular service and version.
247pub async fn create_backend(configuration: &mut configuration::Configuration, params: CreateBackendParams) -> Result<crate::models::BackendResponse, Error<CreateBackendError>> {
248    let local_var_configuration = configuration;
249
250    // unbox the parameters
251    let service_id = params.service_id;
252    let version_id = params.version_id;
253    let address = params.address;
254    let auto_loadbalance = params.auto_loadbalance;
255    let between_bytes_timeout = params.between_bytes_timeout;
256    let client_cert = params.client_cert;
257    let comment = params.comment;
258    let connect_timeout = params.connect_timeout;
259    let first_byte_timeout = params.first_byte_timeout;
260    let healthcheck = params.healthcheck;
261    let hostname = params.hostname;
262    let ipv4 = params.ipv4;
263    let ipv6 = params.ipv6;
264    let keepalive_time = params.keepalive_time;
265    let max_conn = params.max_conn;
266    let max_tls_version = params.max_tls_version;
267    let min_tls_version = params.min_tls_version;
268    let name = params.name;
269    let override_host = params.override_host;
270    let port = params.port;
271    let prefer_ipv6 = params.prefer_ipv6;
272    let request_condition = params.request_condition;
273    let share_key = params.share_key;
274    let shield = params.shield;
275    let ssl_ca_cert = params.ssl_ca_cert;
276    let ssl_cert_hostname = params.ssl_cert_hostname;
277    let ssl_check_cert = params.ssl_check_cert;
278    let ssl_ciphers = params.ssl_ciphers;
279    let ssl_client_cert = params.ssl_client_cert;
280    let ssl_client_key = params.ssl_client_key;
281    let ssl_hostname = params.ssl_hostname;
282    let ssl_sni_hostname = params.ssl_sni_hostname;
283    let tcp_keepalive_enable = params.tcp_keepalive_enable;
284    let tcp_keepalive_interval = params.tcp_keepalive_interval;
285    let tcp_keepalive_probes = params.tcp_keepalive_probes;
286    let tcp_keepalive_time = params.tcp_keepalive_time;
287    let use_ssl = params.use_ssl;
288    let weight = params.weight;
289
290
291    let local_var_client = &local_var_configuration.client;
292
293    let local_var_uri_str = format!("{}/service/{service_id}/version/{version_id}/backend", local_var_configuration.base_path, service_id=crate::apis::urlencode(service_id), version_id=version_id);
294    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
295
296    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
297        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
298    }
299    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
300        let local_var_key = local_var_apikey.key.clone();
301        let local_var_value = match local_var_apikey.prefix {
302            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
303            None => local_var_key,
304        };
305        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
306    };
307    let mut local_var_form_params = std::collections::HashMap::new();
308    if let Some(local_var_param_value) = address {
309        local_var_form_params.insert("address", local_var_param_value.to_string());
310    }
311    if let Some(local_var_param_value) = auto_loadbalance {
312        local_var_form_params.insert("auto_loadbalance", local_var_param_value.to_string());
313    }
314    if let Some(local_var_param_value) = between_bytes_timeout {
315        local_var_form_params.insert("between_bytes_timeout", local_var_param_value.to_string());
316    }
317    if let Some(local_var_param_value) = client_cert {
318        local_var_form_params.insert("client_cert", local_var_param_value.to_string());
319    }
320    if let Some(local_var_param_value) = comment {
321        local_var_form_params.insert("comment", local_var_param_value.to_string());
322    }
323    if let Some(local_var_param_value) = connect_timeout {
324        local_var_form_params.insert("connect_timeout", local_var_param_value.to_string());
325    }
326    if let Some(local_var_param_value) = first_byte_timeout {
327        local_var_form_params.insert("first_byte_timeout", local_var_param_value.to_string());
328    }
329    if let Some(local_var_param_value) = healthcheck {
330        local_var_form_params.insert("healthcheck", local_var_param_value.to_string());
331    }
332    if let Some(local_var_param_value) = hostname {
333        local_var_form_params.insert("hostname", local_var_param_value.to_string());
334    }
335    if let Some(local_var_param_value) = ipv4 {
336        local_var_form_params.insert("ipv4", local_var_param_value.to_string());
337    }
338    if let Some(local_var_param_value) = ipv6 {
339        local_var_form_params.insert("ipv6", local_var_param_value.to_string());
340    }
341    if let Some(local_var_param_value) = keepalive_time {
342        local_var_form_params.insert("keepalive_time", local_var_param_value.to_string());
343    }
344    if let Some(local_var_param_value) = max_conn {
345        local_var_form_params.insert("max_conn", local_var_param_value.to_string());
346    }
347    if let Some(local_var_param_value) = max_tls_version {
348        local_var_form_params.insert("max_tls_version", local_var_param_value.to_string());
349    }
350    if let Some(local_var_param_value) = min_tls_version {
351        local_var_form_params.insert("min_tls_version", local_var_param_value.to_string());
352    }
353    if let Some(local_var_param_value) = name {
354        local_var_form_params.insert("name", local_var_param_value.to_string());
355    }
356    if let Some(local_var_param_value) = override_host {
357        local_var_form_params.insert("override_host", local_var_param_value.to_string());
358    }
359    if let Some(local_var_param_value) = port {
360        local_var_form_params.insert("port", local_var_param_value.to_string());
361    }
362    if let Some(local_var_param_value) = prefer_ipv6 {
363        local_var_form_params.insert("prefer_ipv6", local_var_param_value.to_string());
364    }
365    if let Some(local_var_param_value) = request_condition {
366        local_var_form_params.insert("request_condition", local_var_param_value.to_string());
367    }
368    if let Some(local_var_param_value) = share_key {
369        local_var_form_params.insert("share_key", local_var_param_value.to_string());
370    }
371    if let Some(local_var_param_value) = shield {
372        local_var_form_params.insert("shield", local_var_param_value.to_string());
373    }
374    if let Some(local_var_param_value) = ssl_ca_cert {
375        local_var_form_params.insert("ssl_ca_cert", local_var_param_value.to_string());
376    }
377    if let Some(local_var_param_value) = ssl_cert_hostname {
378        local_var_form_params.insert("ssl_cert_hostname", local_var_param_value.to_string());
379    }
380    if let Some(local_var_param_value) = ssl_check_cert {
381        local_var_form_params.insert("ssl_check_cert", local_var_param_value.to_string());
382    }
383    if let Some(local_var_param_value) = ssl_ciphers {
384        local_var_form_params.insert("ssl_ciphers", local_var_param_value.to_string());
385    }
386    if let Some(local_var_param_value) = ssl_client_cert {
387        local_var_form_params.insert("ssl_client_cert", local_var_param_value.to_string());
388    }
389    if let Some(local_var_param_value) = ssl_client_key {
390        local_var_form_params.insert("ssl_client_key", local_var_param_value.to_string());
391    }
392    if let Some(local_var_param_value) = ssl_hostname {
393        local_var_form_params.insert("ssl_hostname", local_var_param_value.to_string());
394    }
395    if let Some(local_var_param_value) = ssl_sni_hostname {
396        local_var_form_params.insert("ssl_sni_hostname", local_var_param_value.to_string());
397    }
398    if let Some(local_var_param_value) = tcp_keepalive_enable {
399        local_var_form_params.insert("tcp_keepalive_enable", local_var_param_value.to_string());
400    }
401    if let Some(local_var_param_value) = tcp_keepalive_interval {
402        local_var_form_params.insert("tcp_keepalive_interval", local_var_param_value.to_string());
403    }
404    if let Some(local_var_param_value) = tcp_keepalive_probes {
405        local_var_form_params.insert("tcp_keepalive_probes", local_var_param_value.to_string());
406    }
407    if let Some(local_var_param_value) = tcp_keepalive_time {
408        local_var_form_params.insert("tcp_keepalive_time", local_var_param_value.to_string());
409    }
410    if let Some(local_var_param_value) = use_ssl {
411        local_var_form_params.insert("use_ssl", local_var_param_value.to_string());
412    }
413    if let Some(local_var_param_value) = weight {
414        local_var_form_params.insert("weight", local_var_param_value.to_string());
415    }
416    local_var_req_builder = local_var_req_builder.form(&local_var_form_params);
417
418    let local_var_req = local_var_req_builder.build()?;
419    let local_var_resp = local_var_client.execute(local_var_req).await?;
420
421    if "POST" != "GET" && "POST" != "HEAD" {
422      let headers = local_var_resp.headers();
423      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
424          Some(v) => v.to_str().unwrap().parse().unwrap(),
425          None => configuration::DEFAULT_RATELIMIT,
426      };
427      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
428          Some(v) => v.to_str().unwrap().parse().unwrap(),
429          None => 0,
430      };
431    }
432
433    let local_var_status = local_var_resp.status();
434    let local_var_content = local_var_resp.text().await?;
435
436    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
437        serde_json::from_str(&local_var_content).map_err(Error::from)
438    } else {
439        let local_var_entity: Option<CreateBackendError> = serde_json::from_str(&local_var_content).ok();
440        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
441        Err(Error::ResponseError(local_var_error))
442    }
443}
444
445/// Delete the backend for a particular service and version.
446pub async fn delete_backend(configuration: &mut configuration::Configuration, params: DeleteBackendParams) -> Result<crate::models::InlineResponse200, Error<DeleteBackendError>> {
447    let local_var_configuration = configuration;
448
449    // unbox the parameters
450    let service_id = params.service_id;
451    let version_id = params.version_id;
452    let backend_name = params.backend_name;
453
454
455    let local_var_client = &local_var_configuration.client;
456
457    let local_var_uri_str = format!("{}/service/{service_id}/version/{version_id}/backend/{backend_name}", local_var_configuration.base_path, service_id=crate::apis::urlencode(service_id), version_id=version_id, backend_name=crate::apis::urlencode(backend_name));
458    let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
459
460    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
461        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
462    }
463    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
464        let local_var_key = local_var_apikey.key.clone();
465        let local_var_value = match local_var_apikey.prefix {
466            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
467            None => local_var_key,
468        };
469        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
470    };
471
472    let local_var_req = local_var_req_builder.build()?;
473    let local_var_resp = local_var_client.execute(local_var_req).await?;
474
475    if "DELETE" != "GET" && "DELETE" != "HEAD" {
476      let headers = local_var_resp.headers();
477      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
478          Some(v) => v.to_str().unwrap().parse().unwrap(),
479          None => configuration::DEFAULT_RATELIMIT,
480      };
481      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
482          Some(v) => v.to_str().unwrap().parse().unwrap(),
483          None => 0,
484      };
485    }
486
487    let local_var_status = local_var_resp.status();
488    let local_var_content = local_var_resp.text().await?;
489
490    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
491        serde_json::from_str(&local_var_content).map_err(Error::from)
492    } else {
493        let local_var_entity: Option<DeleteBackendError> = serde_json::from_str(&local_var_content).ok();
494        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
495        Err(Error::ResponseError(local_var_error))
496    }
497}
498
499/// Get the backend for a particular service and version.
500pub async fn get_backend(configuration: &mut configuration::Configuration, params: GetBackendParams) -> Result<crate::models::BackendResponse, Error<GetBackendError>> {
501    let local_var_configuration = configuration;
502
503    // unbox the parameters
504    let service_id = params.service_id;
505    let version_id = params.version_id;
506    let backend_name = params.backend_name;
507
508
509    let local_var_client = &local_var_configuration.client;
510
511    let local_var_uri_str = format!("{}/service/{service_id}/version/{version_id}/backend/{backend_name}", local_var_configuration.base_path, service_id=crate::apis::urlencode(service_id), version_id=version_id, backend_name=crate::apis::urlencode(backend_name));
512    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
513
514    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
515        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
516    }
517    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
518        let local_var_key = local_var_apikey.key.clone();
519        let local_var_value = match local_var_apikey.prefix {
520            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
521            None => local_var_key,
522        };
523        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
524    };
525
526    let local_var_req = local_var_req_builder.build()?;
527    let local_var_resp = local_var_client.execute(local_var_req).await?;
528
529    if "GET" != "GET" && "GET" != "HEAD" {
530      let headers = local_var_resp.headers();
531      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
532          Some(v) => v.to_str().unwrap().parse().unwrap(),
533          None => configuration::DEFAULT_RATELIMIT,
534      };
535      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
536          Some(v) => v.to_str().unwrap().parse().unwrap(),
537          None => 0,
538      };
539    }
540
541    let local_var_status = local_var_resp.status();
542    let local_var_content = local_var_resp.text().await?;
543
544    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
545        serde_json::from_str(&local_var_content).map_err(Error::from)
546    } else {
547        let local_var_entity: Option<GetBackendError> = serde_json::from_str(&local_var_content).ok();
548        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
549        Err(Error::ResponseError(local_var_error))
550    }
551}
552
553/// List all backends for a particular service and version.
554pub async fn list_backends(configuration: &mut configuration::Configuration, params: ListBackendsParams) -> Result<Vec<crate::models::BackendResponse>, Error<ListBackendsError>> {
555    let local_var_configuration = configuration;
556
557    // unbox the parameters
558    let service_id = params.service_id;
559    let version_id = params.version_id;
560
561
562    let local_var_client = &local_var_configuration.client;
563
564    let local_var_uri_str = format!("{}/service/{service_id}/version/{version_id}/backend", local_var_configuration.base_path, service_id=crate::apis::urlencode(service_id), version_id=version_id);
565    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
566
567    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
568        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
569    }
570    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
571        let local_var_key = local_var_apikey.key.clone();
572        let local_var_value = match local_var_apikey.prefix {
573            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
574            None => local_var_key,
575        };
576        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
577    };
578
579    let local_var_req = local_var_req_builder.build()?;
580    let local_var_resp = local_var_client.execute(local_var_req).await?;
581
582    if "GET" != "GET" && "GET" != "HEAD" {
583      let headers = local_var_resp.headers();
584      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
585          Some(v) => v.to_str().unwrap().parse().unwrap(),
586          None => configuration::DEFAULT_RATELIMIT,
587      };
588      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
589          Some(v) => v.to_str().unwrap().parse().unwrap(),
590          None => 0,
591      };
592    }
593
594    let local_var_status = local_var_resp.status();
595    let local_var_content = local_var_resp.text().await?;
596
597    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
598        serde_json::from_str(&local_var_content).map_err(Error::from)
599    } else {
600        let local_var_entity: Option<ListBackendsError> = serde_json::from_str(&local_var_content).ok();
601        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
602        Err(Error::ResponseError(local_var_error))
603    }
604}
605
606/// Update the backend for a particular service and version.
607pub async fn update_backend(configuration: &mut configuration::Configuration, params: UpdateBackendParams) -> Result<crate::models::BackendResponse, Error<UpdateBackendError>> {
608    let local_var_configuration = configuration;
609
610    // unbox the parameters
611    let service_id = params.service_id;
612    let version_id = params.version_id;
613    let backend_name = params.backend_name;
614    let address = params.address;
615    let auto_loadbalance = params.auto_loadbalance;
616    let between_bytes_timeout = params.between_bytes_timeout;
617    let client_cert = params.client_cert;
618    let comment = params.comment;
619    let connect_timeout = params.connect_timeout;
620    let first_byte_timeout = params.first_byte_timeout;
621    let healthcheck = params.healthcheck;
622    let hostname = params.hostname;
623    let ipv4 = params.ipv4;
624    let ipv6 = params.ipv6;
625    let keepalive_time = params.keepalive_time;
626    let max_conn = params.max_conn;
627    let max_tls_version = params.max_tls_version;
628    let min_tls_version = params.min_tls_version;
629    let name = params.name;
630    let override_host = params.override_host;
631    let port = params.port;
632    let prefer_ipv6 = params.prefer_ipv6;
633    let request_condition = params.request_condition;
634    let share_key = params.share_key;
635    let shield = params.shield;
636    let ssl_ca_cert = params.ssl_ca_cert;
637    let ssl_cert_hostname = params.ssl_cert_hostname;
638    let ssl_check_cert = params.ssl_check_cert;
639    let ssl_ciphers = params.ssl_ciphers;
640    let ssl_client_cert = params.ssl_client_cert;
641    let ssl_client_key = params.ssl_client_key;
642    let ssl_hostname = params.ssl_hostname;
643    let ssl_sni_hostname = params.ssl_sni_hostname;
644    let tcp_keepalive_enable = params.tcp_keepalive_enable;
645    let tcp_keepalive_interval = params.tcp_keepalive_interval;
646    let tcp_keepalive_probes = params.tcp_keepalive_probes;
647    let tcp_keepalive_time = params.tcp_keepalive_time;
648    let use_ssl = params.use_ssl;
649    let weight = params.weight;
650
651
652    let local_var_client = &local_var_configuration.client;
653
654    let local_var_uri_str = format!("{}/service/{service_id}/version/{version_id}/backend/{backend_name}", local_var_configuration.base_path, service_id=crate::apis::urlencode(service_id), version_id=version_id, backend_name=crate::apis::urlencode(backend_name));
655    let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
656
657    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
658        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
659    }
660    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
661        let local_var_key = local_var_apikey.key.clone();
662        let local_var_value = match local_var_apikey.prefix {
663            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
664            None => local_var_key,
665        };
666        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
667    };
668    let mut local_var_form_params = std::collections::HashMap::new();
669    if let Some(local_var_param_value) = address {
670        local_var_form_params.insert("address", local_var_param_value.to_string());
671    }
672    if let Some(local_var_param_value) = auto_loadbalance {
673        local_var_form_params.insert("auto_loadbalance", local_var_param_value.to_string());
674    }
675    if let Some(local_var_param_value) = between_bytes_timeout {
676        local_var_form_params.insert("between_bytes_timeout", local_var_param_value.to_string());
677    }
678    if let Some(local_var_param_value) = client_cert {
679        local_var_form_params.insert("client_cert", local_var_param_value.to_string());
680    }
681    if let Some(local_var_param_value) = comment {
682        local_var_form_params.insert("comment", local_var_param_value.to_string());
683    }
684    if let Some(local_var_param_value) = connect_timeout {
685        local_var_form_params.insert("connect_timeout", local_var_param_value.to_string());
686    }
687    if let Some(local_var_param_value) = first_byte_timeout {
688        local_var_form_params.insert("first_byte_timeout", local_var_param_value.to_string());
689    }
690    if let Some(local_var_param_value) = healthcheck {
691        local_var_form_params.insert("healthcheck", local_var_param_value.to_string());
692    }
693    if let Some(local_var_param_value) = hostname {
694        local_var_form_params.insert("hostname", local_var_param_value.to_string());
695    }
696    if let Some(local_var_param_value) = ipv4 {
697        local_var_form_params.insert("ipv4", local_var_param_value.to_string());
698    }
699    if let Some(local_var_param_value) = ipv6 {
700        local_var_form_params.insert("ipv6", local_var_param_value.to_string());
701    }
702    if let Some(local_var_param_value) = keepalive_time {
703        local_var_form_params.insert("keepalive_time", local_var_param_value.to_string());
704    }
705    if let Some(local_var_param_value) = max_conn {
706        local_var_form_params.insert("max_conn", local_var_param_value.to_string());
707    }
708    if let Some(local_var_param_value) = max_tls_version {
709        local_var_form_params.insert("max_tls_version", local_var_param_value.to_string());
710    }
711    if let Some(local_var_param_value) = min_tls_version {
712        local_var_form_params.insert("min_tls_version", local_var_param_value.to_string());
713    }
714    if let Some(local_var_param_value) = name {
715        local_var_form_params.insert("name", local_var_param_value.to_string());
716    }
717    if let Some(local_var_param_value) = override_host {
718        local_var_form_params.insert("override_host", local_var_param_value.to_string());
719    }
720    if let Some(local_var_param_value) = port {
721        local_var_form_params.insert("port", local_var_param_value.to_string());
722    }
723    if let Some(local_var_param_value) = prefer_ipv6 {
724        local_var_form_params.insert("prefer_ipv6", local_var_param_value.to_string());
725    }
726    if let Some(local_var_param_value) = request_condition {
727        local_var_form_params.insert("request_condition", local_var_param_value.to_string());
728    }
729    if let Some(local_var_param_value) = share_key {
730        local_var_form_params.insert("share_key", local_var_param_value.to_string());
731    }
732    if let Some(local_var_param_value) = shield {
733        local_var_form_params.insert("shield", local_var_param_value.to_string());
734    }
735    if let Some(local_var_param_value) = ssl_ca_cert {
736        local_var_form_params.insert("ssl_ca_cert", local_var_param_value.to_string());
737    }
738    if let Some(local_var_param_value) = ssl_cert_hostname {
739        local_var_form_params.insert("ssl_cert_hostname", local_var_param_value.to_string());
740    }
741    if let Some(local_var_param_value) = ssl_check_cert {
742        local_var_form_params.insert("ssl_check_cert", local_var_param_value.to_string());
743    }
744    if let Some(local_var_param_value) = ssl_ciphers {
745        local_var_form_params.insert("ssl_ciphers", local_var_param_value.to_string());
746    }
747    if let Some(local_var_param_value) = ssl_client_cert {
748        local_var_form_params.insert("ssl_client_cert", local_var_param_value.to_string());
749    }
750    if let Some(local_var_param_value) = ssl_client_key {
751        local_var_form_params.insert("ssl_client_key", local_var_param_value.to_string());
752    }
753    if let Some(local_var_param_value) = ssl_hostname {
754        local_var_form_params.insert("ssl_hostname", local_var_param_value.to_string());
755    }
756    if let Some(local_var_param_value) = ssl_sni_hostname {
757        local_var_form_params.insert("ssl_sni_hostname", local_var_param_value.to_string());
758    }
759    if let Some(local_var_param_value) = tcp_keepalive_enable {
760        local_var_form_params.insert("tcp_keepalive_enable", local_var_param_value.to_string());
761    }
762    if let Some(local_var_param_value) = tcp_keepalive_interval {
763        local_var_form_params.insert("tcp_keepalive_interval", local_var_param_value.to_string());
764    }
765    if let Some(local_var_param_value) = tcp_keepalive_probes {
766        local_var_form_params.insert("tcp_keepalive_probes", local_var_param_value.to_string());
767    }
768    if let Some(local_var_param_value) = tcp_keepalive_time {
769        local_var_form_params.insert("tcp_keepalive_time", local_var_param_value.to_string());
770    }
771    if let Some(local_var_param_value) = use_ssl {
772        local_var_form_params.insert("use_ssl", local_var_param_value.to_string());
773    }
774    if let Some(local_var_param_value) = weight {
775        local_var_form_params.insert("weight", local_var_param_value.to_string());
776    }
777    local_var_req_builder = local_var_req_builder.form(&local_var_form_params);
778
779    let local_var_req = local_var_req_builder.build()?;
780    let local_var_resp = local_var_client.execute(local_var_req).await?;
781
782    if "PUT" != "GET" && "PUT" != "HEAD" {
783      let headers = local_var_resp.headers();
784      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
785          Some(v) => v.to_str().unwrap().parse().unwrap(),
786          None => configuration::DEFAULT_RATELIMIT,
787      };
788      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
789          Some(v) => v.to_str().unwrap().parse().unwrap(),
790          None => 0,
791      };
792    }
793
794    let local_var_status = local_var_resp.status();
795    let local_var_content = local_var_resp.text().await?;
796
797    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
798        serde_json::from_str(&local_var_content).map_err(Error::from)
799    } else {
800        let local_var_entity: Option<UpdateBackendError> = serde_json::from_str(&local_var_content).ok();
801        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
802        Err(Error::ResponseError(local_var_error))
803    }
804}
805