Skip to main content

clientapi_pve/apis/
nodes_apt_api.rs

1/*
2 * Proxmox Virtual Environment API
3 *
4 * Generated from apidoc.js. NOT an official Proxmox specification. See https://pve.proxmox.com/pve-docs/api-viewer/ for the upstream documentation.
5 *
6 * The version of the OpenAPI document: 9.x
7 * 
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17
18/// struct for typed errors of method [`nodes_apt_add_repository`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum NodesAptAddRepositoryError {
22    Status400(models::PveError),
23    Status401(models::PveError),
24    Status403(models::PveError),
25    Status404(models::PveError),
26    Status500(models::PveError),
27    Status501(models::PveError),
28    Status503(models::PveError),
29    UnknownValue(serde_json::Value),
30}
31
32/// struct for typed errors of method [`nodes_apt_change_repository`]
33#[derive(Debug, Clone, Serialize, Deserialize)]
34#[serde(untagged)]
35pub enum NodesAptChangeRepositoryError {
36    Status400(models::PveError),
37    Status401(models::PveError),
38    Status403(models::PveError),
39    Status404(models::PveError),
40    Status500(models::PveError),
41    Status501(models::PveError),
42    Status503(models::PveError),
43    UnknownValue(serde_json::Value),
44}
45
46/// struct for typed errors of method [`nodes_apt_changelog`]
47#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(untagged)]
49pub enum NodesAptChangelogError {
50    Status400(models::PveError),
51    Status401(models::PveError),
52    Status403(models::PveError),
53    Status404(models::PveError),
54    Status500(models::PveError),
55    Status501(models::PveError),
56    Status503(models::PveError),
57    UnknownValue(serde_json::Value),
58}
59
60/// struct for typed errors of method [`nodes_apt_get_apt`]
61#[derive(Debug, Clone, Serialize, Deserialize)]
62#[serde(untagged)]
63pub enum NodesAptGetAptError {
64    Status400(models::PveError),
65    Status401(models::PveError),
66    Status403(models::PveError),
67    Status404(models::PveError),
68    Status500(models::PveError),
69    Status501(models::PveError),
70    Status503(models::PveError),
71    UnknownValue(serde_json::Value),
72}
73
74/// struct for typed errors of method [`nodes_apt_list_updates`]
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(untagged)]
77pub enum NodesAptListUpdatesError {
78    Status400(models::PveError),
79    Status401(models::PveError),
80    Status403(models::PveError),
81    Status404(models::PveError),
82    Status500(models::PveError),
83    Status501(models::PveError),
84    Status503(models::PveError),
85    UnknownValue(serde_json::Value),
86}
87
88/// struct for typed errors of method [`nodes_apt_repositories`]
89#[derive(Debug, Clone, Serialize, Deserialize)]
90#[serde(untagged)]
91pub enum NodesAptRepositoriesError {
92    Status400(models::PveError),
93    Status401(models::PveError),
94    Status403(models::PveError),
95    Status404(models::PveError),
96    Status500(models::PveError),
97    Status501(models::PveError),
98    Status503(models::PveError),
99    UnknownValue(serde_json::Value),
100}
101
102/// struct for typed errors of method [`nodes_apt_update_database`]
103#[derive(Debug, Clone, Serialize, Deserialize)]
104#[serde(untagged)]
105pub enum NodesAptUpdateDatabaseError {
106    Status400(models::PveError),
107    Status401(models::PveError),
108    Status403(models::PveError),
109    Status404(models::PveError),
110    Status500(models::PveError),
111    Status501(models::PveError),
112    Status503(models::PveError),
113    UnknownValue(serde_json::Value),
114}
115
116/// struct for typed errors of method [`nodes_apt_versions`]
117#[derive(Debug, Clone, Serialize, Deserialize)]
118#[serde(untagged)]
119pub enum NodesAptVersionsError {
120    Status400(models::PveError),
121    Status401(models::PveError),
122    Status403(models::PveError),
123    Status404(models::PveError),
124    Status500(models::PveError),
125    Status501(models::PveError),
126    Status503(models::PveError),
127    UnknownValue(serde_json::Value),
128}
129
130
131/// Add a standard repository to the configuration
132pub async fn nodes_apt_add_repository(configuration: &configuration::Configuration, node: &str, nodes_apt_add_repository_request: models::NodesAptAddRepositoryRequest) -> Result<models::NodesAptAddRepositoryResponse, Error<NodesAptAddRepositoryError>> {
133    // add a prefix to parameters to efficiently prevent name collisions
134    let p_path_node = node;
135    let p_body_nodes_apt_add_repository_request = nodes_apt_add_repository_request;
136
137    let uri_str = format!("{}/nodes/{node}/apt/repositories", configuration.base_path, node=crate::apis::urlencode(p_path_node));
138    let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
139
140    if let Some(ref user_agent) = configuration.user_agent {
141        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
142    }
143    if let Some(ref apikey) = configuration.api_key {
144        let key = apikey.key.clone();
145        let value = match apikey.prefix {
146            Some(ref prefix) => format!("{} {}", prefix, key),
147            None => key,
148        };
149        req_builder = req_builder.header("Authorization", value);
150    };
151    if let Some(ref apikey) = configuration.api_key {
152        let key = apikey.key.clone();
153        let value = match apikey.prefix {
154            Some(ref prefix) => format!("{} {}", prefix, key),
155            None => key,
156        };
157        req_builder = req_builder.header("CSRFPreventionToken", value);
158    };
159    req_builder = req_builder.json(&p_body_nodes_apt_add_repository_request);
160
161    let req = req_builder.build()?;
162    let resp = configuration.client.execute(req).await?;
163
164    let status = resp.status();
165    let content_type = resp
166        .headers()
167        .get("content-type")
168        .and_then(|v| v.to_str().ok())
169        .unwrap_or("application/octet-stream");
170    let content_type = super::ContentType::from(content_type);
171
172    if !status.is_client_error() && !status.is_server_error() {
173        let content = resp.text().await?;
174        match content_type {
175            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
176            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::NodesAptAddRepositoryResponse`"))),
177            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::NodesAptAddRepositoryResponse`")))),
178        }
179    } else {
180        let content = resp.text().await?;
181        let entity: Option<NodesAptAddRepositoryError> = serde_json::from_str(&content).ok();
182        Err(Error::ResponseError(ResponseContent { status, content, entity }))
183    }
184}
185
186/// Change the properties of a repository. Currently only allows enabling/disabling.
187pub async fn nodes_apt_change_repository(configuration: &configuration::Configuration, node: &str, nodes_apt_change_repository_request: models::NodesAptChangeRepositoryRequest) -> Result<models::NodesAptChangeRepositoryResponse, Error<NodesAptChangeRepositoryError>> {
188    // add a prefix to parameters to efficiently prevent name collisions
189    let p_path_node = node;
190    let p_body_nodes_apt_change_repository_request = nodes_apt_change_repository_request;
191
192    let uri_str = format!("{}/nodes/{node}/apt/repositories", configuration.base_path, node=crate::apis::urlencode(p_path_node));
193    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
194
195    if let Some(ref user_agent) = configuration.user_agent {
196        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
197    }
198    if let Some(ref apikey) = configuration.api_key {
199        let key = apikey.key.clone();
200        let value = match apikey.prefix {
201            Some(ref prefix) => format!("{} {}", prefix, key),
202            None => key,
203        };
204        req_builder = req_builder.header("Authorization", value);
205    };
206    if let Some(ref apikey) = configuration.api_key {
207        let key = apikey.key.clone();
208        let value = match apikey.prefix {
209            Some(ref prefix) => format!("{} {}", prefix, key),
210            None => key,
211        };
212        req_builder = req_builder.header("CSRFPreventionToken", value);
213    };
214    req_builder = req_builder.json(&p_body_nodes_apt_change_repository_request);
215
216    let req = req_builder.build()?;
217    let resp = configuration.client.execute(req).await?;
218
219    let status = resp.status();
220    let content_type = resp
221        .headers()
222        .get("content-type")
223        .and_then(|v| v.to_str().ok())
224        .unwrap_or("application/octet-stream");
225    let content_type = super::ContentType::from(content_type);
226
227    if !status.is_client_error() && !status.is_server_error() {
228        let content = resp.text().await?;
229        match content_type {
230            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
231            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::NodesAptChangeRepositoryResponse`"))),
232            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::NodesAptChangeRepositoryResponse`")))),
233        }
234    } else {
235        let content = resp.text().await?;
236        let entity: Option<NodesAptChangeRepositoryError> = serde_json::from_str(&content).ok();
237        Err(Error::ResponseError(ResponseContent { status, content, entity }))
238    }
239}
240
241/// Get package changelogs.
242pub async fn nodes_apt_changelog(configuration: &configuration::Configuration, name: &str, node: &str, version: Option<&str>) -> Result<models::NodesAptChangelogResponse, Error<NodesAptChangelogError>> {
243    // add a prefix to parameters to efficiently prevent name collisions
244    let p_query_name = name;
245    let p_path_node = node;
246    let p_query_version = version;
247
248    let uri_str = format!("{}/nodes/{node}/apt/changelog", configuration.base_path, node=crate::apis::urlencode(p_path_node));
249    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
250
251    req_builder = req_builder.query(&[("name", &p_query_name.to_string())]);
252    if let Some(ref param_value) = p_query_version {
253        req_builder = req_builder.query(&[("version", &param_value.to_string())]);
254    }
255    if let Some(ref user_agent) = configuration.user_agent {
256        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
257    }
258    if let Some(ref apikey) = configuration.api_key {
259        let key = apikey.key.clone();
260        let value = match apikey.prefix {
261            Some(ref prefix) => format!("{} {}", prefix, key),
262            None => key,
263        };
264        req_builder = req_builder.header("Authorization", value);
265    };
266    if let Some(ref apikey) = configuration.api_key {
267        let key = apikey.key.clone();
268        let value = match apikey.prefix {
269            Some(ref prefix) => format!("{} {}", prefix, key),
270            None => key,
271        };
272        req_builder = req_builder.header("CSRFPreventionToken", value);
273    };
274
275    let req = req_builder.build()?;
276    let resp = configuration.client.execute(req).await?;
277
278    let status = resp.status();
279    let content_type = resp
280        .headers()
281        .get("content-type")
282        .and_then(|v| v.to_str().ok())
283        .unwrap_or("application/octet-stream");
284    let content_type = super::ContentType::from(content_type);
285
286    if !status.is_client_error() && !status.is_server_error() {
287        let content = resp.text().await?;
288        match content_type {
289            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
290            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::NodesAptChangelogResponse`"))),
291            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::NodesAptChangelogResponse`")))),
292        }
293    } else {
294        let content = resp.text().await?;
295        let entity: Option<NodesAptChangelogError> = serde_json::from_str(&content).ok();
296        Err(Error::ResponseError(ResponseContent { status, content, entity }))
297    }
298}
299
300/// Directory index for apt (Advanced Package Tool).
301pub async fn nodes_apt_get_apt(configuration: &configuration::Configuration, node: &str) -> Result<models::NodesAptGetAptResponse, Error<NodesAptGetAptError>> {
302    // add a prefix to parameters to efficiently prevent name collisions
303    let p_path_node = node;
304
305    let uri_str = format!("{}/nodes/{node}/apt", configuration.base_path, node=crate::apis::urlencode(p_path_node));
306    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
307
308    if let Some(ref user_agent) = configuration.user_agent {
309        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
310    }
311    if let Some(ref apikey) = configuration.api_key {
312        let key = apikey.key.clone();
313        let value = match apikey.prefix {
314            Some(ref prefix) => format!("{} {}", prefix, key),
315            None => key,
316        };
317        req_builder = req_builder.header("Authorization", value);
318    };
319    if let Some(ref apikey) = configuration.api_key {
320        let key = apikey.key.clone();
321        let value = match apikey.prefix {
322            Some(ref prefix) => format!("{} {}", prefix, key),
323            None => key,
324        };
325        req_builder = req_builder.header("CSRFPreventionToken", value);
326    };
327
328    let req = req_builder.build()?;
329    let resp = configuration.client.execute(req).await?;
330
331    let status = resp.status();
332    let content_type = resp
333        .headers()
334        .get("content-type")
335        .and_then(|v| v.to_str().ok())
336        .unwrap_or("application/octet-stream");
337    let content_type = super::ContentType::from(content_type);
338
339    if !status.is_client_error() && !status.is_server_error() {
340        let content = resp.text().await?;
341        match content_type {
342            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
343            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::NodesAptGetAptResponse`"))),
344            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::NodesAptGetAptResponse`")))),
345        }
346    } else {
347        let content = resp.text().await?;
348        let entity: Option<NodesAptGetAptError> = serde_json::from_str(&content).ok();
349        Err(Error::ResponseError(ResponseContent { status, content, entity }))
350    }
351}
352
353/// List available updates.
354pub async fn nodes_apt_list_updates(configuration: &configuration::Configuration, node: &str) -> Result<models::NodesAptListUpdatesResponse, Error<NodesAptListUpdatesError>> {
355    // add a prefix to parameters to efficiently prevent name collisions
356    let p_path_node = node;
357
358    let uri_str = format!("{}/nodes/{node}/apt/update", configuration.base_path, node=crate::apis::urlencode(p_path_node));
359    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
360
361    if let Some(ref user_agent) = configuration.user_agent {
362        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
363    }
364    if let Some(ref apikey) = configuration.api_key {
365        let key = apikey.key.clone();
366        let value = match apikey.prefix {
367            Some(ref prefix) => format!("{} {}", prefix, key),
368            None => key,
369        };
370        req_builder = req_builder.header("Authorization", value);
371    };
372    if let Some(ref apikey) = configuration.api_key {
373        let key = apikey.key.clone();
374        let value = match apikey.prefix {
375            Some(ref prefix) => format!("{} {}", prefix, key),
376            None => key,
377        };
378        req_builder = req_builder.header("CSRFPreventionToken", value);
379    };
380
381    let req = req_builder.build()?;
382    let resp = configuration.client.execute(req).await?;
383
384    let status = resp.status();
385    let content_type = resp
386        .headers()
387        .get("content-type")
388        .and_then(|v| v.to_str().ok())
389        .unwrap_or("application/octet-stream");
390    let content_type = super::ContentType::from(content_type);
391
392    if !status.is_client_error() && !status.is_server_error() {
393        let content = resp.text().await?;
394        match content_type {
395            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
396            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::NodesAptListUpdatesResponse`"))),
397            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::NodesAptListUpdatesResponse`")))),
398        }
399    } else {
400        let content = resp.text().await?;
401        let entity: Option<NodesAptListUpdatesError> = serde_json::from_str(&content).ok();
402        Err(Error::ResponseError(ResponseContent { status, content, entity }))
403    }
404}
405
406/// Get APT repository information.
407pub async fn nodes_apt_repositories(configuration: &configuration::Configuration, node: &str) -> Result<models::NodesAptRepositoriesResponse, Error<NodesAptRepositoriesError>> {
408    // add a prefix to parameters to efficiently prevent name collisions
409    let p_path_node = node;
410
411    let uri_str = format!("{}/nodes/{node}/apt/repositories", configuration.base_path, node=crate::apis::urlencode(p_path_node));
412    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
413
414    if let Some(ref user_agent) = configuration.user_agent {
415        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
416    }
417    if let Some(ref apikey) = configuration.api_key {
418        let key = apikey.key.clone();
419        let value = match apikey.prefix {
420            Some(ref prefix) => format!("{} {}", prefix, key),
421            None => key,
422        };
423        req_builder = req_builder.header("Authorization", value);
424    };
425    if let Some(ref apikey) = configuration.api_key {
426        let key = apikey.key.clone();
427        let value = match apikey.prefix {
428            Some(ref prefix) => format!("{} {}", prefix, key),
429            None => key,
430        };
431        req_builder = req_builder.header("CSRFPreventionToken", value);
432    };
433
434    let req = req_builder.build()?;
435    let resp = configuration.client.execute(req).await?;
436
437    let status = resp.status();
438    let content_type = resp
439        .headers()
440        .get("content-type")
441        .and_then(|v| v.to_str().ok())
442        .unwrap_or("application/octet-stream");
443    let content_type = super::ContentType::from(content_type);
444
445    if !status.is_client_error() && !status.is_server_error() {
446        let content = resp.text().await?;
447        match content_type {
448            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
449            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::NodesAptRepositoriesResponse`"))),
450            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::NodesAptRepositoriesResponse`")))),
451        }
452    } else {
453        let content = resp.text().await?;
454        let entity: Option<NodesAptRepositoriesError> = serde_json::from_str(&content).ok();
455        Err(Error::ResponseError(ResponseContent { status, content, entity }))
456    }
457}
458
459/// This is used to resynchronize the package index files from their sources (apt-get update).
460pub async fn nodes_apt_update_database(configuration: &configuration::Configuration, node: &str, nodes_apt_update_database_request: Option<models::NodesAptUpdateDatabaseRequest>) -> Result<models::NodesAptUpdateDatabaseResponse, Error<NodesAptUpdateDatabaseError>> {
461    // add a prefix to parameters to efficiently prevent name collisions
462    let p_path_node = node;
463    let p_body_nodes_apt_update_database_request = nodes_apt_update_database_request;
464
465    let uri_str = format!("{}/nodes/{node}/apt/update", configuration.base_path, node=crate::apis::urlencode(p_path_node));
466    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
467
468    if let Some(ref user_agent) = configuration.user_agent {
469        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
470    }
471    if let Some(ref apikey) = configuration.api_key {
472        let key = apikey.key.clone();
473        let value = match apikey.prefix {
474            Some(ref prefix) => format!("{} {}", prefix, key),
475            None => key,
476        };
477        req_builder = req_builder.header("Authorization", value);
478    };
479    if let Some(ref apikey) = configuration.api_key {
480        let key = apikey.key.clone();
481        let value = match apikey.prefix {
482            Some(ref prefix) => format!("{} {}", prefix, key),
483            None => key,
484        };
485        req_builder = req_builder.header("CSRFPreventionToken", value);
486    };
487    req_builder = req_builder.json(&p_body_nodes_apt_update_database_request);
488
489    let req = req_builder.build()?;
490    let resp = configuration.client.execute(req).await?;
491
492    let status = resp.status();
493    let content_type = resp
494        .headers()
495        .get("content-type")
496        .and_then(|v| v.to_str().ok())
497        .unwrap_or("application/octet-stream");
498    let content_type = super::ContentType::from(content_type);
499
500    if !status.is_client_error() && !status.is_server_error() {
501        let content = resp.text().await?;
502        match content_type {
503            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
504            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::NodesAptUpdateDatabaseResponse`"))),
505            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::NodesAptUpdateDatabaseResponse`")))),
506        }
507    } else {
508        let content = resp.text().await?;
509        let entity: Option<NodesAptUpdateDatabaseError> = serde_json::from_str(&content).ok();
510        Err(Error::ResponseError(ResponseContent { status, content, entity }))
511    }
512}
513
514/// Get package information for important Proxmox packages.
515pub async fn nodes_apt_versions(configuration: &configuration::Configuration, node: &str) -> Result<models::NodesAptVersionsResponse, Error<NodesAptVersionsError>> {
516    // add a prefix to parameters to efficiently prevent name collisions
517    let p_path_node = node;
518
519    let uri_str = format!("{}/nodes/{node}/apt/versions", configuration.base_path, node=crate::apis::urlencode(p_path_node));
520    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
521
522    if let Some(ref user_agent) = configuration.user_agent {
523        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
524    }
525    if let Some(ref apikey) = configuration.api_key {
526        let key = apikey.key.clone();
527        let value = match apikey.prefix {
528            Some(ref prefix) => format!("{} {}", prefix, key),
529            None => key,
530        };
531        req_builder = req_builder.header("Authorization", value);
532    };
533    if let Some(ref apikey) = configuration.api_key {
534        let key = apikey.key.clone();
535        let value = match apikey.prefix {
536            Some(ref prefix) => format!("{} {}", prefix, key),
537            None => key,
538        };
539        req_builder = req_builder.header("CSRFPreventionToken", value);
540    };
541
542    let req = req_builder.build()?;
543    let resp = configuration.client.execute(req).await?;
544
545    let status = resp.status();
546    let content_type = resp
547        .headers()
548        .get("content-type")
549        .and_then(|v| v.to_str().ok())
550        .unwrap_or("application/octet-stream");
551    let content_type = super::ContentType::from(content_type);
552
553    if !status.is_client_error() && !status.is_server_error() {
554        let content = resp.text().await?;
555        match content_type {
556            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
557            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::NodesAptVersionsResponse`"))),
558            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::NodesAptVersionsResponse`")))),
559        }
560    } else {
561        let content = resp.text().await?;
562        let entity: Option<NodesAptVersionsError> = serde_json::from_str(&content).ok();
563        Err(Error::ResponseError(ResponseContent { status, content, entity }))
564    }
565}
566