Skip to main content

fastly_api/apis/
dm_routing_configs_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 [`activate_dm_routing_config_draft`]
15#[derive(Clone, Debug, Default)]
16pub struct ActivateDmRoutingConfigDraftParams {
17    pub config_id: String
18}
19
20/// struct for passing parameters to the method [`create_dm_routing_config`]
21#[derive(Clone, Debug, Default)]
22pub struct CreateDmRoutingConfigParams {
23    pub routing_config: Option<crate::models::RoutingConfig>
24}
25
26/// struct for passing parameters to the method [`create_dm_routing_config_path`]
27#[derive(Clone, Debug, Default)]
28pub struct CreateDmRoutingConfigPathParams {
29    pub config_id: String,
30    pub path_create: Option<crate::models::PathCreate>
31}
32
33/// struct for passing parameters to the method [`create_dm_routing_config_rule`]
34#[derive(Clone, Debug, Default)]
35pub struct CreateDmRoutingConfigRuleParams {
36    pub config_id: String,
37    pub path_id: String,
38    pub rule_create: Option<crate::models::RuleCreate>
39}
40
41/// struct for passing parameters to the method [`deactivate_dm_routing_config`]
42#[derive(Clone, Debug, Default)]
43pub struct DeactivateDmRoutingConfigParams {
44    pub config_id: String
45}
46
47/// struct for passing parameters to the method [`delete_dm_routing_config`]
48#[derive(Clone, Debug, Default)]
49pub struct DeleteDmRoutingConfigParams {
50    pub config_id: String,
51    /// When `true`, allows deleting a routing config that has an active version. This is destructive — traffic routing for any paths served by the config will stop immediately.
52    pub force: Option<bool>
53}
54
55/// struct for passing parameters to the method [`delete_dm_routing_config_inactive_versions`]
56#[derive(Clone, Debug, Default)]
57pub struct DeleteDmRoutingConfigInactiveVersionsParams {
58    pub config_id: String
59}
60
61/// struct for passing parameters to the method [`delete_dm_routing_config_path`]
62#[derive(Clone, Debug, Default)]
63pub struct DeleteDmRoutingConfigPathParams {
64    pub config_id: String,
65    pub path_id: String
66}
67
68/// struct for passing parameters to the method [`delete_dm_routing_config_rule`]
69#[derive(Clone, Debug, Default)]
70pub struct DeleteDmRoutingConfigRuleParams {
71    pub config_id: String,
72    pub path_id: String,
73    pub rule_id: String
74}
75
76/// struct for passing parameters to the method [`discard_dm_routing_config_draft`]
77#[derive(Clone, Debug, Default)]
78pub struct DiscardDmRoutingConfigDraftParams {
79    pub config_id: String
80}
81
82/// struct for passing parameters to the method [`get_dm_routing_config`]
83#[derive(Clone, Debug, Default)]
84pub struct GetDmRoutingConfigParams {
85    pub config_id: String
86}
87
88/// struct for passing parameters to the method [`get_dm_routing_config_draft_diff`]
89#[derive(Clone, Debug, Default)]
90pub struct GetDmRoutingConfigDraftDiffParams {
91    pub config_id: String
92}
93
94/// struct for passing parameters to the method [`get_dm_routing_config_path`]
95#[derive(Clone, Debug, Default)]
96pub struct GetDmRoutingConfigPathParams {
97    pub config_id: String,
98    pub path_id: String
99}
100
101/// struct for passing parameters to the method [`get_dm_routing_config_rule`]
102#[derive(Clone, Debug, Default)]
103pub struct GetDmRoutingConfigRuleParams {
104    pub config_id: String,
105    pub path_id: String,
106    pub rule_id: String
107}
108
109/// struct for passing parameters to the method [`list_dm_routing_config_paths`]
110#[derive(Clone, Debug, Default)]
111pub struct ListDmRoutingConfigPathsParams {
112    pub config_id: String,
113    /// Filter results by path pattern. The match strategy is controlled by the `match` parameter.
114    pub path: Option<String>,
115    /// How to match the value of the `path` filter against existing path patterns. Has no effect unless `path` is also provided.
116    pub _match: Option<String>,
117    /// The order in which to list the results.
118    pub sort: Option<String>,
119    /// Cursor value from the `next_cursor` field of a previous response, used to retrieve the next page. To request the first page, this should be empty.
120    pub cursor: Option<String>,
121    /// Limit how many results are returned.
122    pub limit: Option<i32>
123}
124
125/// struct for passing parameters to the method [`list_dm_routing_config_rules`]
126#[derive(Clone, Debug, Default)]
127pub struct ListDmRoutingConfigRulesParams {
128    pub config_id: String,
129    pub path_id: String,
130    /// The order in which to list the results.
131    pub sort: Option<String>,
132    /// Cursor value from the `next_cursor` field of a previous response, used to retrieve the next page. To request the first page, this should be empty.
133    pub cursor: Option<String>,
134    /// Limit how many results are returned.
135    pub limit: Option<i32>
136}
137
138/// struct for passing parameters to the method [`list_dm_routing_config_versions`]
139#[derive(Clone, Debug, Default)]
140pub struct ListDmRoutingConfigVersionsParams {
141    pub config_id: String,
142    /// The order in which to list the results.
143    pub sort: Option<String>,
144    /// Cursor value from the `next_cursor` field of a previous response, used to retrieve the next page. To request the first page, this should be empty.
145    pub cursor: Option<String>,
146    /// Limit how many results are returned.
147    pub limit: Option<i32>
148}
149
150/// struct for passing parameters to the method [`list_dm_routing_configs`]
151#[derive(Clone, Debug, Default)]
152pub struct ListDmRoutingConfigsParams {
153    /// Filter configs by lifecycle state. Accepts a comma-separated list of state values (e.g. `?state=active,active-with-draft`). Returns only configs whose current state matches one of the provided values. Returns 400 if any value is not a recognised state.
154    pub state: Option<Vec<String>>,
155    /// The order in which to list the results.
156    pub sort: Option<String>,
157    /// Cursor value from the `next_cursor` field of a previous response, used to retrieve the next page. To request the first page, this should be empty.
158    pub cursor: Option<String>,
159    /// Limit how many results are returned.
160    pub limit: Option<i32>
161}
162
163/// struct for passing parameters to the method [`reactivate_dm_routing_config_version`]
164#[derive(Clone, Debug, Default)]
165pub struct ReactivateDmRoutingConfigVersionParams {
166    pub config_id: String,
167    pub version_id: String
168}
169
170/// struct for passing parameters to the method [`update_dm_routing_config_draft`]
171#[derive(Clone, Debug, Default)]
172pub struct UpdateDmRoutingConfigDraftParams {
173    pub config_id: String,
174    pub draft_update: Option<crate::models::DraftUpdate>
175}
176
177/// struct for passing parameters to the method [`update_dm_routing_config_path`]
178#[derive(Clone, Debug, Default)]
179pub struct UpdateDmRoutingConfigPathParams {
180    pub config_id: String,
181    pub path_id: String,
182    pub path_update: Option<crate::models::PathUpdate>
183}
184
185/// struct for passing parameters to the method [`update_dm_routing_config_rule`]
186#[derive(Clone, Debug, Default)]
187pub struct UpdateDmRoutingConfigRuleParams {
188    pub config_id: String,
189    pub path_id: String,
190    pub rule_id: String,
191    pub rule_update: Option<crate::models::RuleUpdate>
192}
193
194
195/// struct for typed errors of method [`activate_dm_routing_config_draft`]
196#[derive(Debug, Clone, Serialize, Deserialize)]
197#[serde(untagged)]
198pub enum ActivateDmRoutingConfigDraftError {
199    UnknownValue(serde_json::Value),
200}
201
202/// struct for typed errors of method [`create_dm_routing_config`]
203#[derive(Debug, Clone, Serialize, Deserialize)]
204#[serde(untagged)]
205pub enum CreateDmRoutingConfigError {
206    UnknownValue(serde_json::Value),
207}
208
209/// struct for typed errors of method [`create_dm_routing_config_path`]
210#[derive(Debug, Clone, Serialize, Deserialize)]
211#[serde(untagged)]
212pub enum CreateDmRoutingConfigPathError {
213    UnknownValue(serde_json::Value),
214}
215
216/// struct for typed errors of method [`create_dm_routing_config_rule`]
217#[derive(Debug, Clone, Serialize, Deserialize)]
218#[serde(untagged)]
219pub enum CreateDmRoutingConfigRuleError {
220    UnknownValue(serde_json::Value),
221}
222
223/// struct for typed errors of method [`deactivate_dm_routing_config`]
224#[derive(Debug, Clone, Serialize, Deserialize)]
225#[serde(untagged)]
226pub enum DeactivateDmRoutingConfigError {
227    UnknownValue(serde_json::Value),
228}
229
230/// struct for typed errors of method [`delete_dm_routing_config`]
231#[derive(Debug, Clone, Serialize, Deserialize)]
232#[serde(untagged)]
233pub enum DeleteDmRoutingConfigError {
234    Status409(),
235    UnknownValue(serde_json::Value),
236}
237
238/// struct for typed errors of method [`delete_dm_routing_config_inactive_versions`]
239#[derive(Debug, Clone, Serialize, Deserialize)]
240#[serde(untagged)]
241pub enum DeleteDmRoutingConfigInactiveVersionsError {
242    UnknownValue(serde_json::Value),
243}
244
245/// struct for typed errors of method [`delete_dm_routing_config_path`]
246#[derive(Debug, Clone, Serialize, Deserialize)]
247#[serde(untagged)]
248pub enum DeleteDmRoutingConfigPathError {
249    UnknownValue(serde_json::Value),
250}
251
252/// struct for typed errors of method [`delete_dm_routing_config_rule`]
253#[derive(Debug, Clone, Serialize, Deserialize)]
254#[serde(untagged)]
255pub enum DeleteDmRoutingConfigRuleError {
256    UnknownValue(serde_json::Value),
257}
258
259/// struct for typed errors of method [`discard_dm_routing_config_draft`]
260#[derive(Debug, Clone, Serialize, Deserialize)]
261#[serde(untagged)]
262pub enum DiscardDmRoutingConfigDraftError {
263    UnknownValue(serde_json::Value),
264}
265
266/// struct for typed errors of method [`get_dm_routing_config`]
267#[derive(Debug, Clone, Serialize, Deserialize)]
268#[serde(untagged)]
269pub enum GetDmRoutingConfigError {
270    UnknownValue(serde_json::Value),
271}
272
273/// struct for typed errors of method [`get_dm_routing_config_draft_diff`]
274#[derive(Debug, Clone, Serialize, Deserialize)]
275#[serde(untagged)]
276pub enum GetDmRoutingConfigDraftDiffError {
277    UnknownValue(serde_json::Value),
278}
279
280/// struct for typed errors of method [`get_dm_routing_config_path`]
281#[derive(Debug, Clone, Serialize, Deserialize)]
282#[serde(untagged)]
283pub enum GetDmRoutingConfigPathError {
284    UnknownValue(serde_json::Value),
285}
286
287/// struct for typed errors of method [`get_dm_routing_config_rule`]
288#[derive(Debug, Clone, Serialize, Deserialize)]
289#[serde(untagged)]
290pub enum GetDmRoutingConfigRuleError {
291    UnknownValue(serde_json::Value),
292}
293
294/// struct for typed errors of method [`list_dm_routing_config_paths`]
295#[derive(Debug, Clone, Serialize, Deserialize)]
296#[serde(untagged)]
297pub enum ListDmRoutingConfigPathsError {
298    UnknownValue(serde_json::Value),
299}
300
301/// struct for typed errors of method [`list_dm_routing_config_rules`]
302#[derive(Debug, Clone, Serialize, Deserialize)]
303#[serde(untagged)]
304pub enum ListDmRoutingConfigRulesError {
305    UnknownValue(serde_json::Value),
306}
307
308/// struct for typed errors of method [`list_dm_routing_config_versions`]
309#[derive(Debug, Clone, Serialize, Deserialize)]
310#[serde(untagged)]
311pub enum ListDmRoutingConfigVersionsError {
312    UnknownValue(serde_json::Value),
313}
314
315/// struct for typed errors of method [`list_dm_routing_configs`]
316#[derive(Debug, Clone, Serialize, Deserialize)]
317#[serde(untagged)]
318pub enum ListDmRoutingConfigsError {
319    UnknownValue(serde_json::Value),
320}
321
322/// struct for typed errors of method [`reactivate_dm_routing_config_version`]
323#[derive(Debug, Clone, Serialize, Deserialize)]
324#[serde(untagged)]
325pub enum ReactivateDmRoutingConfigVersionError {
326    UnknownValue(serde_json::Value),
327}
328
329/// struct for typed errors of method [`update_dm_routing_config_draft`]
330#[derive(Debug, Clone, Serialize, Deserialize)]
331#[serde(untagged)]
332pub enum UpdateDmRoutingConfigDraftError {
333    UnknownValue(serde_json::Value),
334}
335
336/// struct for typed errors of method [`update_dm_routing_config_path`]
337#[derive(Debug, Clone, Serialize, Deserialize)]
338#[serde(untagged)]
339pub enum UpdateDmRoutingConfigPathError {
340    UnknownValue(serde_json::Value),
341}
342
343/// struct for typed errors of method [`update_dm_routing_config_rule`]
344#[derive(Debug, Clone, Serialize, Deserialize)]
345#[serde(untagged)]
346pub enum UpdateDmRoutingConfigRuleError {
347    UnknownValue(serde_json::Value),
348}
349
350
351/// Activate the current draft version. The previously active version, if any, becomes inactive but is retained in version history.
352pub async fn activate_dm_routing_config_draft(configuration: &mut configuration::Configuration, params: ActivateDmRoutingConfigDraftParams) -> Result<crate::models::RoutingConfigVersionResponse, Error<ActivateDmRoutingConfigDraftError>> {
353    let local_var_configuration = configuration;
354
355    // unbox the parameters
356    let config_id = params.config_id;
357
358
359    let local_var_client = &local_var_configuration.client;
360
361    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/activate", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
362    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
363
364    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
365        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
366    }
367    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
368        let local_var_key = local_var_apikey.key.clone();
369        let local_var_value = match local_var_apikey.prefix {
370            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
371            None => local_var_key,
372        };
373        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
374    };
375
376    let local_var_req = local_var_req_builder.build()?;
377    let local_var_resp = local_var_client.execute(local_var_req).await?;
378
379    if "POST" != "GET" && "POST" != "HEAD" {
380      let headers = local_var_resp.headers();
381      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
382          Some(v) => v.to_str().unwrap().parse().unwrap(),
383          None => configuration::DEFAULT_RATELIMIT,
384      };
385      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
386          Some(v) => v.to_str().unwrap().parse().unwrap(),
387          None => 0,
388      };
389    }
390
391    let local_var_status = local_var_resp.status();
392    let local_var_content = local_var_resp.text().await?;
393
394    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
395        serde_json::from_str(&local_var_content).map_err(Error::from)
396    } else {
397        let local_var_entity: Option<ActivateDmRoutingConfigDraftError> = serde_json::from_str(&local_var_content).ok();
398        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
399        Err(Error::ResponseError(local_var_error))
400    }
401}
402
403/// Create a new routing config. An optional `initial_version` may be provided to seed the config with paths and rules in a single request, and may also be activated immediately.
404pub async fn create_dm_routing_config(configuration: &mut configuration::Configuration, params: CreateDmRoutingConfigParams) -> Result<crate::models::RoutingConfigResponse, Error<CreateDmRoutingConfigError>> {
405    let local_var_configuration = configuration;
406
407    // unbox the parameters
408    let routing_config = params.routing_config;
409
410
411    let local_var_client = &local_var_configuration.client;
412
413    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs", local_var_configuration.base_path);
414    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
415
416    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
417        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
418    }
419    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
420        let local_var_key = local_var_apikey.key.clone();
421        let local_var_value = match local_var_apikey.prefix {
422            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
423            None => local_var_key,
424        };
425        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
426    };
427    local_var_req_builder = local_var_req_builder.json(&routing_config);
428
429    let local_var_req = local_var_req_builder.build()?;
430    let local_var_resp = local_var_client.execute(local_var_req).await?;
431
432    if "POST" != "GET" && "POST" != "HEAD" {
433      let headers = local_var_resp.headers();
434      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
435          Some(v) => v.to_str().unwrap().parse().unwrap(),
436          None => configuration::DEFAULT_RATELIMIT,
437      };
438      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
439          Some(v) => v.to_str().unwrap().parse().unwrap(),
440          None => 0,
441      };
442    }
443
444    let local_var_status = local_var_resp.status();
445    let local_var_content = local_var_resp.text().await?;
446
447    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
448        serde_json::from_str(&local_var_content).map_err(Error::from)
449    } else {
450        let local_var_entity: Option<CreateDmRoutingConfigError> = serde_json::from_str(&local_var_content).ok();
451        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
452        Err(Error::ResponseError(local_var_error))
453    }
454}
455
456/// Add a new path to the config's draft version. If no draft exists, one is created automatically by cloning the active version.
457pub async fn create_dm_routing_config_path(configuration: &mut configuration::Configuration, params: CreateDmRoutingConfigPathParams) -> Result<crate::models::PathResponse, Error<CreateDmRoutingConfigPathError>> {
458    let local_var_configuration = configuration;
459
460    // unbox the parameters
461    let config_id = params.config_id;
462    let path_create = params.path_create;
463
464
465    let local_var_client = &local_var_configuration.client;
466
467    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
468    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
469
470    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
471        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
472    }
473    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
474        let local_var_key = local_var_apikey.key.clone();
475        let local_var_value = match local_var_apikey.prefix {
476            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
477            None => local_var_key,
478        };
479        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
480    };
481    local_var_req_builder = local_var_req_builder.json(&path_create);
482
483    let local_var_req = local_var_req_builder.build()?;
484    let local_var_resp = local_var_client.execute(local_var_req).await?;
485
486    if "POST" != "GET" && "POST" != "HEAD" {
487      let headers = local_var_resp.headers();
488      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
489          Some(v) => v.to_str().unwrap().parse().unwrap(),
490          None => configuration::DEFAULT_RATELIMIT,
491      };
492      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
493          Some(v) => v.to_str().unwrap().parse().unwrap(),
494          None => 0,
495      };
496    }
497
498    let local_var_status = local_var_resp.status();
499    let local_var_content = local_var_resp.text().await?;
500
501    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
502        serde_json::from_str(&local_var_content).map_err(Error::from)
503    } else {
504        let local_var_entity: Option<CreateDmRoutingConfigPathError> = serde_json::from_str(&local_var_content).ok();
505        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
506        Err(Error::ResponseError(local_var_error))
507    }
508}
509
510/// Add a new rule to a path on the config's draft version. If no draft exists, one is created automatically by cloning the active version. A rule with an empty `conditions` array is a default (catch-all) rule and there can be at most one default rule per path.
511pub async fn create_dm_routing_config_rule(configuration: &mut configuration::Configuration, params: CreateDmRoutingConfigRuleParams) -> Result<crate::models::RuleResponse, Error<CreateDmRoutingConfigRuleError>> {
512    let local_var_configuration = configuration;
513
514    // unbox the parameters
515    let config_id = params.config_id;
516    let path_id = params.path_id;
517    let rule_create = params.rule_create;
518
519
520    let local_var_client = &local_var_configuration.client;
521
522    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths/{path_id}/rules", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), path_id=crate::apis::urlencode(path_id));
523    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
524
525    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
526        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
527    }
528    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
529        let local_var_key = local_var_apikey.key.clone();
530        let local_var_value = match local_var_apikey.prefix {
531            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
532            None => local_var_key,
533        };
534        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
535    };
536    local_var_req_builder = local_var_req_builder.json(&rule_create);
537
538    let local_var_req = local_var_req_builder.build()?;
539    let local_var_resp = local_var_client.execute(local_var_req).await?;
540
541    if "POST" != "GET" && "POST" != "HEAD" {
542      let headers = local_var_resp.headers();
543      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
544          Some(v) => v.to_str().unwrap().parse().unwrap(),
545          None => configuration::DEFAULT_RATELIMIT,
546      };
547      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
548          Some(v) => v.to_str().unwrap().parse().unwrap(),
549          None => 0,
550      };
551    }
552
553    let local_var_status = local_var_resp.status();
554    let local_var_content = local_var_resp.text().await?;
555
556    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
557        serde_json::from_str(&local_var_content).map_err(Error::from)
558    } else {
559        let local_var_entity: Option<CreateDmRoutingConfigRuleError> = serde_json::from_str(&local_var_content).ok();
560        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
561        Err(Error::ResponseError(local_var_error))
562    }
563}
564
565/// Clear the active version designation. This is a bookkeeping operation only — it does not stop edge traffic. Minerva continues serving the last-activated version until the domain association is removed in Spotless. Only removing the routing config from the domain (via Spotless) triggers Neptune to drop the reference, which causes Minerva to stop fetching and eventually clean up the cached config. Idempotent: returns 200 even if already deactivated.
566pub async fn deactivate_dm_routing_config(configuration: &mut configuration::Configuration, params: DeactivateDmRoutingConfigParams) -> Result<crate::models::RoutingConfigResponse, Error<DeactivateDmRoutingConfigError>> {
567    let local_var_configuration = configuration;
568
569    // unbox the parameters
570    let config_id = params.config_id;
571
572
573    let local_var_client = &local_var_configuration.client;
574
575    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/deactivate", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
576    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
577
578    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
579        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
580    }
581    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
582        let local_var_key = local_var_apikey.key.clone();
583        let local_var_value = match local_var_apikey.prefix {
584            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
585            None => local_var_key,
586        };
587        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
588    };
589
590    let local_var_req = local_var_req_builder.build()?;
591    let local_var_resp = local_var_client.execute(local_var_req).await?;
592
593    if "POST" != "GET" && "POST" != "HEAD" {
594      let headers = local_var_resp.headers();
595      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
596          Some(v) => v.to_str().unwrap().parse().unwrap(),
597          None => configuration::DEFAULT_RATELIMIT,
598      };
599      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
600          Some(v) => v.to_str().unwrap().parse().unwrap(),
601          None => 0,
602      };
603    }
604
605    let local_var_status = local_var_resp.status();
606    let local_var_content = local_var_resp.text().await?;
607
608    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
609        serde_json::from_str(&local_var_content).map_err(Error::from)
610    } else {
611        let local_var_entity: Option<DeactivateDmRoutingConfigError> = serde_json::from_str(&local_var_content).ok();
612        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
613        Err(Error::ResponseError(local_var_error))
614    }
615}
616
617/// Delete a routing config. By default, configs that have an active version cannot be deleted. Pass `force=true` to bypass the active-version check — this is destructive and will immediately stop traffic routing for any paths the config serves. The `force` parameter does **not** bypass the domain-association check; if domains are still associated, deletion is rejected with 409 regardless of `force`.
618pub async fn delete_dm_routing_config(configuration: &mut configuration::Configuration, params: DeleteDmRoutingConfigParams) -> Result<(), Error<DeleteDmRoutingConfigError>> {
619    let local_var_configuration = configuration;
620
621    // unbox the parameters
622    let config_id = params.config_id;
623    let force = params.force;
624
625
626    let local_var_client = &local_var_configuration.client;
627
628    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
629    let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
630
631    if let Some(ref local_var_str) = force {
632        local_var_req_builder = local_var_req_builder.query(&[("force", &local_var_str.to_string())]);
633    }
634    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
635        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
636    }
637    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
638        let local_var_key = local_var_apikey.key.clone();
639        let local_var_value = match local_var_apikey.prefix {
640            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
641            None => local_var_key,
642        };
643        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
644    };
645
646    let local_var_req = local_var_req_builder.build()?;
647    let local_var_resp = local_var_client.execute(local_var_req).await?;
648
649    if "DELETE" != "GET" && "DELETE" != "HEAD" {
650      let headers = local_var_resp.headers();
651      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
652          Some(v) => v.to_str().unwrap().parse().unwrap(),
653          None => configuration::DEFAULT_RATELIMIT,
654      };
655      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
656          Some(v) => v.to_str().unwrap().parse().unwrap(),
657          None => 0,
658      };
659    }
660
661    let local_var_status = local_var_resp.status();
662    let local_var_content = local_var_resp.text().await?;
663
664    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
665        Ok(())
666    } else {
667        let local_var_entity: Option<DeleteDmRoutingConfigError> = serde_json::from_str(&local_var_content).ok();
668        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
669        Err(Error::ResponseError(local_var_error))
670    }
671}
672
673/// Delete all inactive versions for a routing config. The currently active version, if any, is retained.
674pub async fn delete_dm_routing_config_inactive_versions(configuration: &mut configuration::Configuration, params: DeleteDmRoutingConfigInactiveVersionsParams) -> Result<(), Error<DeleteDmRoutingConfigInactiveVersionsError>> {
675    let local_var_configuration = configuration;
676
677    // unbox the parameters
678    let config_id = params.config_id;
679
680
681    let local_var_client = &local_var_configuration.client;
682
683    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/versions/inactive", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
684    let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
685
686    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
687        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
688    }
689    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
690        let local_var_key = local_var_apikey.key.clone();
691        let local_var_value = match local_var_apikey.prefix {
692            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
693            None => local_var_key,
694        };
695        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
696    };
697
698    let local_var_req = local_var_req_builder.build()?;
699    let local_var_resp = local_var_client.execute(local_var_req).await?;
700
701    if "DELETE" != "GET" && "DELETE" != "HEAD" {
702      let headers = local_var_resp.headers();
703      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
704          Some(v) => v.to_str().unwrap().parse().unwrap(),
705          None => configuration::DEFAULT_RATELIMIT,
706      };
707      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
708          Some(v) => v.to_str().unwrap().parse().unwrap(),
709          None => 0,
710      };
711    }
712
713    let local_var_status = local_var_resp.status();
714    let local_var_content = local_var_resp.text().await?;
715
716    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
717        Ok(())
718    } else {
719        let local_var_entity: Option<DeleteDmRoutingConfigInactiveVersionsError> = serde_json::from_str(&local_var_content).ok();
720        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
721        Err(Error::ResponseError(local_var_error))
722    }
723}
724
725/// Delete a path from the config's draft version. If no draft exists, one is created automatically by cloning the active version.
726pub async fn delete_dm_routing_config_path(configuration: &mut configuration::Configuration, params: DeleteDmRoutingConfigPathParams) -> Result<(), Error<DeleteDmRoutingConfigPathError>> {
727    let local_var_configuration = configuration;
728
729    // unbox the parameters
730    let config_id = params.config_id;
731    let path_id = params.path_id;
732
733
734    let local_var_client = &local_var_configuration.client;
735
736    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths/{path_id}", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), path_id=crate::apis::urlencode(path_id));
737    let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
738
739    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
740        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
741    }
742    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
743        let local_var_key = local_var_apikey.key.clone();
744        let local_var_value = match local_var_apikey.prefix {
745            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
746            None => local_var_key,
747        };
748        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
749    };
750
751    let local_var_req = local_var_req_builder.build()?;
752    let local_var_resp = local_var_client.execute(local_var_req).await?;
753
754    if "DELETE" != "GET" && "DELETE" != "HEAD" {
755      let headers = local_var_resp.headers();
756      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
757          Some(v) => v.to_str().unwrap().parse().unwrap(),
758          None => configuration::DEFAULT_RATELIMIT,
759      };
760      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
761          Some(v) => v.to_str().unwrap().parse().unwrap(),
762          None => 0,
763      };
764    }
765
766    let local_var_status = local_var_resp.status();
767    let local_var_content = local_var_resp.text().await?;
768
769    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
770        Ok(())
771    } else {
772        let local_var_entity: Option<DeleteDmRoutingConfigPathError> = serde_json::from_str(&local_var_content).ok();
773        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
774        Err(Error::ResponseError(local_var_error))
775    }
776}
777
778/// Delete a rule from the config's draft version. If no draft exists, one is created automatically by cloning the active version.
779pub async fn delete_dm_routing_config_rule(configuration: &mut configuration::Configuration, params: DeleteDmRoutingConfigRuleParams) -> Result<(), Error<DeleteDmRoutingConfigRuleError>> {
780    let local_var_configuration = configuration;
781
782    // unbox the parameters
783    let config_id = params.config_id;
784    let path_id = params.path_id;
785    let rule_id = params.rule_id;
786
787
788    let local_var_client = &local_var_configuration.client;
789
790    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths/{path_id}/rules/{rule_id}", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), path_id=crate::apis::urlencode(path_id), rule_id=crate::apis::urlencode(rule_id));
791    let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
792
793    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
794        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
795    }
796    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
797        let local_var_key = local_var_apikey.key.clone();
798        let local_var_value = match local_var_apikey.prefix {
799            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
800            None => local_var_key,
801        };
802        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
803    };
804
805    let local_var_req = local_var_req_builder.build()?;
806    let local_var_resp = local_var_client.execute(local_var_req).await?;
807
808    if "DELETE" != "GET" && "DELETE" != "HEAD" {
809      let headers = local_var_resp.headers();
810      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
811          Some(v) => v.to_str().unwrap().parse().unwrap(),
812          None => configuration::DEFAULT_RATELIMIT,
813      };
814      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
815          Some(v) => v.to_str().unwrap().parse().unwrap(),
816          None => 0,
817      };
818    }
819
820    let local_var_status = local_var_resp.status();
821    let local_var_content = local_var_resp.text().await?;
822
823    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
824        Ok(())
825    } else {
826        let local_var_entity: Option<DeleteDmRoutingConfigRuleError> = serde_json::from_str(&local_var_content).ok();
827        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
828        Err(Error::ResponseError(local_var_error))
829    }
830}
831
832/// Delete the current draft version, reverting any unactivated changes.
833pub async fn discard_dm_routing_config_draft(configuration: &mut configuration::Configuration, params: DiscardDmRoutingConfigDraftParams) -> Result<(), Error<DiscardDmRoutingConfigDraftError>> {
834    let local_var_configuration = configuration;
835
836    // unbox the parameters
837    let config_id = params.config_id;
838
839
840    let local_var_client = &local_var_configuration.client;
841
842    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/draft", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
843    let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
844
845    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
846        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
847    }
848    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
849        let local_var_key = local_var_apikey.key.clone();
850        let local_var_value = match local_var_apikey.prefix {
851            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
852            None => local_var_key,
853        };
854        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
855    };
856
857    let local_var_req = local_var_req_builder.build()?;
858    let local_var_resp = local_var_client.execute(local_var_req).await?;
859
860    if "DELETE" != "GET" && "DELETE" != "HEAD" {
861      let headers = local_var_resp.headers();
862      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
863          Some(v) => v.to_str().unwrap().parse().unwrap(),
864          None => configuration::DEFAULT_RATELIMIT,
865      };
866      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
867          Some(v) => v.to_str().unwrap().parse().unwrap(),
868          None => 0,
869      };
870    }
871
872    let local_var_status = local_var_resp.status();
873    let local_var_content = local_var_resp.text().await?;
874
875    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
876        Ok(())
877    } else {
878        let local_var_entity: Option<DiscardDmRoutingConfigDraftError> = serde_json::from_str(&local_var_content).ok();
879        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
880        Err(Error::ResponseError(local_var_error))
881    }
882}
883
884/// Retrieve a single routing config by its identifier.
885pub async fn get_dm_routing_config(configuration: &mut configuration::Configuration, params: GetDmRoutingConfigParams) -> Result<crate::models::RoutingConfigResponse, Error<GetDmRoutingConfigError>> {
886    let local_var_configuration = configuration;
887
888    // unbox the parameters
889    let config_id = params.config_id;
890
891
892    let local_var_client = &local_var_configuration.client;
893
894    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
895    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
896
897    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
898        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
899    }
900    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
901        let local_var_key = local_var_apikey.key.clone();
902        let local_var_value = match local_var_apikey.prefix {
903            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
904            None => local_var_key,
905        };
906        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
907    };
908
909    let local_var_req = local_var_req_builder.build()?;
910    let local_var_resp = local_var_client.execute(local_var_req).await?;
911
912    if "GET" != "GET" && "GET" != "HEAD" {
913      let headers = local_var_resp.headers();
914      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
915          Some(v) => v.to_str().unwrap().parse().unwrap(),
916          None => configuration::DEFAULT_RATELIMIT,
917      };
918      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
919          Some(v) => v.to_str().unwrap().parse().unwrap(),
920          None => 0,
921      };
922    }
923
924    let local_var_status = local_var_resp.status();
925    let local_var_content = local_var_resp.text().await?;
926
927    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
928        serde_json::from_str(&local_var_content).map_err(Error::from)
929    } else {
930        let local_var_entity: Option<GetDmRoutingConfigError> = serde_json::from_str(&local_var_content).ok();
931        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
932        Err(Error::ResponseError(local_var_error))
933    }
934}
935
936/// Compare the current draft version against the active version and return the paths and rules that have been added, modified, or deleted.
937pub async fn get_dm_routing_config_draft_diff(configuration: &mut configuration::Configuration, params: GetDmRoutingConfigDraftDiffParams) -> Result<crate::models::DraftDiff, Error<GetDmRoutingConfigDraftDiffError>> {
938    let local_var_configuration = configuration;
939
940    // unbox the parameters
941    let config_id = params.config_id;
942
943
944    let local_var_client = &local_var_configuration.client;
945
946    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/draft/diff", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
947    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
948
949    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
950        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
951    }
952    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
953        let local_var_key = local_var_apikey.key.clone();
954        let local_var_value = match local_var_apikey.prefix {
955            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
956            None => local_var_key,
957        };
958        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
959    };
960
961    let local_var_req = local_var_req_builder.build()?;
962    let local_var_resp = local_var_client.execute(local_var_req).await?;
963
964    if "GET" != "GET" && "GET" != "HEAD" {
965      let headers = local_var_resp.headers();
966      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
967          Some(v) => v.to_str().unwrap().parse().unwrap(),
968          None => configuration::DEFAULT_RATELIMIT,
969      };
970      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
971          Some(v) => v.to_str().unwrap().parse().unwrap(),
972          None => 0,
973      };
974    }
975
976    let local_var_status = local_var_resp.status();
977    let local_var_content = local_var_resp.text().await?;
978
979    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
980        serde_json::from_str(&local_var_content).map_err(Error::from)
981    } else {
982        let local_var_entity: Option<GetDmRoutingConfigDraftDiffError> = serde_json::from_str(&local_var_content).ok();
983        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
984        Err(Error::ResponseError(local_var_error))
985    }
986}
987
988/// Retrieve a single path by its stable identifier.
989pub async fn get_dm_routing_config_path(configuration: &mut configuration::Configuration, params: GetDmRoutingConfigPathParams) -> Result<crate::models::PathResponse, Error<GetDmRoutingConfigPathError>> {
990    let local_var_configuration = configuration;
991
992    // unbox the parameters
993    let config_id = params.config_id;
994    let path_id = params.path_id;
995
996
997    let local_var_client = &local_var_configuration.client;
998
999    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths/{path_id}", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), path_id=crate::apis::urlencode(path_id));
1000    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
1001
1002    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1003        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1004    }
1005    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1006        let local_var_key = local_var_apikey.key.clone();
1007        let local_var_value = match local_var_apikey.prefix {
1008            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1009            None => local_var_key,
1010        };
1011        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1012    };
1013
1014    let local_var_req = local_var_req_builder.build()?;
1015    let local_var_resp = local_var_client.execute(local_var_req).await?;
1016
1017    if "GET" != "GET" && "GET" != "HEAD" {
1018      let headers = local_var_resp.headers();
1019      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1020          Some(v) => v.to_str().unwrap().parse().unwrap(),
1021          None => configuration::DEFAULT_RATELIMIT,
1022      };
1023      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1024          Some(v) => v.to_str().unwrap().parse().unwrap(),
1025          None => 0,
1026      };
1027    }
1028
1029    let local_var_status = local_var_resp.status();
1030    let local_var_content = local_var_resp.text().await?;
1031
1032    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1033        serde_json::from_str(&local_var_content).map_err(Error::from)
1034    } else {
1035        let local_var_entity: Option<GetDmRoutingConfigPathError> = serde_json::from_str(&local_var_content).ok();
1036        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1037        Err(Error::ResponseError(local_var_error))
1038    }
1039}
1040
1041/// Retrieve a single rule by its stable identifier.
1042pub async fn get_dm_routing_config_rule(configuration: &mut configuration::Configuration, params: GetDmRoutingConfigRuleParams) -> Result<crate::models::RuleResponse, Error<GetDmRoutingConfigRuleError>> {
1043    let local_var_configuration = configuration;
1044
1045    // unbox the parameters
1046    let config_id = params.config_id;
1047    let path_id = params.path_id;
1048    let rule_id = params.rule_id;
1049
1050
1051    let local_var_client = &local_var_configuration.client;
1052
1053    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths/{path_id}/rules/{rule_id}", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), path_id=crate::apis::urlencode(path_id), rule_id=crate::apis::urlencode(rule_id));
1054    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
1055
1056    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1057        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1058    }
1059    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1060        let local_var_key = local_var_apikey.key.clone();
1061        let local_var_value = match local_var_apikey.prefix {
1062            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1063            None => local_var_key,
1064        };
1065        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1066    };
1067
1068    let local_var_req = local_var_req_builder.build()?;
1069    let local_var_resp = local_var_client.execute(local_var_req).await?;
1070
1071    if "GET" != "GET" && "GET" != "HEAD" {
1072      let headers = local_var_resp.headers();
1073      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1074          Some(v) => v.to_str().unwrap().parse().unwrap(),
1075          None => configuration::DEFAULT_RATELIMIT,
1076      };
1077      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1078          Some(v) => v.to_str().unwrap().parse().unwrap(),
1079          None => 0,
1080      };
1081    }
1082
1083    let local_var_status = local_var_resp.status();
1084    let local_var_content = local_var_resp.text().await?;
1085
1086    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1087        serde_json::from_str(&local_var_content).map_err(Error::from)
1088    } else {
1089        let local_var_entity: Option<GetDmRoutingConfigRuleError> = serde_json::from_str(&local_var_content).ok();
1090        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1091        Err(Error::ResponseError(local_var_error))
1092    }
1093}
1094
1095/// List paths for the config. Returns paths from the active version if one exists, otherwise from the draft.
1096pub async fn list_dm_routing_config_paths(configuration: &mut configuration::Configuration, params: ListDmRoutingConfigPathsParams) -> Result<crate::models::PathsResponse, Error<ListDmRoutingConfigPathsError>> {
1097    let local_var_configuration = configuration;
1098
1099    // unbox the parameters
1100    let config_id = params.config_id;
1101    let path = params.path;
1102    let _match = params._match;
1103    let sort = params.sort;
1104    let cursor = params.cursor;
1105    let limit = params.limit;
1106
1107
1108    let local_var_client = &local_var_configuration.client;
1109
1110    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
1111    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
1112
1113    if let Some(ref local_var_str) = path {
1114        local_var_req_builder = local_var_req_builder.query(&[("path", &local_var_str.to_string())]);
1115    }
1116    if let Some(ref local_var_str) = _match {
1117        local_var_req_builder = local_var_req_builder.query(&[("match", &local_var_str.to_string())]);
1118    }
1119    if let Some(ref local_var_str) = sort {
1120        local_var_req_builder = local_var_req_builder.query(&[("sort", &local_var_str.to_string())]);
1121    }
1122    if let Some(ref local_var_str) = cursor {
1123        local_var_req_builder = local_var_req_builder.query(&[("cursor", &local_var_str.to_string())]);
1124    }
1125    if let Some(ref local_var_str) = limit {
1126        local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]);
1127    }
1128    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1129        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1130    }
1131    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1132        let local_var_key = local_var_apikey.key.clone();
1133        let local_var_value = match local_var_apikey.prefix {
1134            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1135            None => local_var_key,
1136        };
1137        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1138    };
1139
1140    let local_var_req = local_var_req_builder.build()?;
1141    let local_var_resp = local_var_client.execute(local_var_req).await?;
1142
1143    if "GET" != "GET" && "GET" != "HEAD" {
1144      let headers = local_var_resp.headers();
1145      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1146          Some(v) => v.to_str().unwrap().parse().unwrap(),
1147          None => configuration::DEFAULT_RATELIMIT,
1148      };
1149      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1150          Some(v) => v.to_str().unwrap().parse().unwrap(),
1151          None => 0,
1152      };
1153    }
1154
1155    let local_var_status = local_var_resp.status();
1156    let local_var_content = local_var_resp.text().await?;
1157
1158    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1159        serde_json::from_str(&local_var_content).map_err(Error::from)
1160    } else {
1161        let local_var_entity: Option<ListDmRoutingConfigPathsError> = serde_json::from_str(&local_var_content).ok();
1162        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1163        Err(Error::ResponseError(local_var_error))
1164    }
1165}
1166
1167/// List all rules for a path in evaluation order.
1168pub async fn list_dm_routing_config_rules(configuration: &mut configuration::Configuration, params: ListDmRoutingConfigRulesParams) -> Result<crate::models::RulesResponse, Error<ListDmRoutingConfigRulesError>> {
1169    let local_var_configuration = configuration;
1170
1171    // unbox the parameters
1172    let config_id = params.config_id;
1173    let path_id = params.path_id;
1174    let sort = params.sort;
1175    let cursor = params.cursor;
1176    let limit = params.limit;
1177
1178
1179    let local_var_client = &local_var_configuration.client;
1180
1181    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths/{path_id}/rules", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), path_id=crate::apis::urlencode(path_id));
1182    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
1183
1184    if let Some(ref local_var_str) = sort {
1185        local_var_req_builder = local_var_req_builder.query(&[("sort", &local_var_str.to_string())]);
1186    }
1187    if let Some(ref local_var_str) = cursor {
1188        local_var_req_builder = local_var_req_builder.query(&[("cursor", &local_var_str.to_string())]);
1189    }
1190    if let Some(ref local_var_str) = limit {
1191        local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]);
1192    }
1193    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1194        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1195    }
1196    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1197        let local_var_key = local_var_apikey.key.clone();
1198        let local_var_value = match local_var_apikey.prefix {
1199            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1200            None => local_var_key,
1201        };
1202        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1203    };
1204
1205    let local_var_req = local_var_req_builder.build()?;
1206    let local_var_resp = local_var_client.execute(local_var_req).await?;
1207
1208    if "GET" != "GET" && "GET" != "HEAD" {
1209      let headers = local_var_resp.headers();
1210      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1211          Some(v) => v.to_str().unwrap().parse().unwrap(),
1212          None => configuration::DEFAULT_RATELIMIT,
1213      };
1214      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1215          Some(v) => v.to_str().unwrap().parse().unwrap(),
1216          None => 0,
1217      };
1218    }
1219
1220    let local_var_status = local_var_resp.status();
1221    let local_var_content = local_var_resp.text().await?;
1222
1223    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1224        serde_json::from_str(&local_var_content).map_err(Error::from)
1225    } else {
1226        let local_var_entity: Option<ListDmRoutingConfigRulesError> = serde_json::from_str(&local_var_content).ok();
1227        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1228        Err(Error::ResponseError(local_var_error))
1229    }
1230}
1231
1232/// List all versions for a routing config.
1233pub async fn list_dm_routing_config_versions(configuration: &mut configuration::Configuration, params: ListDmRoutingConfigVersionsParams) -> Result<crate::models::VersionsResponse, Error<ListDmRoutingConfigVersionsError>> {
1234    let local_var_configuration = configuration;
1235
1236    // unbox the parameters
1237    let config_id = params.config_id;
1238    let sort = params.sort;
1239    let cursor = params.cursor;
1240    let limit = params.limit;
1241
1242
1243    let local_var_client = &local_var_configuration.client;
1244
1245    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/versions", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
1246    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
1247
1248    if let Some(ref local_var_str) = sort {
1249        local_var_req_builder = local_var_req_builder.query(&[("sort", &local_var_str.to_string())]);
1250    }
1251    if let Some(ref local_var_str) = cursor {
1252        local_var_req_builder = local_var_req_builder.query(&[("cursor", &local_var_str.to_string())]);
1253    }
1254    if let Some(ref local_var_str) = limit {
1255        local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]);
1256    }
1257    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1258        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1259    }
1260    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1261        let local_var_key = local_var_apikey.key.clone();
1262        let local_var_value = match local_var_apikey.prefix {
1263            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1264            None => local_var_key,
1265        };
1266        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1267    };
1268
1269    let local_var_req = local_var_req_builder.build()?;
1270    let local_var_resp = local_var_client.execute(local_var_req).await?;
1271
1272    if "GET" != "GET" && "GET" != "HEAD" {
1273      let headers = local_var_resp.headers();
1274      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1275          Some(v) => v.to_str().unwrap().parse().unwrap(),
1276          None => configuration::DEFAULT_RATELIMIT,
1277      };
1278      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1279          Some(v) => v.to_str().unwrap().parse().unwrap(),
1280          None => 0,
1281      };
1282    }
1283
1284    let local_var_status = local_var_resp.status();
1285    let local_var_content = local_var_resp.text().await?;
1286
1287    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1288        serde_json::from_str(&local_var_content).map_err(Error::from)
1289    } else {
1290        let local_var_entity: Option<ListDmRoutingConfigVersionsError> = serde_json::from_str(&local_var_content).ok();
1291        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1292        Err(Error::ResponseError(local_var_error))
1293    }
1294}
1295
1296/// List all routing configs for the authenticated customer.
1297pub async fn list_dm_routing_configs(configuration: &mut configuration::Configuration, params: ListDmRoutingConfigsParams) -> Result<crate::models::RoutingConfigsResponse, Error<ListDmRoutingConfigsError>> {
1298    let local_var_configuration = configuration;
1299
1300    // unbox the parameters
1301    let state = params.state;
1302    let sort = params.sort;
1303    let cursor = params.cursor;
1304    let limit = params.limit;
1305
1306
1307    let local_var_client = &local_var_configuration.client;
1308
1309    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs", local_var_configuration.base_path);
1310    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
1311
1312    if let Some(ref local_var_str) = state {
1313        local_var_req_builder = match "csv" {
1314            "multi" => local_var_req_builder.query(&local_var_str.into_iter().map(|p| ("state".to_owned(), p.to_string())).collect::<Vec<(std::string::String, std::string::String)>>()),
1315            _ => local_var_req_builder.query(&[("state", &local_var_str.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(",").to_string())]),
1316        };
1317    }
1318    if let Some(ref local_var_str) = sort {
1319        local_var_req_builder = local_var_req_builder.query(&[("sort", &local_var_str.to_string())]);
1320    }
1321    if let Some(ref local_var_str) = cursor {
1322        local_var_req_builder = local_var_req_builder.query(&[("cursor", &local_var_str.to_string())]);
1323    }
1324    if let Some(ref local_var_str) = limit {
1325        local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]);
1326    }
1327    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1328        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1329    }
1330    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1331        let local_var_key = local_var_apikey.key.clone();
1332        let local_var_value = match local_var_apikey.prefix {
1333            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1334            None => local_var_key,
1335        };
1336        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1337    };
1338
1339    let local_var_req = local_var_req_builder.build()?;
1340    let local_var_resp = local_var_client.execute(local_var_req).await?;
1341
1342    if "GET" != "GET" && "GET" != "HEAD" {
1343      let headers = local_var_resp.headers();
1344      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1345          Some(v) => v.to_str().unwrap().parse().unwrap(),
1346          None => configuration::DEFAULT_RATELIMIT,
1347      };
1348      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1349          Some(v) => v.to_str().unwrap().parse().unwrap(),
1350          None => 0,
1351      };
1352    }
1353
1354    let local_var_status = local_var_resp.status();
1355    let local_var_content = local_var_resp.text().await?;
1356
1357    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1358        serde_json::from_str(&local_var_content).map_err(Error::from)
1359    } else {
1360        let local_var_entity: Option<ListDmRoutingConfigsError> = serde_json::from_str(&local_var_content).ok();
1361        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1362        Err(Error::ResponseError(local_var_error))
1363    }
1364}
1365
1366/// Reactivate a previously-active version. The currently active version, if any, becomes inactive but is retained in version history.
1367pub async fn reactivate_dm_routing_config_version(configuration: &mut configuration::Configuration, params: ReactivateDmRoutingConfigVersionParams) -> Result<crate::models::RoutingConfigVersionResponse, Error<ReactivateDmRoutingConfigVersionError>> {
1368    let local_var_configuration = configuration;
1369
1370    // unbox the parameters
1371    let config_id = params.config_id;
1372    let version_id = params.version_id;
1373
1374
1375    let local_var_client = &local_var_configuration.client;
1376
1377    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/versions/{version_id}/activate", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), version_id=crate::apis::urlencode(version_id));
1378    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
1379
1380    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1381        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1382    }
1383    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1384        let local_var_key = local_var_apikey.key.clone();
1385        let local_var_value = match local_var_apikey.prefix {
1386            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1387            None => local_var_key,
1388        };
1389        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1390    };
1391
1392    let local_var_req = local_var_req_builder.build()?;
1393    let local_var_resp = local_var_client.execute(local_var_req).await?;
1394
1395    if "POST" != "GET" && "POST" != "HEAD" {
1396      let headers = local_var_resp.headers();
1397      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1398          Some(v) => v.to_str().unwrap().parse().unwrap(),
1399          None => configuration::DEFAULT_RATELIMIT,
1400      };
1401      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1402          Some(v) => v.to_str().unwrap().parse().unwrap(),
1403          None => 0,
1404      };
1405    }
1406
1407    let local_var_status = local_var_resp.status();
1408    let local_var_content = local_var_resp.text().await?;
1409
1410    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1411        serde_json::from_str(&local_var_content).map_err(Error::from)
1412    } else {
1413        let local_var_entity: Option<ReactivateDmRoutingConfigVersionError> = serde_json::from_str(&local_var_content).ok();
1414        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1415        Err(Error::ResponseError(local_var_error))
1416    }
1417}
1418
1419/// Update metadata on the draft version, such as its comment. If no draft exists, one is created automatically by cloning the active version.
1420pub async fn update_dm_routing_config_draft(configuration: &mut configuration::Configuration, params: UpdateDmRoutingConfigDraftParams) -> Result<crate::models::RoutingConfigVersionResponse, Error<UpdateDmRoutingConfigDraftError>> {
1421    let local_var_configuration = configuration;
1422
1423    // unbox the parameters
1424    let config_id = params.config_id;
1425    let draft_update = params.draft_update;
1426
1427
1428    let local_var_client = &local_var_configuration.client;
1429
1430    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/draft", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id));
1431    let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str());
1432
1433    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1434        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1435    }
1436    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1437        let local_var_key = local_var_apikey.key.clone();
1438        let local_var_value = match local_var_apikey.prefix {
1439            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1440            None => local_var_key,
1441        };
1442        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1443    };
1444    local_var_req_builder = local_var_req_builder.json(&draft_update);
1445
1446    let local_var_req = local_var_req_builder.build()?;
1447    let local_var_resp = local_var_client.execute(local_var_req).await?;
1448
1449    if "PATCH" != "GET" && "PATCH" != "HEAD" {
1450      let headers = local_var_resp.headers();
1451      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1452          Some(v) => v.to_str().unwrap().parse().unwrap(),
1453          None => configuration::DEFAULT_RATELIMIT,
1454      };
1455      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1456          Some(v) => v.to_str().unwrap().parse().unwrap(),
1457          None => 0,
1458      };
1459    }
1460
1461    let local_var_status = local_var_resp.status();
1462    let local_var_content = local_var_resp.text().await?;
1463
1464    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1465        serde_json::from_str(&local_var_content).map_err(Error::from)
1466    } else {
1467        let local_var_entity: Option<UpdateDmRoutingConfigDraftError> = serde_json::from_str(&local_var_content).ok();
1468        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1469        Err(Error::ResponseError(local_var_error))
1470    }
1471}
1472
1473/// Update a path on the config's draft version. If no draft exists, one is created automatically by cloning the active version.
1474pub async fn update_dm_routing_config_path(configuration: &mut configuration::Configuration, params: UpdateDmRoutingConfigPathParams) -> Result<crate::models::PathResponse, Error<UpdateDmRoutingConfigPathError>> {
1475    let local_var_configuration = configuration;
1476
1477    // unbox the parameters
1478    let config_id = params.config_id;
1479    let path_id = params.path_id;
1480    let path_update = params.path_update;
1481
1482
1483    let local_var_client = &local_var_configuration.client;
1484
1485    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths/{path_id}", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), path_id=crate::apis::urlencode(path_id));
1486    let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str());
1487
1488    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1489        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1490    }
1491    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1492        let local_var_key = local_var_apikey.key.clone();
1493        let local_var_value = match local_var_apikey.prefix {
1494            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1495            None => local_var_key,
1496        };
1497        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1498    };
1499    local_var_req_builder = local_var_req_builder.json(&path_update);
1500
1501    let local_var_req = local_var_req_builder.build()?;
1502    let local_var_resp = local_var_client.execute(local_var_req).await?;
1503
1504    if "PATCH" != "GET" && "PATCH" != "HEAD" {
1505      let headers = local_var_resp.headers();
1506      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1507          Some(v) => v.to_str().unwrap().parse().unwrap(),
1508          None => configuration::DEFAULT_RATELIMIT,
1509      };
1510      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1511          Some(v) => v.to_str().unwrap().parse().unwrap(),
1512          None => 0,
1513      };
1514    }
1515
1516    let local_var_status = local_var_resp.status();
1517    let local_var_content = local_var_resp.text().await?;
1518
1519    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1520        serde_json::from_str(&local_var_content).map_err(Error::from)
1521    } else {
1522        let local_var_entity: Option<UpdateDmRoutingConfigPathError> = serde_json::from_str(&local_var_content).ok();
1523        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1524        Err(Error::ResponseError(local_var_error))
1525    }
1526}
1527
1528/// Update a rule on the config's draft version. If no draft exists, one is created automatically by cloning the active version.
1529pub async fn update_dm_routing_config_rule(configuration: &mut configuration::Configuration, params: UpdateDmRoutingConfigRuleParams) -> Result<crate::models::RuleResponse, Error<UpdateDmRoutingConfigRuleError>> {
1530    let local_var_configuration = configuration;
1531
1532    // unbox the parameters
1533    let config_id = params.config_id;
1534    let path_id = params.path_id;
1535    let rule_id = params.rule_id;
1536    let rule_update = params.rule_update;
1537
1538
1539    let local_var_client = &local_var_configuration.client;
1540
1541    let local_var_uri_str = format!("{}/domain-management/v1/routing-configs/{config_id}/paths/{path_id}/rules/{rule_id}", local_var_configuration.base_path, config_id=crate::apis::urlencode(config_id), path_id=crate::apis::urlencode(path_id), rule_id=crate::apis::urlencode(rule_id));
1542    let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str());
1543
1544    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
1545        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
1546    }
1547    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
1548        let local_var_key = local_var_apikey.key.clone();
1549        let local_var_value = match local_var_apikey.prefix {
1550            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
1551            None => local_var_key,
1552        };
1553        local_var_req_builder = local_var_req_builder.header("Fastly-Key", local_var_value);
1554    };
1555    local_var_req_builder = local_var_req_builder.json(&rule_update);
1556
1557    let local_var_req = local_var_req_builder.build()?;
1558    let local_var_resp = local_var_client.execute(local_var_req).await?;
1559
1560    if "PATCH" != "GET" && "PATCH" != "HEAD" {
1561      let headers = local_var_resp.headers();
1562      local_var_configuration.rate_limit_remaining = match headers.get("Fastly-RateLimit-Remaining") {
1563          Some(v) => v.to_str().unwrap().parse().unwrap(),
1564          None => configuration::DEFAULT_RATELIMIT,
1565      };
1566      local_var_configuration.rate_limit_reset = match headers.get("Fastly-RateLimit-Reset") {
1567          Some(v) => v.to_str().unwrap().parse().unwrap(),
1568          None => 0,
1569      };
1570    }
1571
1572    let local_var_status = local_var_resp.status();
1573    let local_var_content = local_var_resp.text().await?;
1574
1575    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
1576        serde_json::from_str(&local_var_content).map_err(Error::from)
1577    } else {
1578        let local_var_entity: Option<UpdateDmRoutingConfigRuleError> = serde_json::from_str(&local_var_content).ok();
1579        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
1580        Err(Error::ResponseError(local_var_error))
1581    }
1582}
1583