Skip to main content

wings_api/
client.rs

1// This file is auto-generated from OpenAPI spec. Do not edit manually.
2use super::*;
3use futures_util::TryStreamExt;
4use reqwest::{Client, Method, StatusCode};
5use serde::de::DeserializeOwned;
6use std::{
7    pin::Pin,
8    sync::LazyLock,
9    task::{Context, Poll},
10};
11use tokio::io::AsyncRead;
12
13static CLIENT: LazyLock<Client> = LazyLock::new(|| {
14    Client::builder()
15        .user_agent("Calagopus Panel")
16        .build()
17        .expect("Failed to create reqwest client")
18});
19
20#[derive(Debug)]
21pub enum ApiHttpError {
22    Http(StatusCode, super::ApiError),
23    Reqwest(reqwest::Error),
24    MsgpackEncode(rmp_serde::encode::Error),
25    MsgpackDecode(rmp_serde::decode::Error),
26}
27
28impl From<ApiHttpError> for anyhow::Error {
29    fn from(value: ApiHttpError) -> Self {
30        match value {
31            ApiHttpError::Http(status, err) => {
32                anyhow::anyhow!("wings api status code {status}: {}", err.error)
33            }
34            ApiHttpError::Reqwest(err) => anyhow::anyhow!(err),
35            ApiHttpError::MsgpackEncode(err) => anyhow::anyhow!(err),
36            ApiHttpError::MsgpackDecode(err) => anyhow::anyhow!(err),
37        }
38    }
39}
40
41pub struct AsyncResponseReader(Box<dyn AsyncRead + Send + Unpin>);
42
43impl AsyncRead for AsyncResponseReader {
44    fn poll_read(
45        mut self: Pin<&mut Self>,
46        cx: &mut Context<'_>,
47        buf: &mut tokio::io::ReadBuf<'_>,
48    ) -> Poll<std::io::Result<()>> {
49        Pin::new(&mut self.0).poll_read(cx, buf)
50    }
51}
52
53impl<'de> Deserialize<'de> for AsyncResponseReader {
54    fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
55    where
56        D: serde::Deserializer<'de>,
57    {
58        Ok(Self(Box::new(tokio::io::empty())))
59    }
60}
61
62async fn request_impl<T: DeserializeOwned + 'static>(
63    client: &WingsClient,
64    method: Method,
65    endpoint: impl AsRef<str>,
66    body: Option<&impl Serialize>,
67    body_raw: Option<compact_str::CompactString>,
68) -> Result<T, ApiHttpError> {
69    let url = format!(
70        "{}{}",
71        client.base_url.trim_end_matches('/'),
72        endpoint.as_ref()
73    );
74    let mut request = CLIENT.request(method, &url);
75    request = request.header("Accept", "application/msgpack");
76
77    if !client.token.is_empty() {
78        request = request.header("Authorization", format!("Bearer {}", client.token));
79    }
80
81    if let Some(body) = body {
82        request = request.header("Content-Type", "application/msgpack");
83
84        let mut bytes = Vec::new();
85        let mut se = rmp_serde::Serializer::new(&mut bytes)
86            .with_struct_map()
87            .with_human_readable();
88        if let Err(err) = body.serialize(&mut se) {
89            return Err(ApiHttpError::MsgpackEncode(err));
90        }
91        request = request.body(bytes);
92    } else if let Some(body_raw) = body_raw {
93        request = request.body(Vec::from(body_raw));
94    }
95
96    match request.send().await {
97        Ok(response) => {
98            if response.status().is_success() {
99                if std::any::type_name::<T>() == std::any::type_name::<AsyncResponseReader>() {
100                    let stream = response.bytes_stream().map_err(|err| {
101                        std::io::Error::other(format!("failed to read multipart field: {err}"))
102                    });
103                    let stream_reader = tokio_util::io::StreamReader::new(stream);
104
105                    return Ok(*(Box::new(AsyncResponseReader(Box::new(stream_reader)))
106                        as Box<dyn std::any::Any>)
107                        .downcast::<T>()
108                        .unwrap());
109                }
110
111                match response.bytes().await {
112                    Ok(data) => {
113                        let mut de =
114                            rmp_serde::Deserializer::new(data.as_ref()).with_human_readable();
115                        match T::deserialize(&mut de) {
116                            Ok(data) => Ok(data),
117                            Err(err) => Err(ApiHttpError::MsgpackDecode(err)),
118                        }
119                    }
120                    Err(err) => Err(ApiHttpError::Reqwest(err)),
121                }
122            } else {
123                Err(ApiHttpError::Http(
124                    response.status(),
125                    match response.bytes().await {
126                        Ok(data) => {
127                            let mut de =
128                                rmp_serde::Deserializer::new(data.as_ref()).with_human_readable();
129                            match super::ApiError::deserialize(&mut de) {
130                                Ok(data) => data,
131                                Err(err) => super::ApiError {
132                                    error: err.to_string().into(),
133                                },
134                            }
135                        }
136                        Err(err) => super::ApiError {
137                            error: err.to_string().into(),
138                        },
139                    },
140                ))
141            }
142        }
143        Err(err) => Err(ApiHttpError::Reqwest(err)),
144    }
145}
146
147pub struct WingsClient {
148    base_url: String,
149    token: String,
150}
151
152impl WingsClient {
153    #[inline]
154    pub fn new(base_url: String, token: String) -> Self {
155        Self { base_url, token }
156    }
157
158    pub fn request_raw(
159        &self,
160        method: Method,
161        endpoint: impl AsRef<str>,
162    ) -> reqwest::RequestBuilder {
163        let url = format!(
164            "{}/{}",
165            self.base_url.trim_end_matches('/'),
166            endpoint.as_ref().trim_start_matches('/')
167        );
168        let mut request = CLIENT.request(method, &url);
169
170        if !self.token.is_empty() {
171            request = request.header("Authorization", format!("Bearer {}", self.token));
172        }
173
174        request
175    }
176
177    pub async fn delete_backups_backup(
178        &self,
179        backup: uuid::Uuid,
180        data: &super::backups_backup::delete::RequestBody,
181    ) -> Result<super::backups_backup::delete::Response, ApiHttpError> {
182        request_impl(
183            self,
184            Method::DELETE,
185            format!("/api/backups/{backup}"),
186            Some(data),
187            None,
188        )
189        .await
190    }
191
192    pub async fn post_deauthorize_user(
193        &self,
194        data: &super::deauthorize_user::post::RequestBody,
195    ) -> Result<super::deauthorize_user::post::Response, ApiHttpError> {
196        request_impl(
197            self,
198            Method::POST,
199            "/api/deauthorize-user",
200            Some(data),
201            None,
202        )
203        .await
204    }
205
206    pub async fn get_servers(&self) -> Result<super::servers::get::Response, ApiHttpError> {
207        request_impl(self, Method::GET, "/api/servers", None::<&()>, None).await
208    }
209
210    pub async fn post_servers(
211        &self,
212        data: &super::servers::post::RequestBody,
213    ) -> Result<super::servers::post::Response, ApiHttpError> {
214        request_impl(self, Method::POST, "/api/servers", Some(data), None).await
215    }
216
217    pub async fn post_servers_power(
218        &self,
219        data: &super::servers_power::post::RequestBody,
220    ) -> Result<super::servers_power::post::Response, ApiHttpError> {
221        request_impl(self, Method::POST, "/api/servers/power", Some(data), None).await
222    }
223
224    pub async fn get_servers_utilization(
225        &self,
226    ) -> Result<super::servers_utilization::get::Response, ApiHttpError> {
227        request_impl(
228            self,
229            Method::GET,
230            "/api/servers/utilization",
231            None::<&()>,
232            None,
233        )
234        .await
235    }
236
237    pub async fn get_servers_server(
238        &self,
239        server: uuid::Uuid,
240    ) -> Result<super::servers_server::get::Response, ApiHttpError> {
241        request_impl(
242            self,
243            Method::GET,
244            format!("/api/servers/{server}"),
245            None::<&()>,
246            None,
247        )
248        .await
249    }
250
251    pub async fn delete_servers_server(
252        &self,
253        server: uuid::Uuid,
254    ) -> Result<super::servers_server::delete::Response, ApiHttpError> {
255        request_impl(
256            self,
257            Method::DELETE,
258            format!("/api/servers/{server}"),
259            None::<&()>,
260            None,
261        )
262        .await
263    }
264
265    pub async fn post_servers_server_backup(
266        &self,
267        server: uuid::Uuid,
268        data: &super::servers_server_backup::post::RequestBody,
269    ) -> Result<super::servers_server_backup::post::Response, ApiHttpError> {
270        request_impl(
271            self,
272            Method::POST,
273            format!("/api/servers/{server}/backup"),
274            Some(data),
275            None,
276        )
277        .await
278    }
279
280    pub async fn delete_servers_server_backup_backup(
281        &self,
282        server: uuid::Uuid,
283        backup: uuid::Uuid,
284    ) -> Result<super::servers_server_backup_backup::delete::Response, ApiHttpError> {
285        request_impl(
286            self,
287            Method::DELETE,
288            format!("/api/servers/{server}/backup/{backup}"),
289            None::<&()>,
290            None,
291        )
292        .await
293    }
294
295    pub async fn post_servers_server_backup_backup_restore(
296        &self,
297        server: uuid::Uuid,
298        backup: uuid::Uuid,
299        data: &super::servers_server_backup_backup_restore::post::RequestBody,
300    ) -> Result<super::servers_server_backup_backup_restore::post::Response, ApiHttpError> {
301        request_impl(
302            self,
303            Method::POST,
304            format!("/api/servers/{server}/backup/{backup}/restore"),
305            Some(data),
306            None,
307        )
308        .await
309    }
310
311    pub async fn post_servers_server_commands(
312        &self,
313        server: uuid::Uuid,
314        data: &super::servers_server_commands::post::RequestBody,
315    ) -> Result<super::servers_server_commands::post::Response, ApiHttpError> {
316        request_impl(
317            self,
318            Method::POST,
319            format!("/api/servers/{server}/commands"),
320            Some(data),
321            None,
322        )
323        .await
324    }
325
326    pub async fn post_servers_server_files_chmod(
327        &self,
328        server: uuid::Uuid,
329        data: &super::servers_server_files_chmod::post::RequestBody,
330    ) -> Result<super::servers_server_files_chmod::post::Response, ApiHttpError> {
331        request_impl(
332            self,
333            Method::POST,
334            format!("/api/servers/{server}/files/chmod"),
335            Some(data),
336            None,
337        )
338        .await
339    }
340
341    pub async fn post_servers_server_files_compress(
342        &self,
343        server: uuid::Uuid,
344        data: &super::servers_server_files_compress::post::RequestBody,
345    ) -> Result<super::servers_server_files_compress::post::Response, ApiHttpError> {
346        request_impl(
347            self,
348            Method::POST,
349            format!("/api/servers/{server}/files/compress"),
350            Some(data),
351            None,
352        )
353        .await
354    }
355
356    pub async fn get_servers_server_files_contents(
357        &self,
358        server: uuid::Uuid,
359        file: &str,
360        download: bool,
361        max_size: u64,
362    ) -> Result<super::servers_server_files_contents::get::Response, ApiHttpError> {
363        let file = urlencoding::encode(file);
364        request_impl(self, Method::GET, format!("/api/servers/{server}/files/contents?file={file}&download={download}&max_size={max_size}"), None::<&()>, None).await
365    }
366
367    pub async fn post_servers_server_files_copy(
368        &self,
369        server: uuid::Uuid,
370        data: &super::servers_server_files_copy::post::RequestBody,
371    ) -> Result<super::servers_server_files_copy::post::Response, ApiHttpError> {
372        request_impl(
373            self,
374            Method::POST,
375            format!("/api/servers/{server}/files/copy"),
376            Some(data),
377            None,
378        )
379        .await
380    }
381
382    pub async fn post_servers_server_files_copy_many(
383        &self,
384        server: uuid::Uuid,
385        data: &super::servers_server_files_copy_many::post::RequestBody,
386    ) -> Result<super::servers_server_files_copy_many::post::Response, ApiHttpError> {
387        request_impl(
388            self,
389            Method::POST,
390            format!("/api/servers/{server}/files/copy-many"),
391            Some(data),
392            None,
393        )
394        .await
395    }
396
397    pub async fn post_servers_server_files_copy_remote(
398        &self,
399        server: uuid::Uuid,
400        data: &super::servers_server_files_copy_remote::post::RequestBody,
401    ) -> Result<super::servers_server_files_copy_remote::post::Response, ApiHttpError> {
402        request_impl(
403            self,
404            Method::POST,
405            format!("/api/servers/{server}/files/copy-remote"),
406            Some(data),
407            None,
408        )
409        .await
410    }
411
412    pub async fn post_servers_server_files_create_directory(
413        &self,
414        server: uuid::Uuid,
415        data: &super::servers_server_files_create_directory::post::RequestBody,
416    ) -> Result<super::servers_server_files_create_directory::post::Response, ApiHttpError> {
417        request_impl(
418            self,
419            Method::POST,
420            format!("/api/servers/{server}/files/create-directory"),
421            Some(data),
422            None,
423        )
424        .await
425    }
426
427    pub async fn post_servers_server_files_decompress(
428        &self,
429        server: uuid::Uuid,
430        data: &super::servers_server_files_decompress::post::RequestBody,
431    ) -> Result<super::servers_server_files_decompress::post::Response, ApiHttpError> {
432        request_impl(
433            self,
434            Method::POST,
435            format!("/api/servers/{server}/files/decompress"),
436            Some(data),
437            None,
438        )
439        .await
440    }
441
442    pub async fn post_servers_server_files_delete(
443        &self,
444        server: uuid::Uuid,
445        data: &super::servers_server_files_delete::post::RequestBody,
446    ) -> Result<super::servers_server_files_delete::post::Response, ApiHttpError> {
447        request_impl(
448            self,
449            Method::POST,
450            format!("/api/servers/{server}/files/delete"),
451            Some(data),
452            None,
453        )
454        .await
455    }
456
457    pub async fn get_servers_server_files_fingerprints(
458        &self,
459        server: uuid::Uuid,
460        algorithm: Algorithm,
461        files: Vec<compact_str::CompactString>,
462    ) -> Result<super::servers_server_files_fingerprints::get::Response, ApiHttpError> {
463        let files = files
464            .into_iter()
465            .map(|s| urlencoding::encode(&s).into())
466            .collect::<Vec<compact_str::CompactString>>()
467            .join("&files=");
468        request_impl(
469            self,
470            Method::GET,
471            format!("/api/servers/{server}/files/fingerprints?algorithm={algorithm}&files={files}"),
472            None::<&()>,
473            None,
474        )
475        .await
476    }
477
478    pub async fn get_servers_server_files_list(
479        &self,
480        server: uuid::Uuid,
481        directory: &str,
482        ignored: Vec<compact_str::CompactString>,
483        per_page: u64,
484        page: u64,
485        sort: DirectorySortingMode,
486    ) -> Result<super::servers_server_files_list::get::Response, ApiHttpError> {
487        let directory = urlencoding::encode(directory);
488        let ignored = ignored
489            .into_iter()
490            .map(|s| urlencoding::encode(&s).into())
491            .collect::<Vec<compact_str::CompactString>>()
492            .join("&ignored=");
493        request_impl(self, Method::GET, format!("/api/servers/{server}/files/list?directory={directory}&ignored={ignored}&per_page={per_page}&page={page}&sort={sort}"), None::<&()>, None).await
494    }
495
496    pub async fn get_servers_server_files_list_directory(
497        &self,
498        server: uuid::Uuid,
499        directory: &str,
500    ) -> Result<super::servers_server_files_list_directory::get::Response, ApiHttpError> {
501        let directory = urlencoding::encode(directory);
502        request_impl(
503            self,
504            Method::GET,
505            format!("/api/servers/{server}/files/list-directory?directory={directory}"),
506            None::<&()>,
507            None,
508        )
509        .await
510    }
511
512    pub async fn delete_servers_server_files_operations_operation(
513        &self,
514        server: uuid::Uuid,
515        operation: uuid::Uuid,
516    ) -> Result<super::servers_server_files_operations_operation::delete::Response, ApiHttpError>
517    {
518        request_impl(
519            self,
520            Method::DELETE,
521            format!("/api/servers/{server}/files/operations/{operation}"),
522            None::<&()>,
523            None,
524        )
525        .await
526    }
527
528    pub async fn get_servers_server_files_pull(
529        &self,
530        server: uuid::Uuid,
531    ) -> Result<super::servers_server_files_pull::get::Response, ApiHttpError> {
532        request_impl(
533            self,
534            Method::GET,
535            format!("/api/servers/{server}/files/pull"),
536            None::<&()>,
537            None,
538        )
539        .await
540    }
541
542    pub async fn post_servers_server_files_pull(
543        &self,
544        server: uuid::Uuid,
545        data: &super::servers_server_files_pull::post::RequestBody,
546    ) -> Result<super::servers_server_files_pull::post::Response, ApiHttpError> {
547        request_impl(
548            self,
549            Method::POST,
550            format!("/api/servers/{server}/files/pull"),
551            Some(data),
552            None,
553        )
554        .await
555    }
556
557    pub async fn post_servers_server_files_pull_query(
558        &self,
559        server: uuid::Uuid,
560        data: &super::servers_server_files_pull_query::post::RequestBody,
561    ) -> Result<super::servers_server_files_pull_query::post::Response, ApiHttpError> {
562        request_impl(
563            self,
564            Method::POST,
565            format!("/api/servers/{server}/files/pull/query"),
566            Some(data),
567            None,
568        )
569        .await
570    }
571
572    pub async fn delete_servers_server_files_pull_pull(
573        &self,
574        server: uuid::Uuid,
575        pull: uuid::Uuid,
576    ) -> Result<super::servers_server_files_pull_pull::delete::Response, ApiHttpError> {
577        request_impl(
578            self,
579            Method::DELETE,
580            format!("/api/servers/{server}/files/pull/{pull}"),
581            None::<&()>,
582            None,
583        )
584        .await
585    }
586
587    pub async fn put_servers_server_files_rename(
588        &self,
589        server: uuid::Uuid,
590        data: &super::servers_server_files_rename::put::RequestBody,
591    ) -> Result<super::servers_server_files_rename::put::Response, ApiHttpError> {
592        request_impl(
593            self,
594            Method::PUT,
595            format!("/api/servers/{server}/files/rename"),
596            Some(data),
597            None,
598        )
599        .await
600    }
601
602    pub async fn post_servers_server_files_search(
603        &self,
604        server: uuid::Uuid,
605        data: &super::servers_server_files_search::post::RequestBody,
606    ) -> Result<super::servers_server_files_search::post::Response, ApiHttpError> {
607        request_impl(
608            self,
609            Method::POST,
610            format!("/api/servers/{server}/files/search"),
611            Some(data),
612            None,
613        )
614        .await
615    }
616
617    pub async fn post_servers_server_files_write(
618        &self,
619        server: uuid::Uuid,
620        file: &str,
621        data: super::servers_server_files_write::post::RequestBody,
622    ) -> Result<super::servers_server_files_write::post::Response, ApiHttpError> {
623        let file = urlencoding::encode(file);
624        request_impl(
625            self,
626            Method::POST,
627            format!("/api/servers/{server}/files/write?file={file}"),
628            None::<&()>,
629            Some(data),
630        )
631        .await
632    }
633
634    pub async fn post_servers_server_install_abort(
635        &self,
636        server: uuid::Uuid,
637    ) -> Result<super::servers_server_install_abort::post::Response, ApiHttpError> {
638        request_impl(
639            self,
640            Method::POST,
641            format!("/api/servers/{server}/install/abort"),
642            None::<&()>,
643            None,
644        )
645        .await
646    }
647
648    pub async fn get_servers_server_logs(
649        &self,
650        server: uuid::Uuid,
651        lines: u64,
652    ) -> Result<super::servers_server_logs::get::Response, ApiHttpError> {
653        request_impl(
654            self,
655            Method::GET,
656            format!("/api/servers/{server}/logs?lines={lines}"),
657            None::<&()>,
658            None,
659        )
660        .await
661    }
662
663    pub async fn get_servers_server_logs_install(
664        &self,
665        server: uuid::Uuid,
666        lines: u64,
667    ) -> Result<super::servers_server_logs_install::get::Response, ApiHttpError> {
668        request_impl(
669            self,
670            Method::GET,
671            format!("/api/servers/{server}/logs/install?lines={lines}"),
672            None::<&()>,
673            None,
674        )
675        .await
676    }
677
678    pub async fn post_servers_server_power(
679        &self,
680        server: uuid::Uuid,
681        data: &super::servers_server_power::post::RequestBody,
682    ) -> Result<super::servers_server_power::post::Response, ApiHttpError> {
683        request_impl(
684            self,
685            Method::POST,
686            format!("/api/servers/{server}/power"),
687            Some(data),
688            None,
689        )
690        .await
691    }
692
693    pub async fn post_servers_server_reinstall(
694        &self,
695        server: uuid::Uuid,
696        data: &super::servers_server_reinstall::post::RequestBody,
697    ) -> Result<super::servers_server_reinstall::post::Response, ApiHttpError> {
698        request_impl(
699            self,
700            Method::POST,
701            format!("/api/servers/{server}/reinstall"),
702            Some(data),
703            None,
704        )
705        .await
706    }
707
708    pub async fn get_servers_server_schedules_schedule(
709        &self,
710        server: uuid::Uuid,
711        schedule: uuid::Uuid,
712    ) -> Result<super::servers_server_schedules_schedule::get::Response, ApiHttpError> {
713        request_impl(
714            self,
715            Method::GET,
716            format!("/api/servers/{server}/schedules/{schedule}"),
717            None::<&()>,
718            None,
719        )
720        .await
721    }
722
723    pub async fn post_servers_server_schedules_schedule_abort(
724        &self,
725        server: uuid::Uuid,
726        schedule: uuid::Uuid,
727    ) -> Result<super::servers_server_schedules_schedule_abort::post::Response, ApiHttpError> {
728        request_impl(
729            self,
730            Method::POST,
731            format!("/api/servers/{server}/schedules/{schedule}/abort"),
732            None::<&()>,
733            None,
734        )
735        .await
736    }
737
738    pub async fn post_servers_server_schedules_schedule_trigger(
739        &self,
740        server: uuid::Uuid,
741        schedule: uuid::Uuid,
742        data: &super::servers_server_schedules_schedule_trigger::post::RequestBody,
743    ) -> Result<super::servers_server_schedules_schedule_trigger::post::Response, ApiHttpError>
744    {
745        request_impl(
746            self,
747            Method::POST,
748            format!("/api/servers/{server}/schedules/{schedule}/trigger"),
749            Some(data),
750            None,
751        )
752        .await
753    }
754
755    pub async fn post_servers_server_script(
756        &self,
757        server: uuid::Uuid,
758        data: &super::servers_server_script::post::RequestBody,
759    ) -> Result<super::servers_server_script::post::Response, ApiHttpError> {
760        request_impl(
761            self,
762            Method::POST,
763            format!("/api/servers/{server}/script"),
764            Some(data),
765            None,
766        )
767        .await
768    }
769
770    pub async fn post_servers_server_sync(
771        &self,
772        server: uuid::Uuid,
773        data: &super::servers_server_sync::post::RequestBody,
774    ) -> Result<super::servers_server_sync::post::Response, ApiHttpError> {
775        request_impl(
776            self,
777            Method::POST,
778            format!("/api/servers/{server}/sync"),
779            Some(data),
780            None,
781        )
782        .await
783    }
784
785    pub async fn delete_servers_server_transfer(
786        &self,
787        server: uuid::Uuid,
788    ) -> Result<super::servers_server_transfer::delete::Response, ApiHttpError> {
789        request_impl(
790            self,
791            Method::DELETE,
792            format!("/api/servers/{server}/transfer"),
793            None::<&()>,
794            None,
795        )
796        .await
797    }
798
799    pub async fn post_servers_server_transfer(
800        &self,
801        server: uuid::Uuid,
802        data: &super::servers_server_transfer::post::RequestBody,
803    ) -> Result<super::servers_server_transfer::post::Response, ApiHttpError> {
804        request_impl(
805            self,
806            Method::POST,
807            format!("/api/servers/{server}/transfer"),
808            Some(data),
809            None,
810        )
811        .await
812    }
813
814    pub async fn get_servers_server_utilization(
815        &self,
816        server: uuid::Uuid,
817    ) -> Result<super::servers_server_utilization::get::Response, ApiHttpError> {
818        request_impl(
819            self,
820            Method::GET,
821            format!("/api/servers/{server}/utilization"),
822            None::<&()>,
823            None,
824        )
825        .await
826    }
827
828    pub async fn get_servers_server_version(
829        &self,
830        server: uuid::Uuid,
831        game: Game,
832    ) -> Result<super::servers_server_version::get::Response, ApiHttpError> {
833        request_impl(
834            self,
835            Method::GET,
836            format!("/api/servers/{server}/version?game={game}"),
837            None::<&()>,
838            None,
839        )
840        .await
841    }
842
843    pub async fn post_servers_server_ws_broadcast(
844        &self,
845        server: uuid::Uuid,
846        data: &super::servers_server_ws_broadcast::post::RequestBody,
847    ) -> Result<super::servers_server_ws_broadcast::post::Response, ApiHttpError> {
848        request_impl(
849            self,
850            Method::POST,
851            format!("/api/servers/{server}/ws/broadcast"),
852            Some(data),
853            None,
854        )
855        .await
856    }
857
858    pub async fn post_servers_server_ws_deny(
859        &self,
860        server: uuid::Uuid,
861        data: &super::servers_server_ws_deny::post::RequestBody,
862    ) -> Result<super::servers_server_ws_deny::post::Response, ApiHttpError> {
863        request_impl(
864            self,
865            Method::POST,
866            format!("/api/servers/{server}/ws/deny"),
867            Some(data),
868            None,
869        )
870        .await
871    }
872
873    pub async fn post_servers_server_ws_permissions(
874        &self,
875        server: uuid::Uuid,
876        data: &super::servers_server_ws_permissions::post::RequestBody,
877    ) -> Result<super::servers_server_ws_permissions::post::Response, ApiHttpError> {
878        request_impl(
879            self,
880            Method::POST,
881            format!("/api/servers/{server}/ws/permissions"),
882            Some(data),
883            None,
884        )
885        .await
886    }
887
888    pub async fn get_system(&self) -> Result<super::system::get::Response, ApiHttpError> {
889        request_impl(self, Method::GET, "/api/system", None::<&()>, None).await
890    }
891
892    pub async fn get_system_config(
893        &self,
894    ) -> Result<super::system_config::get::Response, ApiHttpError> {
895        request_impl(self, Method::GET, "/api/system/config", None::<&()>, None).await
896    }
897
898    pub async fn get_system_logs(&self) -> Result<super::system_logs::get::Response, ApiHttpError> {
899        request_impl(self, Method::GET, "/api/system/logs", None::<&()>, None).await
900    }
901
902    pub async fn get_system_logs_file(
903        &self,
904        file: &str,
905        lines: u64,
906    ) -> Result<super::system_logs_file::get::Response, ApiHttpError> {
907        request_impl(
908            self,
909            Method::GET,
910            format!("/api/system/logs/{file}?lines={lines}"),
911            None::<&()>,
912            None,
913        )
914        .await
915    }
916
917    pub async fn get_system_overview(
918        &self,
919    ) -> Result<super::system_overview::get::Response, ApiHttpError> {
920        request_impl(self, Method::GET, "/api/system/overview", None::<&()>, None).await
921    }
922
923    pub async fn get_system_stats(
924        &self,
925    ) -> Result<super::system_stats::get::Response, ApiHttpError> {
926        request_impl(self, Method::GET, "/api/system/stats", None::<&()>, None).await
927    }
928
929    pub async fn post_system_upgrade(
930        &self,
931        data: &super::system_upgrade::post::RequestBody,
932    ) -> Result<super::system_upgrade::post::Response, ApiHttpError> {
933        request_impl(self, Method::POST, "/api/system/upgrade", Some(data), None).await
934    }
935
936    pub async fn get_transfers(&self) -> Result<super::transfers::get::Response, ApiHttpError> {
937        request_impl(self, Method::GET, "/api/transfers", None::<&()>, None).await
938    }
939
940    pub async fn post_transfers(&self) -> Result<super::transfers::post::Response, ApiHttpError> {
941        request_impl(self, Method::POST, "/api/transfers", None::<&()>, None).await
942    }
943
944    pub async fn post_transfers_files(
945        &self,
946    ) -> Result<super::transfers_files::post::Response, ApiHttpError> {
947        request_impl(
948            self,
949            Method::POST,
950            "/api/transfers/files",
951            None::<&()>,
952            None,
953        )
954        .await
955    }
956
957    pub async fn delete_transfers_server(
958        &self,
959        server: uuid::Uuid,
960    ) -> Result<super::transfers_server::delete::Response, ApiHttpError> {
961        request_impl(
962            self,
963            Method::DELETE,
964            format!("/api/transfers/{server}"),
965            None::<&()>,
966            None,
967        )
968        .await
969    }
970
971    pub async fn post_update(
972        &self,
973        data: &super::update::post::RequestBody,
974    ) -> Result<super::update::post::Response, ApiHttpError> {
975        request_impl(self, Method::POST, "/api/update", Some(data), None).await
976    }
977}