Skip to main content

clientapi_pve/apis/
pools_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 [`pools_create_pool`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum PoolsCreatePoolError {
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 [`pools_delete_pool`]
33#[derive(Debug, Clone, Serialize, Deserialize)]
34#[serde(untagged)]
35pub enum PoolsDeletePoolError {
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 [`pools_delete_pool_deprecated`]
47#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(untagged)]
49pub enum PoolsDeletePoolDeprecatedError {
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 [`pools_get_pools`]
61#[derive(Debug, Clone, Serialize, Deserialize)]
62#[serde(untagged)]
63pub enum PoolsGetPoolsError {
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 [`pools_read_pool`]
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(untagged)]
77pub enum PoolsReadPoolError {
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 [`pools_update_pool`]
89#[derive(Debug, Clone, Serialize, Deserialize)]
90#[serde(untagged)]
91pub enum PoolsUpdatePoolError {
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 [`pools_update_pool_deprecated`]
103#[derive(Debug, Clone, Serialize, Deserialize)]
104#[serde(untagged)]
105pub enum PoolsUpdatePoolDeprecatedError {
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
117/// Create new pool.
118pub async fn pools_create_pool(configuration: &configuration::Configuration, pools_create_pool_request: models::PoolsCreatePoolRequest) -> Result<models::PoolsCreatePoolResponse, Error<PoolsCreatePoolError>> {
119    // add a prefix to parameters to efficiently prevent name collisions
120    let p_body_pools_create_pool_request = pools_create_pool_request;
121
122    let uri_str = format!("{}/pools", configuration.base_path);
123    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
124
125    if let Some(ref user_agent) = configuration.user_agent {
126        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
127    }
128    if let Some(ref apikey) = configuration.api_key {
129        let key = apikey.key.clone();
130        let value = match apikey.prefix {
131            Some(ref prefix) => format!("{} {}", prefix, key),
132            None => key,
133        };
134        req_builder = req_builder.header("Authorization", value);
135    };
136    if let Some(ref apikey) = configuration.api_key {
137        let key = apikey.key.clone();
138        let value = match apikey.prefix {
139            Some(ref prefix) => format!("{} {}", prefix, key),
140            None => key,
141        };
142        req_builder = req_builder.header("CSRFPreventionToken", value);
143    };
144    req_builder = req_builder.json(&p_body_pools_create_pool_request);
145
146    let req = req_builder.build()?;
147    let resp = configuration.client.execute(req).await?;
148
149    let status = resp.status();
150    let content_type = resp
151        .headers()
152        .get("content-type")
153        .and_then(|v| v.to_str().ok())
154        .unwrap_or("application/octet-stream");
155    let content_type = super::ContentType::from(content_type);
156
157    if !status.is_client_error() && !status.is_server_error() {
158        let content = resp.text().await?;
159        match content_type {
160            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
161            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::PoolsCreatePoolResponse`"))),
162            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::PoolsCreatePoolResponse`")))),
163        }
164    } else {
165        let content = resp.text().await?;
166        let entity: Option<PoolsCreatePoolError> = serde_json::from_str(&content).ok();
167        Err(Error::ResponseError(ResponseContent { status, content, entity }))
168    }
169}
170
171/// Delete pool.  Permissions: You can only delete empty pools (no members).
172pub async fn pools_delete_pool(configuration: &configuration::Configuration, poolid: &str) -> Result<models::PoolsDeletePoolResponse, Error<PoolsDeletePoolError>> {
173    // add a prefix to parameters to efficiently prevent name collisions
174    let p_query_poolid = poolid;
175
176    let uri_str = format!("{}/pools", configuration.base_path);
177    let mut req_builder = configuration.client.request(reqwest::Method::DELETE, &uri_str);
178
179    req_builder = req_builder.query(&[("poolid", &p_query_poolid.to_string())]);
180    if let Some(ref user_agent) = configuration.user_agent {
181        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
182    }
183    if let Some(ref apikey) = configuration.api_key {
184        let key = apikey.key.clone();
185        let value = match apikey.prefix {
186            Some(ref prefix) => format!("{} {}", prefix, key),
187            None => key,
188        };
189        req_builder = req_builder.header("Authorization", value);
190    };
191    if let Some(ref apikey) = configuration.api_key {
192        let key = apikey.key.clone();
193        let value = match apikey.prefix {
194            Some(ref prefix) => format!("{} {}", prefix, key),
195            None => key,
196        };
197        req_builder = req_builder.header("CSRFPreventionToken", value);
198    };
199
200    let req = req_builder.build()?;
201    let resp = configuration.client.execute(req).await?;
202
203    let status = resp.status();
204    let content_type = resp
205        .headers()
206        .get("content-type")
207        .and_then(|v| v.to_str().ok())
208        .unwrap_or("application/octet-stream");
209    let content_type = super::ContentType::from(content_type);
210
211    if !status.is_client_error() && !status.is_server_error() {
212        let content = resp.text().await?;
213        match content_type {
214            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
215            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::PoolsDeletePoolResponse`"))),
216            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::PoolsDeletePoolResponse`")))),
217        }
218    } else {
219        let content = resp.text().await?;
220        let entity: Option<PoolsDeletePoolError> = serde_json::from_str(&content).ok();
221        Err(Error::ResponseError(ResponseContent { status, content, entity }))
222    }
223}
224
225/// Delete pool (deprecated, no support for nested pools, use 'DELETE /pools/?poolid={poolid}').  Permissions: You can only delete empty pools (no members).
226pub async fn pools_delete_pool_deprecated(configuration: &configuration::Configuration, poolid: &str) -> Result<models::PoolsDeletePoolDeprecatedResponse, Error<PoolsDeletePoolDeprecatedError>> {
227    // add a prefix to parameters to efficiently prevent name collisions
228    let p_path_poolid = poolid;
229
230    let uri_str = format!("{}/pools/{poolid}", configuration.base_path, poolid=crate::apis::urlencode(p_path_poolid));
231    let mut req_builder = configuration.client.request(reqwest::Method::DELETE, &uri_str);
232
233    if let Some(ref user_agent) = configuration.user_agent {
234        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
235    }
236    if let Some(ref apikey) = configuration.api_key {
237        let key = apikey.key.clone();
238        let value = match apikey.prefix {
239            Some(ref prefix) => format!("{} {}", prefix, key),
240            None => key,
241        };
242        req_builder = req_builder.header("Authorization", value);
243    };
244    if let Some(ref apikey) = configuration.api_key {
245        let key = apikey.key.clone();
246        let value = match apikey.prefix {
247            Some(ref prefix) => format!("{} {}", prefix, key),
248            None => key,
249        };
250        req_builder = req_builder.header("CSRFPreventionToken", value);
251    };
252
253    let req = req_builder.build()?;
254    let resp = configuration.client.execute(req).await?;
255
256    let status = resp.status();
257    let content_type = resp
258        .headers()
259        .get("content-type")
260        .and_then(|v| v.to_str().ok())
261        .unwrap_or("application/octet-stream");
262    let content_type = super::ContentType::from(content_type);
263
264    if !status.is_client_error() && !status.is_server_error() {
265        let content = resp.text().await?;
266        match content_type {
267            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
268            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::PoolsDeletePoolDeprecatedResponse`"))),
269            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::PoolsDeletePoolDeprecatedResponse`")))),
270        }
271    } else {
272        let content = resp.text().await?;
273        let entity: Option<PoolsDeletePoolDeprecatedError> = serde_json::from_str(&content).ok();
274        Err(Error::ResponseError(ResponseContent { status, content, entity }))
275    }
276}
277
278/// List pools or get pool configuration.  Permissions: List all pools where you have Pool.Audit permissions on /pool/<pool>, or the pool specific with {poolid}
279pub async fn pools_get_pools(configuration: &configuration::Configuration, poolid: Option<&str>, r#type: Option<models::PvePoolsTypeEnum>) -> Result<models::PoolsGetPoolsResponse, Error<PoolsGetPoolsError>> {
280    // add a prefix to parameters to efficiently prevent name collisions
281    let p_query_poolid = poolid;
282    let p_query_type = r#type;
283
284    let uri_str = format!("{}/pools", configuration.base_path);
285    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
286
287    if let Some(ref param_value) = p_query_poolid {
288        req_builder = req_builder.query(&[("poolid", &param_value.to_string())]);
289    }
290    if let Some(ref param_value) = p_query_type {
291        req_builder = req_builder.query(&[("type", &param_value.to_string())]);
292    }
293    if let Some(ref user_agent) = configuration.user_agent {
294        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
295    }
296    if let Some(ref apikey) = configuration.api_key {
297        let key = apikey.key.clone();
298        let value = match apikey.prefix {
299            Some(ref prefix) => format!("{} {}", prefix, key),
300            None => key,
301        };
302        req_builder = req_builder.header("Authorization", value);
303    };
304    if let Some(ref apikey) = configuration.api_key {
305        let key = apikey.key.clone();
306        let value = match apikey.prefix {
307            Some(ref prefix) => format!("{} {}", prefix, key),
308            None => key,
309        };
310        req_builder = req_builder.header("CSRFPreventionToken", value);
311    };
312
313    let req = req_builder.build()?;
314    let resp = configuration.client.execute(req).await?;
315
316    let status = resp.status();
317    let content_type = resp
318        .headers()
319        .get("content-type")
320        .and_then(|v| v.to_str().ok())
321        .unwrap_or("application/octet-stream");
322    let content_type = super::ContentType::from(content_type);
323
324    if !status.is_client_error() && !status.is_server_error() {
325        let content = resp.text().await?;
326        match content_type {
327            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
328            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::PoolsGetPoolsResponse`"))),
329            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::PoolsGetPoolsResponse`")))),
330        }
331    } else {
332        let content = resp.text().await?;
333        let entity: Option<PoolsGetPoolsError> = serde_json::from_str(&content).ok();
334        Err(Error::ResponseError(ResponseContent { status, content, entity }))
335    }
336}
337
338/// Get pool configuration (deprecated, no support for nested pools, use 'GET /pools/?poolid={poolid}').
339pub async fn pools_read_pool(configuration: &configuration::Configuration, poolid: &str, r#type: Option<models::PvePoolsTypeEnum>) -> Result<models::PoolsReadPoolResponse, Error<PoolsReadPoolError>> {
340    // add a prefix to parameters to efficiently prevent name collisions
341    let p_path_poolid = poolid;
342    let p_query_type = r#type;
343
344    let uri_str = format!("{}/pools/{poolid}", configuration.base_path, poolid=crate::apis::urlencode(p_path_poolid));
345    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
346
347    if let Some(ref param_value) = p_query_type {
348        req_builder = req_builder.query(&[("type", &param_value.to_string())]);
349    }
350    if let Some(ref user_agent) = configuration.user_agent {
351        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
352    }
353    if let Some(ref apikey) = configuration.api_key {
354        let key = apikey.key.clone();
355        let value = match apikey.prefix {
356            Some(ref prefix) => format!("{} {}", prefix, key),
357            None => key,
358        };
359        req_builder = req_builder.header("Authorization", value);
360    };
361    if let Some(ref apikey) = configuration.api_key {
362        let key = apikey.key.clone();
363        let value = match apikey.prefix {
364            Some(ref prefix) => format!("{} {}", prefix, key),
365            None => key,
366        };
367        req_builder = req_builder.header("CSRFPreventionToken", value);
368    };
369
370    let req = req_builder.build()?;
371    let resp = configuration.client.execute(req).await?;
372
373    let status = resp.status();
374    let content_type = resp
375        .headers()
376        .get("content-type")
377        .and_then(|v| v.to_str().ok())
378        .unwrap_or("application/octet-stream");
379    let content_type = super::ContentType::from(content_type);
380
381    if !status.is_client_error() && !status.is_server_error() {
382        let content = resp.text().await?;
383        match content_type {
384            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
385            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::PoolsReadPoolResponse`"))),
386            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::PoolsReadPoolResponse`")))),
387        }
388    } else {
389        let content = resp.text().await?;
390        let entity: Option<PoolsReadPoolError> = serde_json::from_str(&content).ok();
391        Err(Error::ResponseError(ResponseContent { status, content, entity }))
392    }
393}
394
395/// Update pool.  Permissions: You also need the right to modify permissions on any object you add/delete.
396pub async fn pools_update_pool(configuration: &configuration::Configuration, pools_update_pool_request: models::PoolsUpdatePoolRequest) -> Result<models::PoolsUpdatePoolResponse, Error<PoolsUpdatePoolError>> {
397    // add a prefix to parameters to efficiently prevent name collisions
398    let p_body_pools_update_pool_request = pools_update_pool_request;
399
400    let uri_str = format!("{}/pools", configuration.base_path);
401    let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
402
403    if let Some(ref user_agent) = configuration.user_agent {
404        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
405    }
406    if let Some(ref apikey) = configuration.api_key {
407        let key = apikey.key.clone();
408        let value = match apikey.prefix {
409            Some(ref prefix) => format!("{} {}", prefix, key),
410            None => key,
411        };
412        req_builder = req_builder.header("Authorization", value);
413    };
414    if let Some(ref apikey) = configuration.api_key {
415        let key = apikey.key.clone();
416        let value = match apikey.prefix {
417            Some(ref prefix) => format!("{} {}", prefix, key),
418            None => key,
419        };
420        req_builder = req_builder.header("CSRFPreventionToken", value);
421    };
422    req_builder = req_builder.json(&p_body_pools_update_pool_request);
423
424    let req = req_builder.build()?;
425    let resp = configuration.client.execute(req).await?;
426
427    let status = resp.status();
428    let content_type = resp
429        .headers()
430        .get("content-type")
431        .and_then(|v| v.to_str().ok())
432        .unwrap_or("application/octet-stream");
433    let content_type = super::ContentType::from(content_type);
434
435    if !status.is_client_error() && !status.is_server_error() {
436        let content = resp.text().await?;
437        match content_type {
438            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
439            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::PoolsUpdatePoolResponse`"))),
440            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::PoolsUpdatePoolResponse`")))),
441        }
442    } else {
443        let content = resp.text().await?;
444        let entity: Option<PoolsUpdatePoolError> = serde_json::from_str(&content).ok();
445        Err(Error::ResponseError(ResponseContent { status, content, entity }))
446    }
447}
448
449/// Update pool data (deprecated, no support for nested pools - use 'PUT /pools/?poolid={poolid}' instead).  Permissions: You also need the right to modify permissions on any object you add/delete.
450pub async fn pools_update_pool_deprecated(configuration: &configuration::Configuration, poolid: &str, pools_update_pool_deprecated_request: Option<models::PoolsUpdatePoolDeprecatedRequest>) -> Result<models::PoolsUpdatePoolDeprecatedResponse, Error<PoolsUpdatePoolDeprecatedError>> {
451    // add a prefix to parameters to efficiently prevent name collisions
452    let p_path_poolid = poolid;
453    let p_body_pools_update_pool_deprecated_request = pools_update_pool_deprecated_request;
454
455    let uri_str = format!("{}/pools/{poolid}", configuration.base_path, poolid=crate::apis::urlencode(p_path_poolid));
456    let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
457
458    if let Some(ref user_agent) = configuration.user_agent {
459        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
460    }
461    if let Some(ref apikey) = configuration.api_key {
462        let key = apikey.key.clone();
463        let value = match apikey.prefix {
464            Some(ref prefix) => format!("{} {}", prefix, key),
465            None => key,
466        };
467        req_builder = req_builder.header("Authorization", value);
468    };
469    if let Some(ref apikey) = configuration.api_key {
470        let key = apikey.key.clone();
471        let value = match apikey.prefix {
472            Some(ref prefix) => format!("{} {}", prefix, key),
473            None => key,
474        };
475        req_builder = req_builder.header("CSRFPreventionToken", value);
476    };
477    req_builder = req_builder.json(&p_body_pools_update_pool_deprecated_request);
478
479    let req = req_builder.build()?;
480    let resp = configuration.client.execute(req).await?;
481
482    let status = resp.status();
483    let content_type = resp
484        .headers()
485        .get("content-type")
486        .and_then(|v| v.to_str().ok())
487        .unwrap_or("application/octet-stream");
488    let content_type = super::ContentType::from(content_type);
489
490    if !status.is_client_error() && !status.is_server_error() {
491        let content = resp.text().await?;
492        match content_type {
493            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
494            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::PoolsUpdatePoolDeprecatedResponse`"))),
495            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::PoolsUpdatePoolDeprecatedResponse`")))),
496        }
497    } else {
498        let content = resp.text().await?;
499        let entity: Option<PoolsUpdatePoolDeprecatedError> = serde_json::from_str(&content).ok();
500        Err(Error::ResponseError(ResponseContent { status, content, entity }))
501    }
502}
503