1#![allow(unused_extern_crates)]
7extern crate chrono;
8extern crate mime;
9extern crate url;
10extern crate uuid;
11
12use self::url::percent_encoding::{utf8_percent_encode, PATH_SEGMENT_ENCODE_SET, QUERY_ENCODE_SET};
13use futures;
14use futures::{future, stream};
15use futures::{Future, Stream};
16use hyper::client::{Request, Response};
17use hyper::header::{ContentType, Header, HeaderFormat, Headers};
18use hyper::method::Method;
19use hyper::Url;
20use mimetypes;
21use serde_json;
22use std::borrow::Cow;
23use std::error;
24use std::fmt;
25use std::io::{Error, ErrorKind, Read};
26use std::path::Path;
27use std::str;
28use std::str::FromStr;
29use std::string::ToString;
30use std::sync::Arc;
31use SHA256_BYTE_LENGTH;
32
33#[allow(unused_imports)]
34use std::collections::{BTreeMap, HashMap};
35
36use ApiError;
37use SimpleErrorType;
38
39use {
40 AccountsApi, AppApi, ApplicationConfigApi, ApprovalRequestsApi, AuthApi, BuildApi,
41 CertificateApi, DatasetApi, NodeApi, RegistryApi, SystemApi, TaskApi, ToolsApi, UsersApi,
42 WorkflowApi, WorkflowFinalApi, ZoneApi,
43};
44
45use mbedtls::hash;
46use models;
47
48define_encode_set! {
49 pub ID_ENCODE_SET = [PATH_SEGMENT_ENCODE_SET] | {'|'}
54}
55
56fn into_base_path(
58 input: &str,
59 correct_scheme: Option<&'static str>,
60) -> Result<String, ClientInitError> {
61 let url = Url::from_str(input)?;
63
64 let scheme = url.scheme();
65
66 if let Some(correct_scheme) = correct_scheme {
68 if scheme != correct_scheme {
69 return Err(ClientInitError::InvalidScheme);
70 }
71 }
72
73 let host = url.host().ok_or_else(|| ClientInitError::MissingHost)?;
74 let port = url.port().map(|x| format!(":{}", x)).unwrap_or_default();
75 Ok(format!("{}://{}{}", scheme, host, port))
76}
77
78pub struct Client {
80 hyper_client: Arc<hyper::client::Client>,
81 base_path: String,
82 headers: Headers,
83 use_new_paths: bool,
84}
85
86impl fmt::Debug for Client {
87 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
88 write!(f, "Client {{ base_path: {} }}", self.base_path)
89 }
90}
91
92impl Clone for Client {
93 fn clone(&self) -> Self {
94 Client {
95 hyper_client: self.hyper_client.clone(),
96 base_path: self.base_path.clone(),
97 headers: self.headers.clone(),
98 use_new_paths: self.use_new_paths,
99 }
100 }
101}
102
103impl Client {
104 pub fn try_new_http(base_path: &str) -> Result<Client, ClientInitError> {
109 Self::try_new_with_connector(base_path, Some("http"), hyper::net::HttpConnector)
110 }
111
112 pub fn try_new_with_connector<C, S>(
128 base_path: &str,
129 protocol: Option<&'static str>,
130 connector: C,
131 ) -> Result<Client, ClientInitError>
132 where
133 C: hyper::net::NetworkConnector<Stream = S> + Send + Sync + 'static,
134 S: hyper::net::NetworkStream,
135 {
136 let hyper_client = hyper::Client::with_connector(connector);
137
138 Ok(Client {
139 hyper_client: Arc::new(hyper_client),
140 base_path: into_base_path(base_path, protocol)?,
141 headers: Headers::new(),
142 use_new_paths: false,
143 })
144 }
145
146 pub fn try_new_with_hyper_client(
160 hyper_client: Arc<hyper::client::Client>,
161 base_path: &str,
162 ) -> Result<Client, ClientInitError> {
163 Ok(Client {
164 hyper_client: hyper_client,
165 base_path: into_base_path(base_path, None)?,
166 headers: Headers::new(),
167 use_new_paths: false,
168 })
169 }
170
171 pub fn headers(&mut self) -> &mut Headers {
172 &mut self.headers
173 }
174
175 pub fn uses_new_paths(&self) -> bool {
176 self.use_new_paths
177 }
178
179 pub fn set_use_new_paths(&mut self, use_new_paths: bool) {
180 self.use_new_paths = use_new_paths;
181 }
182
183 pub fn with_new_paths(self) -> Self {
184 Self {
185 use_new_paths: true,
186 ..self
187 }
188 }
189
190 fn remap_operation_path<'a>(&self, operation: &'a str) -> Cow<'a, str> {
191 if !self.use_new_paths {
192 return Cow::Borrowed(operation);
193 }
194 if let Some(path_without_v1) = operation.strip_prefix("/v1/") {
195 return Cow::Owned(format!(
196 "/api/v1/confidential_computing/{}",
197 path_without_v1
198 ));
199 }
200 return Cow::Borrowed(operation);
201 }
202}
203
204impl AccountsApi for Client {
205 type Error = ApiError;
206
207 fn create_account(
208 &self,
209 param_body: models::AccountRequest,
210 ) -> Result<models::Account, ApiError> {
211 let mut url = format!("{}/v1/accounts", self.base_path);
212
213 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
214
215 let query_string_str = query_string.finish();
216 if !query_string_str.is_empty() {
217 url += "?";
218 url += &query_string_str;
219 }
220
221 let url = match Url::from_str(&url) {
222 Ok(url) => url,
223 Err(err) => {
224 return Err(ApiError::new(
225 format!("Unable to build URL: {}", err),
226 SimpleErrorType::Permanent,
227 ))
228 }
229 };
230
231 let mut request = self.hyper_client.request(Method::Post, url);
232 request = request.headers(self.headers.clone());
233 let body = serde_json::to_string(¶m_body)
235 .expect("impossible to fail to serialize")
236 .into_bytes();
237 request = request.body(body.as_slice());
238
239 request = request.header(ContentType(mimetypes::requests::CREATE_ACCOUNT.clone()));
240
241 request
242 .send()
243 .map_err(|e| {
244 ApiError::new(
245 format!("No response received: {}", e),
246 SimpleErrorType::Permanent,
247 )
248 })
249 .and_then(|mut response| match response.status.to_u16() {
250 200 => {
251 let mut body = Vec::new();
252 response.read_to_end(&mut body).map_err(|e| {
253 ApiError::new(
254 format!("Failed to read response: {}", e),
255 SimpleErrorType::Temporary,
256 )
257 })?;
258 str::from_utf8(&body)
259 .map_err(|e| {
260 ApiError::new(
261 format!("Response was not valid UTF8: {}", e),
262 SimpleErrorType::Temporary,
263 )
264 })
265 .and_then(|body| {
266 serde_json::from_str::<models::Account>(body).map_err(|e| e.into())
267 })
268 }
269 code => {
270 let headers = response.headers.clone();
271 let mut body = Vec::new();
272 let result = response.read_to_end(&mut body);
273 let err_type = match response.status.is_server_error() {
274 false => SimpleErrorType::Permanent,
275 true => SimpleErrorType::Temporary,
276 };
277 Err(ApiError::new(
278 format!(
279 "Unexpected response code {}:\n{:?}\n\n{}",
280 code,
281 headers,
282 match result {
283 Ok(_) => match str::from_utf8(&body) {
284 Ok(body) => Cow::from(body),
285 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
286 },
287 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
288 }
289 ),
290 err_type,
291 ))
292 }
293 })
294 }
295
296 fn delete_account(&self, param_account_id: uuid::Uuid) -> Result<(), ApiError> {
297 let mut url = format!(
298 "{}/v1/accounts/{account_id}",
299 self.base_path,
300 account_id = utf8_percent_encode(¶m_account_id.to_string(), ID_ENCODE_SET)
301 );
302
303 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
304
305 let query_string_str = query_string.finish();
306 if !query_string_str.is_empty() {
307 url += "?";
308 url += &query_string_str;
309 }
310
311 let url = match Url::from_str(&url) {
312 Ok(url) => url,
313 Err(err) => {
314 return Err(ApiError::new(
315 format!("Unable to build URL: {}", err),
316 SimpleErrorType::Permanent,
317 ))
318 }
319 };
320
321 let mut request = self.hyper_client.request(Method::Delete, url);
322 request = request.headers(self.headers.clone());
323
324 request
325 .send()
326 .map_err(|e| {
327 ApiError::new(
328 format!("No response received: {}", e),
329 SimpleErrorType::Permanent,
330 )
331 })
332 .and_then(|mut response| match response.status.to_u16() {
333 204 => {
334 let mut body = Vec::new();
335 response.read_to_end(&mut body).map_err(|e| {
336 ApiError::new(
337 format!("Failed to read response: {}", e),
338 SimpleErrorType::Temporary,
339 )
340 })?;
341
342 Ok(())
343 }
344 code => {
345 let headers = response.headers.clone();
346 let mut body = Vec::new();
347 let result = response.read_to_end(&mut body);
348 let err_type = match response.status.is_server_error() {
349 false => SimpleErrorType::Permanent,
350 true => SimpleErrorType::Temporary,
351 };
352 Err(ApiError::new(
353 format!(
354 "Unexpected response code {}:\n{:?}\n\n{}",
355 code,
356 headers,
357 match result {
358 Ok(_) => match str::from_utf8(&body) {
359 Ok(body) => Cow::from(body),
360 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
361 },
362 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
363 }
364 ),
365 err_type,
366 ))
367 }
368 })
369 }
370
371 fn get_account(&self, param_account_id: uuid::Uuid) -> Result<models::Account, ApiError> {
372 let mut url = format!(
373 "{}/v1/accounts/{account_id}",
374 self.base_path,
375 account_id = utf8_percent_encode(¶m_account_id.to_string(), ID_ENCODE_SET)
376 );
377
378 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
379
380 let query_string_str = query_string.finish();
381 if !query_string_str.is_empty() {
382 url += "?";
383 url += &query_string_str;
384 }
385
386 let url = match Url::from_str(&url) {
387 Ok(url) => url,
388 Err(err) => {
389 return Err(ApiError::new(
390 format!("Unable to build URL: {}", err),
391 SimpleErrorType::Permanent,
392 ))
393 }
394 };
395
396 let mut request = self.hyper_client.request(Method::Get, url);
397 request = request.headers(self.headers.clone());
398
399 request
400 .send()
401 .map_err(|e| {
402 ApiError::new(
403 format!("No response received: {}", e),
404 SimpleErrorType::Permanent,
405 )
406 })
407 .and_then(|mut response| match response.status.to_u16() {
408 200 => {
409 let mut body = Vec::new();
410 response.read_to_end(&mut body).map_err(|e| {
411 ApiError::new(
412 format!("Failed to read response: {}", e),
413 SimpleErrorType::Temporary,
414 )
415 })?;
416 str::from_utf8(&body)
417 .map_err(|e| {
418 ApiError::new(
419 format!("Response was not valid UTF8: {}", e),
420 SimpleErrorType::Temporary,
421 )
422 })
423 .and_then(|body| {
424 serde_json::from_str::<models::Account>(body).map_err(|e| e.into())
425 })
426 }
427 code => {
428 let headers = response.headers.clone();
429 let mut body = Vec::new();
430 let result = response.read_to_end(&mut body);
431 let err_type = match response.status.is_server_error() {
432 false => SimpleErrorType::Permanent,
433 true => SimpleErrorType::Temporary,
434 };
435 Err(ApiError::new(
436 format!(
437 "Unexpected response code {}:\n{:?}\n\n{}",
438 code,
439 headers,
440 match result {
441 Ok(_) => match str::from_utf8(&body) {
442 Ok(body) => Cow::from(body),
443 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
444 },
445 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
446 }
447 ),
448 err_type,
449 ))
450 }
451 })
452 }
453
454 fn get_accounts(&self) -> Result<models::AccountListResponse, ApiError> {
455 let mut url = format!("{}/v1/accounts", self.base_path);
456
457 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
458
459 let query_string_str = query_string.finish();
460 if !query_string_str.is_empty() {
461 url += "?";
462 url += &query_string_str;
463 }
464
465 let url = match Url::from_str(&url) {
466 Ok(url) => url,
467 Err(err) => {
468 return Err(ApiError::new(
469 format!("Unable to build URL: {}", err),
470 SimpleErrorType::Permanent,
471 ))
472 }
473 };
474
475 let mut request = self.hyper_client.request(Method::Get, url);
476 request = request.headers(self.headers.clone());
477
478 request
479 .send()
480 .map_err(|e| {
481 ApiError::new(
482 format!("No response received: {}", e),
483 SimpleErrorType::Permanent,
484 )
485 })
486 .and_then(|mut response| match response.status.to_u16() {
487 200 => {
488 let mut body = Vec::new();
489 response.read_to_end(&mut body).map_err(|e| {
490 ApiError::new(
491 format!("Failed to read response: {}", e),
492 SimpleErrorType::Temporary,
493 )
494 })?;
495 str::from_utf8(&body)
496 .map_err(|e| {
497 ApiError::new(
498 format!("Response was not valid UTF8: {}", e),
499 SimpleErrorType::Temporary,
500 )
501 })
502 .and_then(|body| {
503 serde_json::from_str::<models::AccountListResponse>(body)
504 .map_err(|e| e.into())
505 })
506 }
507 code => {
508 let headers = response.headers.clone();
509 let mut body = Vec::new();
510 let result = response.read_to_end(&mut body);
511 let err_type = match response.status.is_server_error() {
512 false => SimpleErrorType::Permanent,
513 true => SimpleErrorType::Temporary,
514 };
515 Err(ApiError::new(
516 format!(
517 "Unexpected response code {}:\n{:?}\n\n{}",
518 code,
519 headers,
520 match result {
521 Ok(_) => match str::from_utf8(&body) {
522 Ok(body) => Cow::from(body),
523 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
524 },
525 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
526 }
527 ),
528 err_type,
529 ))
530 }
531 })
532 }
533
534 fn select_account(&self, param_account_id: uuid::Uuid) -> Result<(), ApiError> {
535 let mut url = format!(
536 "{}/v1/accounts/select_account/{account_id}",
537 self.base_path,
538 account_id = utf8_percent_encode(¶m_account_id.to_string(), ID_ENCODE_SET)
539 );
540
541 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
542
543 let query_string_str = query_string.finish();
544 if !query_string_str.is_empty() {
545 url += "?";
546 url += &query_string_str;
547 }
548
549 let url = match Url::from_str(&url) {
550 Ok(url) => url,
551 Err(err) => {
552 return Err(ApiError::new(
553 format!("Unable to build URL: {}", err),
554 SimpleErrorType::Permanent,
555 ))
556 }
557 };
558
559 let mut request = self.hyper_client.request(Method::Post, url);
560 request = request.headers(self.headers.clone());
561
562 request
563 .send()
564 .map_err(|e| {
565 ApiError::new(
566 format!("No response received: {}", e),
567 SimpleErrorType::Permanent,
568 )
569 })
570 .and_then(|mut response| match response.status.to_u16() {
571 204 => {
572 let mut body = Vec::new();
573 response.read_to_end(&mut body).map_err(|e| {
574 ApiError::new(
575 format!("Failed to read response: {}", e),
576 SimpleErrorType::Temporary,
577 )
578 })?;
579
580 Ok(())
581 }
582 code => {
583 let headers = response.headers.clone();
584 let mut body = Vec::new();
585 let result = response.read_to_end(&mut body);
586 let err_type = match response.status.is_server_error() {
587 false => SimpleErrorType::Permanent,
588 true => SimpleErrorType::Temporary,
589 };
590 Err(ApiError::new(
591 format!(
592 "Unexpected response code {}:\n{:?}\n\n{}",
593 code,
594 headers,
595 match result {
596 Ok(_) => match str::from_utf8(&body) {
597 Ok(body) => Cow::from(body),
598 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
599 },
600 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
601 }
602 ),
603 err_type,
604 ))
605 }
606 })
607 }
608
609 fn update_account(
610 &self,
611 param_account_id: uuid::Uuid,
612 param_body: models::AccountUpdateRequest,
613 ) -> Result<models::Account, ApiError> {
614 let mut url = format!(
615 "{}/v1/accounts/{account_id}",
616 self.base_path,
617 account_id = utf8_percent_encode(¶m_account_id.to_string(), ID_ENCODE_SET)
618 );
619
620 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
621
622 let query_string_str = query_string.finish();
623 if !query_string_str.is_empty() {
624 url += "?";
625 url += &query_string_str;
626 }
627
628 let url = match Url::from_str(&url) {
629 Ok(url) => url,
630 Err(err) => {
631 return Err(ApiError::new(
632 format!("Unable to build URL: {}", err),
633 SimpleErrorType::Permanent,
634 ))
635 }
636 };
637
638 let mut request = self.hyper_client.request(Method::Patch, url);
639 request = request.headers(self.headers.clone());
640 let body = serde_json::to_string(¶m_body)
641 .expect("impossible to fail to serialize")
642 .into_bytes();
643 request = request.body(body.as_slice());
644
645 request = request.header(ContentType(mimetypes::requests::UPDATE_ACCOUNT.clone()));
646
647 request
648 .send()
649 .map_err(|e| {
650 ApiError::new(
651 format!("No response received: {}", e),
652 SimpleErrorType::Permanent,
653 )
654 })
655 .and_then(|mut response| match response.status.to_u16() {
656 200 => {
657 let mut body = Vec::new();
658 response.read_to_end(&mut body).map_err(|e| {
659 ApiError::new(
660 format!("Failed to read response: {}", e),
661 SimpleErrorType::Temporary,
662 )
663 })?;
664 str::from_utf8(&body)
665 .map_err(|e| {
666 ApiError::new(
667 format!("Response was not valid UTF8: {}", e),
668 SimpleErrorType::Temporary,
669 )
670 })
671 .and_then(|body| {
672 serde_json::from_str::<models::Account>(body).map_err(|e| e.into())
673 })
674 }
675 code => {
676 let headers = response.headers.clone();
677 let mut body = Vec::new();
678 let result = response.read_to_end(&mut body);
679 let err_type = match response.status.is_server_error() {
680 false => SimpleErrorType::Permanent,
681 true => SimpleErrorType::Temporary,
682 };
683 Err(ApiError::new(
684 format!(
685 "Unexpected response code {}:\n{:?}\n\n{}",
686 code,
687 headers,
688 match result {
689 Ok(_) => match str::from_utf8(&body) {
690 Ok(body) => Cow::from(body),
691 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
692 },
693 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
694 }
695 ),
696 err_type,
697 ))
698 }
699 })
700 }
701}
702
703impl AppApi for Client {
704 type Error = ApiError;
705
706 fn add_application(&self, param_body: models::AppRequest) -> Result<models::App, ApiError> {
707 let mut url = format!("{}/v1/apps", self.base_path);
708
709 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
710
711 let query_string_str = query_string.finish();
712 if !query_string_str.is_empty() {
713 url += "?";
714 url += &query_string_str;
715 }
716
717 let url = match Url::from_str(&url) {
718 Ok(url) => url,
719 Err(err) => {
720 return Err(ApiError::new(
721 format!("Unable to build URL: {}", err),
722 SimpleErrorType::Permanent,
723 ))
724 }
725 };
726
727 let mut request = self.hyper_client.request(Method::Post, url);
728 request = request.headers(self.headers.clone());
729 let body = serde_json::to_string(¶m_body)
731 .expect("impossible to fail to serialize")
732 .into_bytes();
733 request = request.body(body.as_slice());
734
735 request = request.header(ContentType(mimetypes::requests::ADD_APPLICATION.clone()));
736
737 request
738 .send()
739 .map_err(|e| {
740 ApiError::new(
741 format!("No response received: {}", e),
742 SimpleErrorType::Permanent,
743 )
744 })
745 .and_then(|mut response| match response.status.to_u16() {
746 200 => {
747 let mut body = Vec::new();
748 response.read_to_end(&mut body).map_err(|e| {
749 ApiError::new(
750 format!("Failed to read response: {}", e),
751 SimpleErrorType::Temporary,
752 )
753 })?;
754 str::from_utf8(&body)
755 .map_err(|e| {
756 ApiError::new(
757 format!("Response was not valid UTF8: {}", e),
758 SimpleErrorType::Temporary,
759 )
760 })
761 .and_then(|body| {
762 serde_json::from_str::<models::App>(body).map_err(|e| e.into())
763 })
764 }
765 code => {
766 let headers = response.headers.clone();
767 let mut body = Vec::new();
768 let result = response.read_to_end(&mut body);
769 let err_type = match response.status.is_server_error() {
770 false => SimpleErrorType::Permanent,
771 true => SimpleErrorType::Temporary,
772 };
773 Err(ApiError::new(
774 format!(
775 "Unexpected response code {}:\n{:?}\n\n{}",
776 code,
777 headers,
778 match result {
779 Ok(_) => match str::from_utf8(&body) {
780 Ok(body) => Cow::from(body),
781 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
782 },
783 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
784 }
785 ),
786 err_type,
787 ))
788 }
789 })
790 }
791
792 fn delete_app(&self, param_app_id: uuid::Uuid) -> Result<(), ApiError> {
793 let mut url = format!(
794 "{}/v1/apps/{app_id}",
795 self.base_path,
796 app_id = utf8_percent_encode(¶m_app_id.to_string(), ID_ENCODE_SET)
797 );
798
799 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
800
801 let query_string_str = query_string.finish();
802 if !query_string_str.is_empty() {
803 url += "?";
804 url += &query_string_str;
805 }
806
807 let url = match Url::from_str(&url) {
808 Ok(url) => url,
809 Err(err) => {
810 return Err(ApiError::new(
811 format!("Unable to build URL: {}", err),
812 SimpleErrorType::Permanent,
813 ))
814 }
815 };
816
817 let mut request = self.hyper_client.request(Method::Delete, url);
818 request = request.headers(self.headers.clone());
819
820 request
821 .send()
822 .map_err(|e| {
823 ApiError::new(
824 format!("No response received: {}", e),
825 SimpleErrorType::Permanent,
826 )
827 })
828 .and_then(|mut response| match response.status.to_u16() {
829 204 => {
830 let mut body = Vec::new();
831 response.read_to_end(&mut body).map_err(|e| {
832 ApiError::new(
833 format!("Failed to read response: {}", e),
834 SimpleErrorType::Temporary,
835 )
836 })?;
837
838 Ok(())
839 }
840 code => {
841 let headers = response.headers.clone();
842 let mut body = Vec::new();
843 let result = response.read_to_end(&mut body);
844 let err_type = match response.status.is_server_error() {
845 false => SimpleErrorType::Permanent,
846 true => SimpleErrorType::Temporary,
847 };
848 Err(ApiError::new(
849 format!(
850 "Unexpected response code {}:\n{:?}\n\n{}",
851 code,
852 headers,
853 match result {
854 Ok(_) => match str::from_utf8(&body) {
855 Ok(body) => Cow::from(body),
856 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
857 },
858 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
859 }
860 ),
861 err_type,
862 ))
863 }
864 })
865 }
866
867 fn get_all_apps(
868 &self,
869 param_name: Option<String>,
870 param_description: Option<String>,
871 param_all_search: Option<String>,
872 param_limit: Option<i32>,
873 param_offset: Option<i32>,
874 param_sort_by: Option<String>,
875 ) -> Result<models::GetAllAppsResponse, ApiError> {
876 let mut url = format!("{}/v1/apps", self.base_path);
877
878 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
879
880 if let Some(name) = param_name {
881 query_string.append_pair("name", &name.to_string());
882 }
883 if let Some(description) = param_description {
884 query_string.append_pair("description", &description.to_string());
885 }
886 if let Some(all_search) = param_all_search {
887 query_string.append_pair("all_search", &all_search.to_string());
888 }
889 if let Some(limit) = param_limit {
890 query_string.append_pair("limit", &limit.to_string());
891 }
892 if let Some(offset) = param_offset {
893 query_string.append_pair("offset", &offset.to_string());
894 }
895 if let Some(sort_by) = param_sort_by {
896 query_string.append_pair("sort_by", &sort_by.to_string());
897 }
898 let query_string_str = query_string.finish();
899 if !query_string_str.is_empty() {
900 url += "?";
901 url += &query_string_str;
902 }
903
904 let url = match Url::from_str(&url) {
905 Ok(url) => url,
906 Err(err) => {
907 return Err(ApiError::new(
908 format!("Unable to build URL: {}", err),
909 SimpleErrorType::Permanent,
910 ))
911 }
912 };
913
914 let mut request = self.hyper_client.request(Method::Get, url);
915 request = request.headers(self.headers.clone());
916
917 request
918 .send()
919 .map_err(|e| {
920 ApiError::new(
921 format!("No response received: {}", e),
922 SimpleErrorType::Permanent,
923 )
924 })
925 .and_then(|mut response| match response.status.to_u16() {
926 200 => {
927 let mut body = Vec::new();
928 response.read_to_end(&mut body).map_err(|e| {
929 ApiError::new(
930 format!("Failed to read response: {}", e),
931 SimpleErrorType::Temporary,
932 )
933 })?;
934 str::from_utf8(&body)
935 .map_err(|e| {
936 ApiError::new(
937 format!("Response was not valid UTF8: {}", e),
938 SimpleErrorType::Temporary,
939 )
940 })
941 .and_then(|body| {
942 serde_json::from_str::<models::GetAllAppsResponse>(body)
943 .map_err(|e| e.into())
944 })
945 }
946 code => {
947 let headers = response.headers.clone();
948 let mut body = Vec::new();
949 let result = response.read_to_end(&mut body);
950 let err_type = match response.status.is_server_error() {
951 false => SimpleErrorType::Permanent,
952 true => SimpleErrorType::Temporary,
953 };
954 Err(ApiError::new(
955 format!(
956 "Unexpected response code {}:\n{:?}\n\n{}",
957 code,
958 headers,
959 match result {
960 Ok(_) => match str::from_utf8(&body) {
961 Ok(body) => Cow::from(body),
962 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
963 },
964 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
965 }
966 ),
967 err_type,
968 ))
969 }
970 })
971 }
972
973 fn get_app(&self, param_app_id: uuid::Uuid) -> Result<models::App, ApiError> {
974 let mut url = format!(
975 "{}/v1/apps/{app_id}",
976 self.base_path,
977 app_id = utf8_percent_encode(¶m_app_id.to_string(), ID_ENCODE_SET)
978 );
979
980 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
981
982 let query_string_str = query_string.finish();
983 if !query_string_str.is_empty() {
984 url += "?";
985 url += &query_string_str;
986 }
987
988 let url = match Url::from_str(&url) {
989 Ok(url) => url,
990 Err(err) => {
991 return Err(ApiError::new(
992 format!("Unable to build URL: {}", err),
993 SimpleErrorType::Permanent,
994 ))
995 }
996 };
997
998 let mut request = self.hyper_client.request(Method::Get, url);
999 request = request.headers(self.headers.clone());
1000
1001 request
1002 .send()
1003 .map_err(|e| {
1004 ApiError::new(
1005 format!("No response received: {}", e),
1006 SimpleErrorType::Permanent,
1007 )
1008 })
1009 .and_then(|mut response| match response.status.to_u16() {
1010 200 => {
1011 let mut body = Vec::new();
1012 response.read_to_end(&mut body).map_err(|e| {
1013 ApiError::new(
1014 format!("Failed to read response: {}", e),
1015 SimpleErrorType::Temporary,
1016 )
1017 })?;
1018 str::from_utf8(&body)
1019 .map_err(|e| {
1020 ApiError::new(
1021 format!("Response was not valid UTF8: {}", e),
1022 SimpleErrorType::Temporary,
1023 )
1024 })
1025 .and_then(|body| {
1026 serde_json::from_str::<models::App>(body).map_err(|e| e.into())
1027 })
1028 }
1029 code => {
1030 let headers = response.headers.clone();
1031 let mut body = Vec::new();
1032 let result = response.read_to_end(&mut body);
1033 let err_type = match response.status.is_server_error() {
1034 false => SimpleErrorType::Permanent,
1035 true => SimpleErrorType::Temporary,
1036 };
1037 Err(ApiError::new(
1038 format!(
1039 "Unexpected response code {}:\n{:?}\n\n{}",
1040 code,
1041 headers,
1042 match result {
1043 Ok(_) => match str::from_utf8(&body) {
1044 Ok(body) => Cow::from(body),
1045 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1046 },
1047 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1048 }
1049 ),
1050 err_type,
1051 ))
1052 }
1053 })
1054 }
1055
1056 fn get_app_certificate(
1057 &self,
1058 param_node_id: uuid::Uuid,
1059 param_app_id: uuid::Uuid,
1060 ) -> Result<models::Certificate, ApiError> {
1061 let mut url = format!(
1062 "{}/v1/apps/{app_id}/node/{node_id}/certificate",
1063 self.base_path,
1064 node_id = utf8_percent_encode(¶m_node_id.to_string(), ID_ENCODE_SET),
1065 app_id = utf8_percent_encode(¶m_app_id.to_string(), ID_ENCODE_SET)
1066 );
1067
1068 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1069
1070 let query_string_str = query_string.finish();
1071 if !query_string_str.is_empty() {
1072 url += "?";
1073 url += &query_string_str;
1074 }
1075
1076 let url = match Url::from_str(&url) {
1077 Ok(url) => url,
1078 Err(err) => {
1079 return Err(ApiError::new(
1080 format!("Unable to build URL: {}", err),
1081 SimpleErrorType::Permanent,
1082 ))
1083 }
1084 };
1085
1086 let mut request = self.hyper_client.request(Method::Get, url);
1087 request = request.headers(self.headers.clone());
1088
1089 request
1090 .send()
1091 .map_err(|e| {
1092 ApiError::new(
1093 format!("No response received: {}", e),
1094 SimpleErrorType::Permanent,
1095 )
1096 })
1097 .and_then(|mut response| match response.status.to_u16() {
1098 200 => {
1099 let mut body = Vec::new();
1100 response.read_to_end(&mut body).map_err(|e| {
1101 ApiError::new(
1102 format!("Failed to read response: {}", e),
1103 SimpleErrorType::Temporary,
1104 )
1105 })?;
1106 str::from_utf8(&body)
1107 .map_err(|e| {
1108 ApiError::new(
1109 format!("Response was not valid UTF8: {}", e),
1110 SimpleErrorType::Temporary,
1111 )
1112 })
1113 .and_then(|body| {
1114 serde_json::from_str::<models::Certificate>(body).map_err(|e| e.into())
1115 })
1116 }
1117 code => {
1118 let headers = response.headers.clone();
1119 let mut body = Vec::new();
1120 let result = response.read_to_end(&mut body);
1121 let err_type = match response.status.is_server_error() {
1122 false => SimpleErrorType::Permanent,
1123 true => SimpleErrorType::Temporary,
1124 };
1125 Err(ApiError::new(
1126 format!(
1127 "Unexpected response code {}:\n{:?}\n\n{}",
1128 code,
1129 headers,
1130 match result {
1131 Ok(_) => match str::from_utf8(&body) {
1132 Ok(body) => Cow::from(body),
1133 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1134 },
1135 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1136 }
1137 ),
1138 err_type,
1139 ))
1140 }
1141 })
1142 }
1143
1144 fn get_app_node_certificate_details(
1145 &self,
1146 param_node_id: uuid::Uuid,
1147 param_app_id: uuid::Uuid,
1148 ) -> Result<models::CertificateDetails, ApiError> {
1149 let mut url = format!(
1150 "{}/v1/apps/{app_id}/node/{node_id}/certificate-details",
1151 self.base_path,
1152 node_id = utf8_percent_encode(¶m_node_id.to_string(), ID_ENCODE_SET),
1153 app_id = utf8_percent_encode(¶m_app_id.to_string(), ID_ENCODE_SET)
1154 );
1155
1156 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1157
1158 let query_string_str = query_string.finish();
1159 if !query_string_str.is_empty() {
1160 url += "?";
1161 url += &query_string_str;
1162 }
1163
1164 let url = match Url::from_str(&url) {
1165 Ok(url) => url,
1166 Err(err) => {
1167 return Err(ApiError::new(
1168 format!("Unable to build URL: {}", err),
1169 SimpleErrorType::Permanent,
1170 ))
1171 }
1172 };
1173
1174 let mut request = self.hyper_client.request(Method::Get, url);
1175 request = request.headers(self.headers.clone());
1176
1177 request
1178 .send()
1179 .map_err(|e| {
1180 ApiError::new(
1181 format!("No response received: {}", e),
1182 SimpleErrorType::Permanent,
1183 )
1184 })
1185 .and_then(|mut response| match response.status.to_u16() {
1186 200 => {
1187 let mut body = Vec::new();
1188 response.read_to_end(&mut body).map_err(|e| {
1189 ApiError::new(
1190 format!("Failed to read response: {}", e),
1191 SimpleErrorType::Temporary,
1192 )
1193 })?;
1194 str::from_utf8(&body)
1195 .map_err(|e| {
1196 ApiError::new(
1197 format!("Response was not valid UTF8: {}", e),
1198 SimpleErrorType::Temporary,
1199 )
1200 })
1201 .and_then(|body| {
1202 serde_json::from_str::<models::CertificateDetails>(body)
1203 .map_err(|e| e.into())
1204 })
1205 }
1206 code => {
1207 let headers = response.headers.clone();
1208 let mut body = Vec::new();
1209 let result = response.read_to_end(&mut body);
1210 let err_type = match response.status.is_server_error() {
1211 false => SimpleErrorType::Permanent,
1212 true => SimpleErrorType::Temporary,
1213 };
1214 Err(ApiError::new(
1215 format!(
1216 "Unexpected response code {}:\n{:?}\n\n{}",
1217 code,
1218 headers,
1219 match result {
1220 Ok(_) => match str::from_utf8(&body) {
1221 Ok(body) => Cow::from(body),
1222 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1223 },
1224 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1225 }
1226 ),
1227 err_type,
1228 ))
1229 }
1230 })
1231 }
1232
1233 fn get_apps_unique_labels(&self) -> Result<models::LabelsCount, ApiError> {
1234 let mut url = format!("{}/v1/apps/unique_labels/count", self.base_path);
1235
1236 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1237
1238 let query_string_str = query_string.finish();
1239 if !query_string_str.is_empty() {
1240 url += "?";
1241 url += &query_string_str;
1242 }
1243
1244 let url = match Url::from_str(&url) {
1245 Ok(url) => url,
1246 Err(err) => {
1247 return Err(ApiError::new(
1248 format!("Unable to build URL: {}", err),
1249 SimpleErrorType::Permanent,
1250 ))
1251 }
1252 };
1253
1254 let mut request = self.hyper_client.request(Method::Get, url);
1255 request = request.headers(self.headers.clone());
1256
1257 request
1258 .send()
1259 .map_err(|e| {
1260 ApiError::new(
1261 format!("No response received: {}", e),
1262 SimpleErrorType::Permanent,
1263 )
1264 })
1265 .and_then(|mut response| match response.status.to_u16() {
1266 200 => {
1267 let mut body = Vec::new();
1268 response.read_to_end(&mut body).map_err(|e| {
1269 ApiError::new(
1270 format!("Failed to read response: {}", e),
1271 SimpleErrorType::Temporary,
1272 )
1273 })?;
1274 str::from_utf8(&body)
1275 .map_err(|e| {
1276 ApiError::new(
1277 format!("Response was not valid UTF8: {}", e),
1278 SimpleErrorType::Temporary,
1279 )
1280 })
1281 .and_then(|body| {
1282 serde_json::from_str::<models::LabelsCount>(body).map_err(|e| e.into())
1283 })
1284 }
1285 code => {
1286 let headers = response.headers.clone();
1287 let mut body = Vec::new();
1288 let result = response.read_to_end(&mut body);
1289 let err_type = match response.status.is_server_error() {
1290 false => SimpleErrorType::Permanent,
1291 true => SimpleErrorType::Temporary,
1292 };
1293 Err(ApiError::new(
1294 format!(
1295 "Unexpected response code {}:\n{:?}\n\n{}",
1296 code,
1297 headers,
1298 match result {
1299 Ok(_) => match str::from_utf8(&body) {
1300 Ok(body) => Cow::from(body),
1301 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1302 },
1303 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1304 }
1305 ),
1306 err_type,
1307 ))
1308 }
1309 })
1310 }
1311
1312 fn update_app(
1313 &self,
1314 param_app_id: uuid::Uuid,
1315 param_body: models::AppBodyUpdateRequest,
1316 ) -> Result<models::App, ApiError> {
1317 let mut url = format!(
1318 "{}/v1/apps/{app_id}",
1319 self.base_path,
1320 app_id = utf8_percent_encode(¶m_app_id.to_string(), ID_ENCODE_SET)
1321 );
1322
1323 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1324
1325 let query_string_str = query_string.finish();
1326 if !query_string_str.is_empty() {
1327 url += "?";
1328 url += &query_string_str;
1329 }
1330
1331 let url = match Url::from_str(&url) {
1332 Ok(url) => url,
1333 Err(err) => {
1334 return Err(ApiError::new(
1335 format!("Unable to build URL: {}", err),
1336 SimpleErrorType::Permanent,
1337 ))
1338 }
1339 };
1340
1341 let mut request = self.hyper_client.request(Method::Patch, url);
1342 request = request.headers(self.headers.clone());
1343 let body = serde_json::to_string(¶m_body)
1344 .expect("impossible to fail to serialize")
1345 .into_bytes();
1346 request = request.body(body.as_slice());
1347
1348 request = request.header(ContentType(mimetypes::requests::UPDATE_APP.clone()));
1349
1350 request
1351 .send()
1352 .map_err(|e| {
1353 ApiError::new(
1354 format!("No response received: {}", e),
1355 SimpleErrorType::Permanent,
1356 )
1357 })
1358 .and_then(|mut response| match response.status.to_u16() {
1359 200 => {
1360 let mut body = Vec::new();
1361 response.read_to_end(&mut body).map_err(|e| {
1362 ApiError::new(
1363 format!("Failed to read response: {}", e),
1364 SimpleErrorType::Temporary,
1365 )
1366 })?;
1367 str::from_utf8(&body)
1368 .map_err(|e| {
1369 ApiError::new(
1370 format!("Response was not valid UTF8: {}", e),
1371 SimpleErrorType::Temporary,
1372 )
1373 })
1374 .and_then(|body| {
1375 serde_json::from_str::<models::App>(body).map_err(|e| e.into())
1376 })
1377 }
1378 code => {
1379 let headers = response.headers.clone();
1380 let mut body = Vec::new();
1381 let result = response.read_to_end(&mut body);
1382 let err_type = match response.status.is_server_error() {
1383 false => SimpleErrorType::Permanent,
1384 true => SimpleErrorType::Temporary,
1385 };
1386 Err(ApiError::new(
1387 format!(
1388 "Unexpected response code {}:\n{:?}\n\n{}",
1389 code,
1390 headers,
1391 match result {
1392 Ok(_) => match str::from_utf8(&body) {
1393 Ok(body) => Cow::from(body),
1394 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1395 },
1396 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1397 }
1398 ),
1399 err_type,
1400 ))
1401 }
1402 })
1403 }
1404}
1405
1406impl ApplicationConfigApi for Client {
1407 type Error = ApiError;
1408
1409 fn create_application_config(
1410 &self,
1411 param_body: models::ApplicationConfig,
1412 ) -> Result<models::ApplicationConfigResponse, ApiError> {
1413 let mut url = format!("{}/v1/app_configs", self.base_path);
1414
1415 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1416
1417 let query_string_str = query_string.finish();
1418 if !query_string_str.is_empty() {
1419 url += "?";
1420 url += &query_string_str;
1421 }
1422
1423 let url = match Url::from_str(&url) {
1424 Ok(url) => url,
1425 Err(err) => {
1426 return Err(ApiError::new(
1427 format!("Unable to build URL: {}", err),
1428 SimpleErrorType::Permanent,
1429 ))
1430 }
1431 };
1432
1433 let mut request = self.hyper_client.request(Method::Post, url);
1434 request = request.headers(self.headers.clone());
1435 let body = serde_json::to_string(¶m_body)
1437 .expect("impossible to fail to serialize")
1438 .into_bytes();
1439 request = request.body(body.as_slice());
1440
1441 request = request.header(ContentType(
1442 mimetypes::requests::CREATE_APPLICATION_CONFIG.clone(),
1443 ));
1444
1445 request
1446 .send()
1447 .map_err(|e| {
1448 ApiError::new(
1449 format!("No response received: {}", e),
1450 SimpleErrorType::Permanent,
1451 )
1452 })
1453 .and_then(|mut response| match response.status.to_u16() {
1454 200 => {
1455 let mut body = Vec::new();
1456 response.read_to_end(&mut body).map_err(|e| {
1457 ApiError::new(
1458 format!("Failed to read response: {}", e),
1459 SimpleErrorType::Temporary,
1460 )
1461 })?;
1462 str::from_utf8(&body)
1463 .map_err(|e| {
1464 ApiError::new(
1465 format!("Response was not valid UTF8: {}", e),
1466 SimpleErrorType::Temporary,
1467 )
1468 })
1469 .and_then(|body| {
1470 serde_json::from_str::<models::ApplicationConfigResponse>(body)
1471 .map_err(|e| e.into())
1472 })
1473 }
1474 code => {
1475 let headers = response.headers.clone();
1476 let mut body = Vec::new();
1477 let result = response.read_to_end(&mut body);
1478 let err_type = match response.status.is_server_error() {
1479 false => SimpleErrorType::Permanent,
1480 true => SimpleErrorType::Temporary,
1481 };
1482 Err(ApiError::new(
1483 format!(
1484 "Unexpected response code {}:\n{:?}\n\n{}",
1485 code,
1486 headers,
1487 match result {
1488 Ok(_) => match str::from_utf8(&body) {
1489 Ok(body) => Cow::from(body),
1490 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1491 },
1492 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1493 }
1494 ),
1495 err_type,
1496 ))
1497 }
1498 })
1499 }
1500
1501 fn delete_application_config(&self, param_config_id: String) -> Result<(), ApiError> {
1502 let mut url = format!(
1503 "{}/v1/app_configs/{config_id}",
1504 self.base_path,
1505 config_id = utf8_percent_encode(¶m_config_id.to_string(), ID_ENCODE_SET)
1506 );
1507
1508 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1509
1510 let query_string_str = query_string.finish();
1511 if !query_string_str.is_empty() {
1512 url += "?";
1513 url += &query_string_str;
1514 }
1515
1516 let url = match Url::from_str(&url) {
1517 Ok(url) => url,
1518 Err(err) => {
1519 return Err(ApiError::new(
1520 format!("Unable to build URL: {}", err),
1521 SimpleErrorType::Permanent,
1522 ))
1523 }
1524 };
1525
1526 let mut request = self.hyper_client.request(Method::Delete, url);
1527 request = request.headers(self.headers.clone());
1528
1529 request
1530 .send()
1531 .map_err(|e| {
1532 ApiError::new(
1533 format!("No response received: {}", e),
1534 SimpleErrorType::Permanent,
1535 )
1536 })
1537 .and_then(|mut response| match response.status.to_u16() {
1538 204 => {
1539 let mut body = Vec::new();
1540 response.read_to_end(&mut body).map_err(|e| {
1541 ApiError::new(
1542 format!("Failed to read response: {}", e),
1543 SimpleErrorType::Temporary,
1544 )
1545 })?;
1546
1547 Ok(())
1548 }
1549 code => {
1550 let headers = response.headers.clone();
1551 let mut body = Vec::new();
1552 let result = response.read_to_end(&mut body);
1553 let err_type = match response.status.is_server_error() {
1554 false => SimpleErrorType::Permanent,
1555 true => SimpleErrorType::Temporary,
1556 };
1557 Err(ApiError::new(
1558 format!(
1559 "Unexpected response code {}:\n{:?}\n\n{}",
1560 code,
1561 headers,
1562 match result {
1563 Ok(_) => match str::from_utf8(&body) {
1564 Ok(body) => Cow::from(body),
1565 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1566 },
1567 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1568 }
1569 ),
1570 err_type,
1571 ))
1572 }
1573 })
1574 }
1575
1576 fn get_all_application_configs(
1577 &self,
1578 param_name: Option<String>,
1579 param_description: Option<String>,
1580 param_image_id: Option<uuid::Uuid>,
1581 param_limit: Option<i32>,
1582 param_offset: Option<i32>,
1583 ) -> Result<models::GetAllApplicationConfigsResponse, ApiError> {
1584 let mut url = format!("{}/v1/app_configs", self.base_path);
1585
1586 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1587
1588 if let Some(name) = param_name {
1589 query_string.append_pair("name", &name.to_string());
1590 }
1591 if let Some(description) = param_description {
1592 query_string.append_pair("description", &description.to_string());
1593 }
1594 if let Some(image_id) = param_image_id {
1595 query_string.append_pair("image_id", &image_id.to_string());
1596 }
1597 if let Some(limit) = param_limit {
1598 query_string.append_pair("limit", &limit.to_string());
1599 }
1600 if let Some(offset) = param_offset {
1601 query_string.append_pair("offset", &offset.to_string());
1602 }
1603 let query_string_str = query_string.finish();
1604 if !query_string_str.is_empty() {
1605 url += "?";
1606 url += &query_string_str;
1607 }
1608
1609 let url = match Url::from_str(&url) {
1610 Ok(url) => url,
1611 Err(err) => {
1612 return Err(ApiError::new(
1613 format!("Unable to build URL: {}", err),
1614 SimpleErrorType::Permanent,
1615 ))
1616 }
1617 };
1618
1619 let mut request = self.hyper_client.request(Method::Get, url);
1620 request = request.headers(self.headers.clone());
1621
1622 request
1623 .send()
1624 .map_err(|e| {
1625 ApiError::new(
1626 format!("No response received: {}", e),
1627 SimpleErrorType::Permanent,
1628 )
1629 })
1630 .and_then(|mut response| match response.status.to_u16() {
1631 200 => {
1632 let mut body = Vec::new();
1633 response.read_to_end(&mut body).map_err(|e| {
1634 ApiError::new(
1635 format!("Failed to read response: {}", e),
1636 SimpleErrorType::Temporary,
1637 )
1638 })?;
1639 str::from_utf8(&body)
1640 .map_err(|e| {
1641 ApiError::new(
1642 format!("Response was not valid UTF8: {}", e),
1643 SimpleErrorType::Temporary,
1644 )
1645 })
1646 .and_then(|body| {
1647 serde_json::from_str::<models::GetAllApplicationConfigsResponse>(body)
1648 .map_err(|e| e.into())
1649 })
1650 }
1651 code => {
1652 let headers = response.headers.clone();
1653 let mut body = Vec::new();
1654 let result = response.read_to_end(&mut body);
1655 let err_type = match response.status.is_server_error() {
1656 false => SimpleErrorType::Permanent,
1657 true => SimpleErrorType::Temporary,
1658 };
1659 Err(ApiError::new(
1660 format!(
1661 "Unexpected response code {}:\n{:?}\n\n{}",
1662 code,
1663 headers,
1664 match result {
1665 Ok(_) => match str::from_utf8(&body) {
1666 Ok(body) => Cow::from(body),
1667 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1668 },
1669 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1670 }
1671 ),
1672 err_type,
1673 ))
1674 }
1675 })
1676 }
1677
1678 fn get_application_config(
1679 &self,
1680 param_config_id: String,
1681 ) -> Result<models::ApplicationConfigResponse, ApiError> {
1682 let mut url = format!(
1683 "{}/v1/app_configs/{config_id}",
1684 self.base_path,
1685 config_id = utf8_percent_encode(¶m_config_id.to_string(), ID_ENCODE_SET)
1686 );
1687
1688 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1689
1690 let query_string_str = query_string.finish();
1691 if !query_string_str.is_empty() {
1692 url += "?";
1693 url += &query_string_str;
1694 }
1695
1696 let url = match Url::from_str(&url) {
1697 Ok(url) => url,
1698 Err(err) => {
1699 return Err(ApiError::new(
1700 format!("Unable to build URL: {}", err),
1701 SimpleErrorType::Permanent,
1702 ))
1703 }
1704 };
1705
1706 let mut request = self.hyper_client.request(Method::Get, url);
1707 request = request.headers(self.headers.clone());
1708
1709 request
1710 .send()
1711 .map_err(|e| {
1712 ApiError::new(
1713 format!("No response received: {}", e),
1714 SimpleErrorType::Permanent,
1715 )
1716 })
1717 .and_then(|mut response| match response.status.to_u16() {
1718 200 => {
1719 let mut body = Vec::new();
1720 response.read_to_end(&mut body).map_err(|e| {
1721 ApiError::new(
1722 format!("Failed to read response: {}", e),
1723 SimpleErrorType::Temporary,
1724 )
1725 })?;
1726 str::from_utf8(&body)
1727 .map_err(|e| {
1728 ApiError::new(
1729 format!("Response was not valid UTF8: {}", e),
1730 SimpleErrorType::Temporary,
1731 )
1732 })
1733 .and_then(|body| {
1734 serde_json::from_str::<models::ApplicationConfigResponse>(body)
1735 .map_err(|e| e.into())
1736 })
1737 }
1738 code => {
1739 let headers = response.headers.clone();
1740 let mut body = Vec::new();
1741 let result = response.read_to_end(&mut body);
1742 let err_type = match response.status.is_server_error() {
1743 false => SimpleErrorType::Permanent,
1744 true => SimpleErrorType::Temporary,
1745 };
1746 Err(ApiError::new(
1747 format!(
1748 "Unexpected response code {}:\n{:?}\n\n{}",
1749 code,
1750 headers,
1751 match result {
1752 Ok(_) => match str::from_utf8(&body) {
1753 Ok(body) => Cow::from(body),
1754 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1755 },
1756 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1757 }
1758 ),
1759 err_type,
1760 ))
1761 }
1762 })
1763 }
1764
1765 fn get_runtime_application_config(
1766 &self,
1767 expected_hash: &[u8; 32],
1768 ) -> Result<models::RuntimeAppConfig, ApiError> {
1769 let mut operation_path = "/v1/runtime/app_configs";
1770 let mut url = format!(
1771 "{}{}",
1772 self.base_path,
1773 self.remap_operation_path(operation_path)
1774 );
1775
1776 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1777
1778 let query_string_str = query_string.finish();
1779 if !query_string_str.is_empty() {
1780 url += "?";
1781 url += &query_string_str;
1782 }
1783
1784 let url = match Url::from_str(&url) {
1785 Ok(url) => url,
1786 Err(err) => {
1787 return Err(ApiError::new(
1788 format!("Unable to build URL: {}", err),
1789 SimpleErrorType::Permanent,
1790 ))
1791 }
1792 };
1793
1794 let mut request = self.hyper_client.request(Method::Get, url);
1795 request = request.headers(self.headers.clone());
1796
1797 let raw_config = request
1798 .send()
1799 .map_err(|e| {
1800 ApiError::new(
1801 format!("No response received: {}", e),
1802 SimpleErrorType::Permanent,
1803 )
1804 })
1805 .and_then(|mut response| match response.status.to_u16() {
1806 200 => {
1807 let mut body = Vec::new();
1808 response.read_to_end(&mut body).map_err(|e| {
1809 ApiError::new(
1810 format!("Failed to read response: {}", e),
1811 SimpleErrorType::Temporary,
1812 )
1813 })?;
1814 String::from_utf8(body).map_err(|e| {
1815 ApiError::new(
1816 format!("Response was not valid UTF8: {}", e),
1817 SimpleErrorType::Temporary,
1818 )
1819 })
1820 }
1821 code => {
1822 let headers = response.headers.clone();
1823 let mut body = Vec::new();
1824 let result = response.read_to_end(&mut body);
1825 let err_type = match response.status.is_server_error() {
1826 false => SimpleErrorType::Permanent,
1827 true => SimpleErrorType::Temporary,
1828 };
1829 Err(ApiError::new(
1830 format!(
1831 "Unexpected response code {}:\n{:?}\n\n{}",
1832 code,
1833 headers,
1834 match result {
1835 Ok(_) => match str::from_utf8(&body) {
1836 Ok(body) => Cow::from(body),
1837 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1838 },
1839 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1840 }
1841 ),
1842 err_type,
1843 ))
1844 }
1845 })?;
1846
1847 deserialize_config_checked(&raw_config, expected_hash)
1848 }
1849
1850 fn get_specific_runtime_application_config(
1851 &self,
1852 param_config_id: String,
1853 ) -> Result<models::RuntimeAppConfig, ApiError> {
1854 let mut url = format!(
1855 "{}/v1/runtime/app_configs/{config_id}",
1856 self.base_path,
1857 config_id = utf8_percent_encode(¶m_config_id.to_string(), ID_ENCODE_SET)
1858 );
1859
1860 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1861
1862 let query_string_str = query_string.finish();
1863 if !query_string_str.is_empty() {
1864 url += "?";
1865 url += &query_string_str;
1866 }
1867
1868 let url = match Url::from_str(&url) {
1869 Ok(url) => url,
1870 Err(err) => {
1871 return Err(ApiError::new(
1872 format!("Unable to build URL: {}", err),
1873 SimpleErrorType::Permanent,
1874 ))
1875 }
1876 };
1877
1878 let mut request = self.hyper_client.request(Method::Get, url);
1879 request = request.headers(self.headers.clone());
1880
1881 request
1882 .send()
1883 .map_err(|e| {
1884 ApiError::new(
1885 format!("No response received: {}", e),
1886 SimpleErrorType::Permanent,
1887 )
1888 })
1889 .and_then(|mut response| match response.status.to_u16() {
1890 200 => {
1891 let mut body = Vec::new();
1892 response.read_to_end(&mut body).map_err(|e| {
1893 ApiError::new(
1894 format!("Failed to read response: {}", e),
1895 SimpleErrorType::Temporary,
1896 )
1897 })?;
1898 str::from_utf8(&body)
1899 .map_err(|e| {
1900 ApiError::new(
1901 format!("Response was not valid UTF8: {}", e),
1902 SimpleErrorType::Temporary,
1903 )
1904 })
1905 .and_then(|body| {
1906 serde_json::from_str::<models::RuntimeAppConfig>(body)
1907 .map_err(|e| e.into())
1908 })
1909 }
1910 code => {
1911 let headers = response.headers.clone();
1912 let mut body = Vec::new();
1913 let result = response.read_to_end(&mut body);
1914 let err_type = match response.status.is_server_error() {
1915 false => SimpleErrorType::Permanent,
1916 true => SimpleErrorType::Temporary,
1917 };
1918 Err(ApiError::new(
1919 format!(
1920 "Unexpected response code {}:\n{:?}\n\n{}",
1921 code,
1922 headers,
1923 match result {
1924 Ok(_) => match str::from_utf8(&body) {
1925 Ok(body) => Cow::from(body),
1926 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
1927 },
1928 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
1929 }
1930 ),
1931 err_type,
1932 ))
1933 }
1934 })
1935 }
1936
1937 fn update_application_config(
1938 &self,
1939 param_config_id: String,
1940 param_body: models::UpdateApplicationConfigRequest,
1941 ) -> Result<models::ApplicationConfigResponse, ApiError> {
1942 let mut url = format!(
1943 "{}/v1/app_configs/{config_id}",
1944 self.base_path,
1945 config_id = utf8_percent_encode(¶m_config_id.to_string(), ID_ENCODE_SET)
1946 );
1947
1948 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
1949
1950 let query_string_str = query_string.finish();
1951 if !query_string_str.is_empty() {
1952 url += "?";
1953 url += &query_string_str;
1954 }
1955
1956 let url = match Url::from_str(&url) {
1957 Ok(url) => url,
1958 Err(err) => {
1959 return Err(ApiError::new(
1960 format!("Unable to build URL: {}", err),
1961 SimpleErrorType::Permanent,
1962 ))
1963 }
1964 };
1965
1966 let mut request = self.hyper_client.request(Method::Patch, url);
1967 request = request.headers(self.headers.clone());
1968 let body = serde_json::to_string(¶m_body)
1969 .expect("impossible to fail to serialize")
1970 .into_bytes();
1971 request = request.body(body.as_slice());
1972
1973 request = request.header(ContentType(
1974 mimetypes::requests::UPDATE_APPLICATION_CONFIG.clone(),
1975 ));
1976
1977 request
1978 .send()
1979 .map_err(|e| {
1980 ApiError::new(
1981 format!("No response received: {}", e),
1982 SimpleErrorType::Permanent,
1983 )
1984 })
1985 .and_then(|mut response| match response.status.to_u16() {
1986 200 => {
1987 let mut body = Vec::new();
1988 response.read_to_end(&mut body).map_err(|e| {
1989 ApiError::new(
1990 format!("Failed to read response: {}", e),
1991 SimpleErrorType::Temporary,
1992 )
1993 })?;
1994 str::from_utf8(&body)
1995 .map_err(|e| {
1996 ApiError::new(
1997 format!("Response was not valid UTF8: {}", e),
1998 SimpleErrorType::Temporary,
1999 )
2000 })
2001 .and_then(|body| {
2002 serde_json::from_str::<models::ApplicationConfigResponse>(body)
2003 .map_err(|e| e.into())
2004 })
2005 }
2006 code => {
2007 let headers = response.headers.clone();
2008 let mut body = Vec::new();
2009 let result = response.read_to_end(&mut body);
2010 let err_type = match response.status.is_server_error() {
2011 false => SimpleErrorType::Permanent,
2012 true => SimpleErrorType::Temporary,
2013 };
2014 Err(ApiError::new(
2015 format!(
2016 "Unexpected response code {}:\n{:?}\n\n{}",
2017 code,
2018 headers,
2019 match result {
2020 Ok(_) => match str::from_utf8(&body) {
2021 Ok(body) => Cow::from(body),
2022 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2023 },
2024 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2025 }
2026 ),
2027 err_type,
2028 ))
2029 }
2030 })
2031 }
2032}
2033
2034impl ApprovalRequestsApi for Client {
2035 type Error = ApiError;
2036
2037 fn approve_approval_request(
2038 &self,
2039 param_request_id: uuid::Uuid,
2040 param_body: Option<models::ApproveRequest>,
2041 ) -> Result<models::ApprovalRequest, ApiError> {
2042 let mut url = format!(
2043 "{}/v1/approval_requests/{request_id}/approve",
2044 self.base_path,
2045 request_id = utf8_percent_encode(¶m_request_id.to_string(), ID_ENCODE_SET)
2046 );
2047
2048 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2049
2050 let query_string_str = query_string.finish();
2051 if !query_string_str.is_empty() {
2052 url += "?";
2053 url += &query_string_str;
2054 }
2055
2056 let url = match Url::from_str(&url) {
2057 Ok(url) => url,
2058 Err(err) => {
2059 return Err(ApiError::new(
2060 format!("Unable to build URL: {}", err),
2061 SimpleErrorType::Permanent,
2062 ))
2063 }
2064 };
2065
2066 let mut request = self.hyper_client.request(Method::Post, url);
2067 request = request.headers(self.headers.clone());
2068 let body = param_body.map(|ref body| {
2070 serde_json::to_string(body)
2071 .expect("impossible to fail to serialize")
2072 .into_bytes()
2073 });
2074
2075 if let Some(body) = body.as_ref() {
2076 request = request.body(body.as_slice());
2077 }
2078
2079 request = request.header(ContentType(
2080 mimetypes::requests::APPROVE_APPROVAL_REQUEST.clone(),
2081 ));
2082
2083 request
2084 .send()
2085 .map_err(|e| {
2086 ApiError::new(
2087 format!("No response received: {}", e),
2088 SimpleErrorType::Permanent,
2089 )
2090 })
2091 .and_then(|mut response| match response.status.to_u16() {
2092 200 => {
2093 let mut body = Vec::new();
2094 response.read_to_end(&mut body).map_err(|e| {
2095 ApiError::new(
2096 format!("Failed to read response: {}", e),
2097 SimpleErrorType::Temporary,
2098 )
2099 })?;
2100 str::from_utf8(&body)
2101 .map_err(|e| {
2102 ApiError::new(
2103 format!("Response was not valid UTF8: {}", e),
2104 SimpleErrorType::Temporary,
2105 )
2106 })
2107 .and_then(|body| {
2108 serde_json::from_str::<models::ApprovalRequest>(body)
2109 .map_err(|e| e.into())
2110 })
2111 }
2112 code => {
2113 let headers = response.headers.clone();
2114 let mut body = Vec::new();
2115 let result = response.read_to_end(&mut body);
2116 let err_type = match response.status.is_server_error() {
2117 false => SimpleErrorType::Permanent,
2118 true => SimpleErrorType::Temporary,
2119 };
2120 Err(ApiError::new(
2121 format!(
2122 "Unexpected response code {}:\n{:?}\n\n{}",
2123 code,
2124 headers,
2125 match result {
2126 Ok(_) => match str::from_utf8(&body) {
2127 Ok(body) => Cow::from(body),
2128 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2129 },
2130 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2131 }
2132 ),
2133 err_type,
2134 ))
2135 }
2136 })
2137 }
2138
2139 fn create_approval_request(
2140 &self,
2141 param_body: models::ApprovalRequestRequest,
2142 ) -> Result<models::ApprovalRequest, ApiError> {
2143 let mut url = format!("{}/v1/approval_requests", self.base_path);
2144
2145 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2146
2147 let query_string_str = query_string.finish();
2148 if !query_string_str.is_empty() {
2149 url += "?";
2150 url += &query_string_str;
2151 }
2152
2153 let url = match Url::from_str(&url) {
2154 Ok(url) => url,
2155 Err(err) => {
2156 return Err(ApiError::new(
2157 format!("Unable to build URL: {}", err),
2158 SimpleErrorType::Permanent,
2159 ))
2160 }
2161 };
2162
2163 let mut request = self.hyper_client.request(Method::Post, url);
2164 request = request.headers(self.headers.clone());
2165 let body = serde_json::to_string(¶m_body)
2166 .expect("impossible to fail to serialize")
2167 .into_bytes();
2168 request = request.body(body.as_slice());
2169
2170 request = request.header(ContentType(
2171 mimetypes::requests::CREATE_APPROVAL_REQUEST.clone(),
2172 ));
2173
2174 request
2175 .send()
2176 .map_err(|e| {
2177 ApiError::new(
2178 format!("No response received: {}", e),
2179 SimpleErrorType::Permanent,
2180 )
2181 })
2182 .and_then(|mut response| match response.status.to_u16() {
2183 201 => {
2184 let mut body = Vec::new();
2185 response.read_to_end(&mut body).map_err(|e| {
2186 ApiError::new(
2187 format!("Failed to read response: {}", e),
2188 SimpleErrorType::Temporary,
2189 )
2190 })?;
2191 str::from_utf8(&body)
2192 .map_err(|e| {
2193 ApiError::new(
2194 format!("Response was not valid UTF8: {}", e),
2195 SimpleErrorType::Temporary,
2196 )
2197 })
2198 .and_then(|body| {
2199 serde_json::from_str::<models::ApprovalRequest>(body)
2200 .map_err(|e| e.into())
2201 })
2202 }
2203 code => {
2204 let headers = response.headers.clone();
2205 let mut body = Vec::new();
2206 let result = response.read_to_end(&mut body);
2207 let err_type = match response.status.is_server_error() {
2208 false => SimpleErrorType::Permanent,
2209 true => SimpleErrorType::Temporary,
2210 };
2211 Err(ApiError::new(
2212 format!(
2213 "Unexpected response code {}:\n{:?}\n\n{}",
2214 code,
2215 headers,
2216 match result {
2217 Ok(_) => match str::from_utf8(&body) {
2218 Ok(body) => Cow::from(body),
2219 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2220 },
2221 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2222 }
2223 ),
2224 err_type,
2225 ))
2226 }
2227 })
2228 }
2229
2230 fn delete_approval_request(&self, param_request_id: uuid::Uuid) -> Result<(), ApiError> {
2231 let mut url = format!(
2232 "{}/v1/approval_requests/{request_id}",
2233 self.base_path,
2234 request_id = utf8_percent_encode(¶m_request_id.to_string(), ID_ENCODE_SET)
2235 );
2236
2237 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2238
2239 let query_string_str = query_string.finish();
2240 if !query_string_str.is_empty() {
2241 url += "?";
2242 url += &query_string_str;
2243 }
2244
2245 let url = match Url::from_str(&url) {
2246 Ok(url) => url,
2247 Err(err) => {
2248 return Err(ApiError::new(
2249 format!("Unable to build URL: {}", err),
2250 SimpleErrorType::Permanent,
2251 ))
2252 }
2253 };
2254
2255 let mut request = self.hyper_client.request(Method::Delete, url);
2256 request = request.headers(self.headers.clone());
2257
2258 request
2259 .send()
2260 .map_err(|e| {
2261 ApiError::new(
2262 format!("No response received: {}", e),
2263 SimpleErrorType::Permanent,
2264 )
2265 })
2266 .and_then(|mut response| match response.status.to_u16() {
2267 204 => {
2268 let mut body = Vec::new();
2269 response.read_to_end(&mut body).map_err(|e| {
2270 ApiError::new(
2271 format!("Failed to read response: {}", e),
2272 SimpleErrorType::Temporary,
2273 )
2274 })?;
2275
2276 Ok(())
2277 }
2278 code => {
2279 let headers = response.headers.clone();
2280 let mut body = Vec::new();
2281 let result = response.read_to_end(&mut body);
2282 let err_type = match response.status.is_server_error() {
2283 false => SimpleErrorType::Permanent,
2284 true => SimpleErrorType::Temporary,
2285 };
2286 Err(ApiError::new(
2287 format!(
2288 "Unexpected response code {}:\n{:?}\n\n{}",
2289 code,
2290 headers,
2291 match result {
2292 Ok(_) => match str::from_utf8(&body) {
2293 Ok(body) => Cow::from(body),
2294 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2295 },
2296 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2297 }
2298 ),
2299 err_type,
2300 ))
2301 }
2302 })
2303 }
2304
2305 fn deny_approval_request(
2306 &self,
2307 param_request_id: uuid::Uuid,
2308 param_body: Option<models::DenyRequest>,
2309 ) -> Result<models::ApprovalRequest, ApiError> {
2310 let mut url = format!(
2311 "{}/v1/approval_requests/{request_id}/deny",
2312 self.base_path,
2313 request_id = utf8_percent_encode(¶m_request_id.to_string(), ID_ENCODE_SET)
2314 );
2315
2316 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2317
2318 let query_string_str = query_string.finish();
2319 if !query_string_str.is_empty() {
2320 url += "?";
2321 url += &query_string_str;
2322 }
2323
2324 let url = match Url::from_str(&url) {
2325 Ok(url) => url,
2326 Err(err) => {
2327 return Err(ApiError::new(
2328 format!("Unable to build URL: {}", err),
2329 SimpleErrorType::Permanent,
2330 ))
2331 }
2332 };
2333
2334 let mut request = self.hyper_client.request(Method::Post, url);
2335 request = request.headers(self.headers.clone());
2336 let body = param_body.map(|ref body| {
2337 serde_json::to_string(body)
2338 .expect("impossible to fail to serialize")
2339 .into_bytes()
2340 });
2341
2342 if let Some(body) = body.as_ref() {
2343 request = request.body(body.as_slice());
2344 }
2345
2346 request = request.header(ContentType(
2347 mimetypes::requests::DENY_APPROVAL_REQUEST.clone(),
2348 ));
2349
2350 request
2351 .send()
2352 .map_err(|e| {
2353 ApiError::new(
2354 format!("No response received: {}", e),
2355 SimpleErrorType::Permanent,
2356 )
2357 })
2358 .and_then(|mut response| match response.status.to_u16() {
2359 200 => {
2360 let mut body = Vec::new();
2361 response.read_to_end(&mut body).map_err(|e| {
2362 ApiError::new(
2363 format!("Failed to read response: {}", e),
2364 SimpleErrorType::Temporary,
2365 )
2366 })?;
2367 str::from_utf8(&body)
2368 .map_err(|e| {
2369 ApiError::new(
2370 format!("Response was not valid UTF8: {}", e),
2371 SimpleErrorType::Temporary,
2372 )
2373 })
2374 .and_then(|body| {
2375 serde_json::from_str::<models::ApprovalRequest>(body)
2376 .map_err(|e| e.into())
2377 })
2378 }
2379 code => {
2380 let headers = response.headers.clone();
2381 let mut body = Vec::new();
2382 let result = response.read_to_end(&mut body);
2383 let err_type = match response.status.is_server_error() {
2384 false => SimpleErrorType::Permanent,
2385 true => SimpleErrorType::Temporary,
2386 };
2387 Err(ApiError::new(
2388 format!(
2389 "Unexpected response code {}:\n{:?}\n\n{}",
2390 code,
2391 headers,
2392 match result {
2393 Ok(_) => match str::from_utf8(&body) {
2394 Ok(body) => Cow::from(body),
2395 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2396 },
2397 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2398 }
2399 ),
2400 err_type,
2401 ))
2402 }
2403 })
2404 }
2405
2406 fn get_all_approval_requests(
2407 &self,
2408 param_requester: Option<uuid::Uuid>,
2409 param_reviewer: Option<uuid::Uuid>,
2410 param_subject: Option<uuid::Uuid>,
2411 param_status: Option<String>,
2412 param_all_search: Option<String>,
2413 param_sort_by: Option<String>,
2414 param_limit: Option<i32>,
2415 param_offset: Option<i32>,
2416 ) -> Result<models::GetAllApprovalRequests, ApiError> {
2417 let mut url = format!("{}/v1/approval_requests", self.base_path);
2418
2419 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2420
2421 if let Some(requester) = param_requester {
2422 query_string.append_pair("requester", &requester.to_string());
2423 }
2424 if let Some(reviewer) = param_reviewer {
2425 query_string.append_pair("reviewer", &reviewer.to_string());
2426 }
2427 if let Some(subject) = param_subject {
2428 query_string.append_pair("subject", &subject.to_string());
2429 }
2430 if let Some(status) = param_status {
2431 query_string.append_pair("status", &status.to_string());
2432 }
2433 if let Some(all_search) = param_all_search {
2434 query_string.append_pair("all_search", &all_search.to_string());
2435 }
2436 if let Some(sort_by) = param_sort_by {
2437 query_string.append_pair("sort_by", &sort_by.to_string());
2438 }
2439 if let Some(limit) = param_limit {
2440 query_string.append_pair("limit", &limit.to_string());
2441 }
2442 if let Some(offset) = param_offset {
2443 query_string.append_pair("offset", &offset.to_string());
2444 }
2445 let query_string_str = query_string.finish();
2446 if !query_string_str.is_empty() {
2447 url += "?";
2448 url += &query_string_str;
2449 }
2450
2451 let url = match Url::from_str(&url) {
2452 Ok(url) => url,
2453 Err(err) => {
2454 return Err(ApiError::new(
2455 format!("Unable to build URL: {}", err),
2456 SimpleErrorType::Permanent,
2457 ))
2458 }
2459 };
2460
2461 let mut request = self.hyper_client.request(Method::Get, url);
2462 request = request.headers(self.headers.clone());
2463
2464 request
2465 .send()
2466 .map_err(|e| {
2467 ApiError::new(
2468 format!("No response received: {}", e),
2469 SimpleErrorType::Permanent,
2470 )
2471 })
2472 .and_then(|mut response| match response.status.to_u16() {
2473 200 => {
2474 let mut body = Vec::new();
2475 response.read_to_end(&mut body).map_err(|e| {
2476 ApiError::new(
2477 format!("Failed to read response: {}", e),
2478 SimpleErrorType::Temporary,
2479 )
2480 })?;
2481 str::from_utf8(&body)
2482 .map_err(|e| {
2483 ApiError::new(
2484 format!("Response was not valid UTF8: {}", e),
2485 SimpleErrorType::Temporary,
2486 )
2487 })
2488 .and_then(|body| {
2489 serde_json::from_str::<models::GetAllApprovalRequests>(body)
2490 .map_err(|e| e.into())
2491 })
2492 }
2493 code => {
2494 let headers = response.headers.clone();
2495 let mut body = Vec::new();
2496 let result = response.read_to_end(&mut body);
2497 let err_type = match response.status.is_server_error() {
2498 false => SimpleErrorType::Permanent,
2499 true => SimpleErrorType::Temporary,
2500 };
2501 Err(ApiError::new(
2502 format!(
2503 "Unexpected response code {}:\n{:?}\n\n{}",
2504 code,
2505 headers,
2506 match result {
2507 Ok(_) => match str::from_utf8(&body) {
2508 Ok(body) => Cow::from(body),
2509 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2510 },
2511 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2512 }
2513 ),
2514 err_type,
2515 ))
2516 }
2517 })
2518 }
2519
2520 fn get_approval_request(
2521 &self,
2522 param_request_id: uuid::Uuid,
2523 ) -> Result<models::ApprovalRequest, ApiError> {
2524 let mut url = format!(
2525 "{}/v1/approval_requests/{request_id}",
2526 self.base_path,
2527 request_id = utf8_percent_encode(¶m_request_id.to_string(), ID_ENCODE_SET)
2528 );
2529
2530 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2531
2532 let query_string_str = query_string.finish();
2533 if !query_string_str.is_empty() {
2534 url += "?";
2535 url += &query_string_str;
2536 }
2537
2538 let url = match Url::from_str(&url) {
2539 Ok(url) => url,
2540 Err(err) => {
2541 return Err(ApiError::new(
2542 format!("Unable to build URL: {}", err),
2543 SimpleErrorType::Permanent,
2544 ))
2545 }
2546 };
2547
2548 let mut request = self.hyper_client.request(Method::Get, url);
2549 request = request.headers(self.headers.clone());
2550
2551 request
2552 .send()
2553 .map_err(|e| {
2554 ApiError::new(
2555 format!("No response received: {}", e),
2556 SimpleErrorType::Permanent,
2557 )
2558 })
2559 .and_then(|mut response| match response.status.to_u16() {
2560 200 => {
2561 let mut body = Vec::new();
2562 response.read_to_end(&mut body).map_err(|e| {
2563 ApiError::new(
2564 format!("Failed to read response: {}", e),
2565 SimpleErrorType::Temporary,
2566 )
2567 })?;
2568 str::from_utf8(&body)
2569 .map_err(|e| {
2570 ApiError::new(
2571 format!("Response was not valid UTF8: {}", e),
2572 SimpleErrorType::Temporary,
2573 )
2574 })
2575 .and_then(|body| {
2576 serde_json::from_str::<models::ApprovalRequest>(body)
2577 .map_err(|e| e.into())
2578 })
2579 }
2580 code => {
2581 let headers = response.headers.clone();
2582 let mut body = Vec::new();
2583 let result = response.read_to_end(&mut body);
2584 let err_type = match response.status.is_server_error() {
2585 false => SimpleErrorType::Permanent,
2586 true => SimpleErrorType::Temporary,
2587 };
2588 Err(ApiError::new(
2589 format!(
2590 "Unexpected response code {}:\n{:?}\n\n{}",
2591 code,
2592 headers,
2593 match result {
2594 Ok(_) => match str::from_utf8(&body) {
2595 Ok(body) => Cow::from(body),
2596 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2597 },
2598 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2599 }
2600 ),
2601 err_type,
2602 ))
2603 }
2604 })
2605 }
2606
2607 fn get_approval_request_result(
2608 &self,
2609 param_request_id: uuid::Uuid,
2610 ) -> Result<models::ApprovableResult, ApiError> {
2611 let mut url = format!(
2612 "{}/v1/approval_requests/{request_id}/result",
2613 self.base_path,
2614 request_id = utf8_percent_encode(¶m_request_id.to_string(), ID_ENCODE_SET)
2615 );
2616
2617 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2618
2619 let query_string_str = query_string.finish();
2620 if !query_string_str.is_empty() {
2621 url += "?";
2622 url += &query_string_str;
2623 }
2624
2625 let url = match Url::from_str(&url) {
2626 Ok(url) => url,
2627 Err(err) => {
2628 return Err(ApiError::new(
2629 format!("Unable to build URL: {}", err),
2630 SimpleErrorType::Permanent,
2631 ))
2632 }
2633 };
2634
2635 let mut request = self.hyper_client.request(Method::Post, url);
2636 request = request.headers(self.headers.clone());
2637
2638 request
2639 .send()
2640 .map_err(|e| {
2641 ApiError::new(
2642 format!("No response received: {}", e),
2643 SimpleErrorType::Permanent,
2644 )
2645 })
2646 .and_then(|mut response| match response.status.to_u16() {
2647 200 => {
2648 let mut body = Vec::new();
2649 response.read_to_end(&mut body).map_err(|e| {
2650 ApiError::new(
2651 format!("Failed to read response: {}", e),
2652 SimpleErrorType::Temporary,
2653 )
2654 })?;
2655 str::from_utf8(&body)
2656 .map_err(|e| {
2657 ApiError::new(
2658 format!("Response was not valid UTF8: {}", e),
2659 SimpleErrorType::Temporary,
2660 )
2661 })
2662 .and_then(|body| {
2663 serde_json::from_str::<models::ApprovableResult>(body)
2664 .map_err(|e| e.into())
2665 })
2666 }
2667 code => {
2668 let headers = response.headers.clone();
2669 let mut body = Vec::new();
2670 let result = response.read_to_end(&mut body);
2671 let err_type = match response.status.is_server_error() {
2672 false => SimpleErrorType::Permanent,
2673 true => SimpleErrorType::Temporary,
2674 };
2675 Err(ApiError::new(
2676 format!(
2677 "Unexpected response code {}:\n{:?}\n\n{}",
2678 code,
2679 headers,
2680 match result {
2681 Ok(_) => match str::from_utf8(&body) {
2682 Ok(body) => Cow::from(body),
2683 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2684 },
2685 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2686 }
2687 ),
2688 err_type,
2689 ))
2690 }
2691 })
2692 }
2693}
2694
2695impl AuthApi for Client {
2696 type Error = ApiError;
2697
2698 fn authenticate_user(
2699 &self,
2700 param_body: Option<models::AuthRequest>,
2701 ) -> Result<models::AuthResponse, ApiError> {
2702 let mut url = format!("{}/v1/sys/auth", self.base_path);
2703
2704 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2705
2706 let query_string_str = query_string.finish();
2707 if !query_string_str.is_empty() {
2708 url += "?";
2709 url += &query_string_str;
2710 }
2711
2712 let url = match Url::from_str(&url) {
2713 Ok(url) => url,
2714 Err(err) => {
2715 return Err(ApiError::new(
2716 format!("Unable to build URL: {}", err),
2717 SimpleErrorType::Permanent,
2718 ))
2719 }
2720 };
2721
2722 let mut request = self.hyper_client.request(Method::Post, url);
2723 request = request.headers(self.headers.clone());
2724 let body = param_body.map(|ref body| {
2726 serde_json::to_string(body)
2727 .expect("impossible to fail to serialize")
2728 .into_bytes()
2729 });
2730
2731 if let Some(body) = body.as_ref() {
2732 request = request.body(body.as_slice());
2733 }
2734
2735 request = request.header(ContentType(mimetypes::requests::AUTHENTICATE_USER.clone()));
2736
2737 request
2738 .send()
2739 .map_err(|e| {
2740 ApiError::new(
2741 format!("No response received: {}", e),
2742 SimpleErrorType::Permanent,
2743 )
2744 })
2745 .and_then(|mut response| match response.status.to_u16() {
2746 200 => {
2747 let mut body = Vec::new();
2748 response.read_to_end(&mut body).map_err(|e| {
2749 ApiError::new(
2750 format!("Failed to read response: {}", e),
2751 SimpleErrorType::Temporary,
2752 )
2753 })?;
2754 str::from_utf8(&body)
2755 .map_err(|e| {
2756 ApiError::new(
2757 format!("Response was not valid UTF8: {}", e),
2758 SimpleErrorType::Temporary,
2759 )
2760 })
2761 .and_then(|body| {
2762 serde_json::from_str::<models::AuthResponse>(body).map_err(|e| e.into())
2763 })
2764 }
2765 code => {
2766 let headers = response.headers.clone();
2767 let mut body = Vec::new();
2768 let result = response.read_to_end(&mut body);
2769 let err_type = match response.status.is_server_error() {
2770 false => SimpleErrorType::Permanent,
2771 true => SimpleErrorType::Temporary,
2772 };
2773 Err(ApiError::new(
2774 format!(
2775 "Unexpected response code {}:\n{:?}\n\n{}",
2776 code,
2777 headers,
2778 match result {
2779 Ok(_) => match str::from_utf8(&body) {
2780 Ok(body) => Cow::from(body),
2781 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2782 },
2783 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2784 }
2785 ),
2786 err_type,
2787 ))
2788 }
2789 })
2790 }
2791}
2792
2793impl BuildApi for Client {
2794 type Error = ApiError;
2795
2796 fn convert_app_build(
2797 &self,
2798 param_body: models::ConvertAppBuildRequest,
2799 ) -> Result<models::Build, ApiError> {
2800 let mut url = format!("{}/v1/builds/convert-app", self.base_path);
2801
2802 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2803
2804 let query_string_str = query_string.finish();
2805 if !query_string_str.is_empty() {
2806 url += "?";
2807 url += &query_string_str;
2808 }
2809
2810 let url = match Url::from_str(&url) {
2811 Ok(url) => url,
2812 Err(err) => {
2813 return Err(ApiError::new(
2814 format!("Unable to build URL: {}", err),
2815 SimpleErrorType::Permanent,
2816 ))
2817 }
2818 };
2819
2820 let mut request = self.hyper_client.request(Method::Post, url);
2821 request = request.headers(self.headers.clone());
2822 let body = serde_json::to_string(¶m_body)
2824 .expect("impossible to fail to serialize")
2825 .into_bytes();
2826 request = request.body(body.as_slice());
2827
2828 request = request.header(ContentType(mimetypes::requests::CONVERT_APP_BUILD.clone()));
2829
2830 request
2831 .send()
2832 .map_err(|e| {
2833 ApiError::new(
2834 format!("No response received: {}", e),
2835 SimpleErrorType::Permanent,
2836 )
2837 })
2838 .and_then(|mut response| match response.status.to_u16() {
2839 200 => {
2840 let mut body = Vec::new();
2841 response.read_to_end(&mut body).map_err(|e| {
2842 ApiError::new(
2843 format!("Failed to read response: {}", e),
2844 SimpleErrorType::Temporary,
2845 )
2846 })?;
2847 str::from_utf8(&body)
2848 .map_err(|e| {
2849 ApiError::new(
2850 format!("Response was not valid UTF8: {}", e),
2851 SimpleErrorType::Temporary,
2852 )
2853 })
2854 .and_then(|body| {
2855 serde_json::from_str::<models::Build>(body).map_err(|e| e.into())
2856 })
2857 }
2858 code => {
2859 let headers = response.headers.clone();
2860 let mut body = Vec::new();
2861 let result = response.read_to_end(&mut body);
2862 let err_type = match response.status.is_server_error() {
2863 false => SimpleErrorType::Permanent,
2864 true => SimpleErrorType::Temporary,
2865 };
2866 Err(ApiError::new(
2867 format!(
2868 "Unexpected response code {}:\n{:?}\n\n{}",
2869 code,
2870 headers,
2871 match result {
2872 Ok(_) => match str::from_utf8(&body) {
2873 Ok(body) => Cow::from(body),
2874 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2875 },
2876 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2877 }
2878 ),
2879 err_type,
2880 ))
2881 }
2882 })
2883 }
2884
2885 fn create_build(
2886 &self,
2887 param_body: models::CreateBuildRequest,
2888 ) -> Result<models::Build, ApiError> {
2889 let mut url = format!("{}/v1/builds", self.base_path);
2890
2891 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2892
2893 let query_string_str = query_string.finish();
2894 if !query_string_str.is_empty() {
2895 url += "?";
2896 url += &query_string_str;
2897 }
2898
2899 let url = match Url::from_str(&url) {
2900 Ok(url) => url,
2901 Err(err) => {
2902 return Err(ApiError::new(
2903 format!("Unable to build URL: {}", err),
2904 SimpleErrorType::Permanent,
2905 ))
2906 }
2907 };
2908
2909 let mut request = self.hyper_client.request(Method::Post, url);
2910 request = request.headers(self.headers.clone());
2911 let body = serde_json::to_string(¶m_body)
2912 .expect("impossible to fail to serialize")
2913 .into_bytes();
2914 request = request.body(body.as_slice());
2915
2916 request = request.header(ContentType(mimetypes::requests::CREATE_BUILD.clone()));
2917
2918 request
2919 .send()
2920 .map_err(|e| {
2921 ApiError::new(
2922 format!("No response received: {}", e),
2923 SimpleErrorType::Permanent,
2924 )
2925 })
2926 .and_then(|mut response| match response.status.to_u16() {
2927 200 => {
2928 let mut body = Vec::new();
2929 response.read_to_end(&mut body).map_err(|e| {
2930 ApiError::new(
2931 format!("Failed to read response: {}", e),
2932 SimpleErrorType::Temporary,
2933 )
2934 })?;
2935 str::from_utf8(&body)
2936 .map_err(|e| {
2937 ApiError::new(
2938 format!("Response was not valid UTF8: {}", e),
2939 SimpleErrorType::Temporary,
2940 )
2941 })
2942 .and_then(|body| {
2943 serde_json::from_str::<models::Build>(body).map_err(|e| e.into())
2944 })
2945 }
2946 code => {
2947 let headers = response.headers.clone();
2948 let mut body = Vec::new();
2949 let result = response.read_to_end(&mut body);
2950 let err_type = match response.status.is_server_error() {
2951 false => SimpleErrorType::Permanent,
2952 true => SimpleErrorType::Temporary,
2953 };
2954 Err(ApiError::new(
2955 format!(
2956 "Unexpected response code {}:\n{:?}\n\n{}",
2957 code,
2958 headers,
2959 match result {
2960 Ok(_) => match str::from_utf8(&body) {
2961 Ok(body) => Cow::from(body),
2962 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
2963 },
2964 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
2965 }
2966 ),
2967 err_type,
2968 ))
2969 }
2970 })
2971 }
2972
2973 fn delete_build(&self, param_build_id: uuid::Uuid) -> Result<(), ApiError> {
2974 let mut url = format!(
2975 "{}/v1/builds/{build_id}",
2976 self.base_path,
2977 build_id = utf8_percent_encode(¶m_build_id.to_string(), ID_ENCODE_SET)
2978 );
2979
2980 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
2981
2982 let query_string_str = query_string.finish();
2983 if !query_string_str.is_empty() {
2984 url += "?";
2985 url += &query_string_str;
2986 }
2987
2988 let url = match Url::from_str(&url) {
2989 Ok(url) => url,
2990 Err(err) => {
2991 return Err(ApiError::new(
2992 format!("Unable to build URL: {}", err),
2993 SimpleErrorType::Permanent,
2994 ))
2995 }
2996 };
2997
2998 let mut request = self.hyper_client.request(Method::Delete, url);
2999 request = request.headers(self.headers.clone());
3000
3001 request
3002 .send()
3003 .map_err(|e| {
3004 ApiError::new(
3005 format!("No response received: {}", e),
3006 SimpleErrorType::Permanent,
3007 )
3008 })
3009 .and_then(|mut response| match response.status.to_u16() {
3010 204 => {
3011 let mut body = Vec::new();
3012 response.read_to_end(&mut body).map_err(|e| {
3013 ApiError::new(
3014 format!("Failed to read response: {}", e),
3015 SimpleErrorType::Temporary,
3016 )
3017 })?;
3018
3019 Ok(())
3020 }
3021 code => {
3022 let headers = response.headers.clone();
3023 let mut body = Vec::new();
3024 let result = response.read_to_end(&mut body);
3025 let err_type = match response.status.is_server_error() {
3026 false => SimpleErrorType::Permanent,
3027 true => SimpleErrorType::Temporary,
3028 };
3029 Err(ApiError::new(
3030 format!(
3031 "Unexpected response code {}:\n{:?}\n\n{}",
3032 code,
3033 headers,
3034 match result {
3035 Ok(_) => match str::from_utf8(&body) {
3036 Ok(body) => Cow::from(body),
3037 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3038 },
3039 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3040 }
3041 ),
3042 err_type,
3043 ))
3044 }
3045 })
3046 }
3047
3048 fn get_all_builds(
3049 &self,
3050 param_all_search: Option<String>,
3051 param_docker_image_name: Option<String>,
3052 param_config_id: Option<String>,
3053 param_deployed_status: Option<String>,
3054 param_status: Option<String>,
3055 param_limit: Option<i32>,
3056 param_offset: Option<i32>,
3057 param_sort_by: Option<String>,
3058 ) -> Result<models::GetAllBuildsResponse, ApiError> {
3059 let mut url = format!("{}/v1/builds", self.base_path);
3060
3061 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3062
3063 if let Some(all_search) = param_all_search {
3064 query_string.append_pair("all_search", &all_search.to_string());
3065 }
3066 if let Some(docker_image_name) = param_docker_image_name {
3067 query_string.append_pair("docker_image_name", &docker_image_name.to_string());
3068 }
3069 if let Some(config_id) = param_config_id {
3070 query_string.append_pair("config_id", &config_id.to_string());
3071 }
3072 if let Some(deployed_status) = param_deployed_status {
3073 query_string.append_pair("deployed_status", &deployed_status.to_string());
3074 }
3075 if let Some(status) = param_status {
3076 query_string.append_pair("status", &status.to_string());
3077 }
3078 if let Some(limit) = param_limit {
3079 query_string.append_pair("limit", &limit.to_string());
3080 }
3081 if let Some(offset) = param_offset {
3082 query_string.append_pair("offset", &offset.to_string());
3083 }
3084 if let Some(sort_by) = param_sort_by {
3085 query_string.append_pair("sort_by", &sort_by.to_string());
3086 }
3087 let query_string_str = query_string.finish();
3088 if !query_string_str.is_empty() {
3089 url += "?";
3090 url += &query_string_str;
3091 }
3092
3093 let url = match Url::from_str(&url) {
3094 Ok(url) => url,
3095 Err(err) => {
3096 return Err(ApiError::new(
3097 format!("Unable to build URL: {}", err),
3098 SimpleErrorType::Permanent,
3099 ))
3100 }
3101 };
3102
3103 let mut request = self.hyper_client.request(Method::Get, url);
3104 request = request.headers(self.headers.clone());
3105
3106 request
3107 .send()
3108 .map_err(|e| {
3109 ApiError::new(
3110 format!("No response received: {}", e),
3111 SimpleErrorType::Permanent,
3112 )
3113 })
3114 .and_then(|mut response| match response.status.to_u16() {
3115 200 => {
3116 let mut body = Vec::new();
3117 response.read_to_end(&mut body).map_err(|e| {
3118 ApiError::new(
3119 format!("Failed to read response: {}", e),
3120 SimpleErrorType::Temporary,
3121 )
3122 })?;
3123 str::from_utf8(&body)
3124 .map_err(|e| {
3125 ApiError::new(
3126 format!("Response was not valid UTF8: {}", e),
3127 SimpleErrorType::Temporary,
3128 )
3129 })
3130 .and_then(|body| {
3131 serde_json::from_str::<models::GetAllBuildsResponse>(body)
3132 .map_err(|e| e.into())
3133 })
3134 }
3135 code => {
3136 let headers = response.headers.clone();
3137 let mut body = Vec::new();
3138 let result = response.read_to_end(&mut body);
3139 let err_type = match response.status.is_server_error() {
3140 false => SimpleErrorType::Permanent,
3141 true => SimpleErrorType::Temporary,
3142 };
3143 Err(ApiError::new(
3144 format!(
3145 "Unexpected response code {}:\n{:?}\n\n{}",
3146 code,
3147 headers,
3148 match result {
3149 Ok(_) => match str::from_utf8(&body) {
3150 Ok(body) => Cow::from(body),
3151 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3152 },
3153 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3154 }
3155 ),
3156 err_type,
3157 ))
3158 }
3159 })
3160 }
3161
3162 fn get_build(&self, param_build_id: uuid::Uuid) -> Result<models::Build, ApiError> {
3163 let mut url = format!(
3164 "{}/v1/builds/{build_id}",
3165 self.base_path,
3166 build_id = utf8_percent_encode(¶m_build_id.to_string(), ID_ENCODE_SET)
3167 );
3168
3169 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3170
3171 let query_string_str = query_string.finish();
3172 if !query_string_str.is_empty() {
3173 url += "?";
3174 url += &query_string_str;
3175 }
3176
3177 let url = match Url::from_str(&url) {
3178 Ok(url) => url,
3179 Err(err) => {
3180 return Err(ApiError::new(
3181 format!("Unable to build URL: {}", err),
3182 SimpleErrorType::Permanent,
3183 ))
3184 }
3185 };
3186
3187 let mut request = self.hyper_client.request(Method::Get, url);
3188 request = request.headers(self.headers.clone());
3189
3190 request
3191 .send()
3192 .map_err(|e| {
3193 ApiError::new(
3194 format!("No response received: {}", e),
3195 SimpleErrorType::Permanent,
3196 )
3197 })
3198 .and_then(|mut response| match response.status.to_u16() {
3199 200 => {
3200 let mut body = Vec::new();
3201 response.read_to_end(&mut body).map_err(|e| {
3202 ApiError::new(
3203 format!("Failed to read response: {}", e),
3204 SimpleErrorType::Temporary,
3205 )
3206 })?;
3207 str::from_utf8(&body)
3208 .map_err(|e| {
3209 ApiError::new(
3210 format!("Response was not valid UTF8: {}", e),
3211 SimpleErrorType::Temporary,
3212 )
3213 })
3214 .and_then(|body| {
3215 serde_json::from_str::<models::Build>(body).map_err(|e| e.into())
3216 })
3217 }
3218 code => {
3219 let headers = response.headers.clone();
3220 let mut body = Vec::new();
3221 let result = response.read_to_end(&mut body);
3222 let err_type = match response.status.is_server_error() {
3223 false => SimpleErrorType::Permanent,
3224 true => SimpleErrorType::Temporary,
3225 };
3226 Err(ApiError::new(
3227 format!(
3228 "Unexpected response code {}:\n{:?}\n\n{}",
3229 code,
3230 headers,
3231 match result {
3232 Ok(_) => match str::from_utf8(&body) {
3233 Ok(body) => Cow::from(body),
3234 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3235 },
3236 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3237 }
3238 ),
3239 err_type,
3240 ))
3241 }
3242 })
3243 }
3244
3245 fn get_build_deployments(
3246 &self,
3247 param_build_id: uuid::Uuid,
3248 param_status: Option<String>,
3249 param_all_search: Option<String>,
3250 param_sort_by: Option<String>,
3251 param_limit: Option<i32>,
3252 param_offset: Option<i32>,
3253 ) -> Result<models::GetAllBuildDeploymentsResponse, ApiError> {
3254 let mut url = format!(
3255 "{}/v1/builds/deployments/{build_id}",
3256 self.base_path,
3257 build_id = utf8_percent_encode(¶m_build_id.to_string(), ID_ENCODE_SET)
3258 );
3259
3260 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3261
3262 if let Some(status) = param_status {
3263 query_string.append_pair("status", &status.to_string());
3264 }
3265 if let Some(all_search) = param_all_search {
3266 query_string.append_pair("all_search", &all_search.to_string());
3267 }
3268 if let Some(sort_by) = param_sort_by {
3269 query_string.append_pair("sort_by", &sort_by.to_string());
3270 }
3271 if let Some(limit) = param_limit {
3272 query_string.append_pair("limit", &limit.to_string());
3273 }
3274 if let Some(offset) = param_offset {
3275 query_string.append_pair("offset", &offset.to_string());
3276 }
3277 let query_string_str = query_string.finish();
3278 if !query_string_str.is_empty() {
3279 url += "?";
3280 url += &query_string_str;
3281 }
3282
3283 let url = match Url::from_str(&url) {
3284 Ok(url) => url,
3285 Err(err) => {
3286 return Err(ApiError::new(
3287 format!("Unable to build URL: {}", err),
3288 SimpleErrorType::Permanent,
3289 ))
3290 }
3291 };
3292
3293 let mut request = self.hyper_client.request(Method::Get, url);
3294 request = request.headers(self.headers.clone());
3295
3296 request
3297 .send()
3298 .map_err(|e| {
3299 ApiError::new(
3300 format!("No response received: {}", e),
3301 SimpleErrorType::Permanent,
3302 )
3303 })
3304 .and_then(|mut response| match response.status.to_u16() {
3305 200 => {
3306 let mut body = Vec::new();
3307 response.read_to_end(&mut body).map_err(|e| {
3308 ApiError::new(
3309 format!("Failed to read response: {}", e),
3310 SimpleErrorType::Temporary,
3311 )
3312 })?;
3313 str::from_utf8(&body)
3314 .map_err(|e| {
3315 ApiError::new(
3316 format!("Response was not valid UTF8: {}", e),
3317 SimpleErrorType::Temporary,
3318 )
3319 })
3320 .and_then(|body| {
3321 serde_json::from_str::<models::GetAllBuildDeploymentsResponse>(body)
3322 .map_err(|e| e.into())
3323 })
3324 }
3325 code => {
3326 let headers = response.headers.clone();
3327 let mut body = Vec::new();
3328 let result = response.read_to_end(&mut body);
3329 let err_type = match response.status.is_server_error() {
3330 false => SimpleErrorType::Permanent,
3331 true => SimpleErrorType::Temporary,
3332 };
3333 Err(ApiError::new(
3334 format!(
3335 "Unexpected response code {}:\n{:?}\n\n{}",
3336 code,
3337 headers,
3338 match result {
3339 Ok(_) => match str::from_utf8(&body) {
3340 Ok(body) => Cow::from(body),
3341 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3342 },
3343 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3344 }
3345 ),
3346 err_type,
3347 ))
3348 }
3349 })
3350 }
3351
3352 fn update_build(
3353 &self,
3354 param_build_id: uuid::Uuid,
3355 param_body: models::BuildUpdateRequest,
3356 ) -> Result<models::Build, ApiError> {
3357 let mut url = format!(
3358 "{}/v1/builds/{build_id}",
3359 self.base_path,
3360 build_id = utf8_percent_encode(¶m_build_id.to_string(), ID_ENCODE_SET)
3361 );
3362
3363 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3364
3365 let query_string_str = query_string.finish();
3366 if !query_string_str.is_empty() {
3367 url += "?";
3368 url += &query_string_str;
3369 }
3370
3371 let url = match Url::from_str(&url) {
3372 Ok(url) => url,
3373 Err(err) => {
3374 return Err(ApiError::new(
3375 format!("Unable to build URL: {}", err),
3376 SimpleErrorType::Permanent,
3377 ))
3378 }
3379 };
3380
3381 let mut request = self.hyper_client.request(Method::Patch, url);
3382 request = request.headers(self.headers.clone());
3383 let body = serde_json::to_string(¶m_body)
3384 .expect("impossible to fail to serialize")
3385 .into_bytes();
3386 request = request.body(body.as_slice());
3387
3388 request = request.header(ContentType(mimetypes::requests::UPDATE_BUILD.clone()));
3389
3390 request
3391 .send()
3392 .map_err(|e| {
3393 ApiError::new(
3394 format!("No response received: {}", e),
3395 SimpleErrorType::Permanent,
3396 )
3397 })
3398 .and_then(|mut response| match response.status.to_u16() {
3399 200 => {
3400 let mut body = Vec::new();
3401 response.read_to_end(&mut body).map_err(|e| {
3402 ApiError::new(
3403 format!("Failed to read response: {}", e),
3404 SimpleErrorType::Temporary,
3405 )
3406 })?;
3407 str::from_utf8(&body)
3408 .map_err(|e| {
3409 ApiError::new(
3410 format!("Response was not valid UTF8: {}", e),
3411 SimpleErrorType::Temporary,
3412 )
3413 })
3414 .and_then(|body| {
3415 serde_json::from_str::<models::Build>(body).map_err(|e| e.into())
3416 })
3417 }
3418 code => {
3419 let headers = response.headers.clone();
3420 let mut body = Vec::new();
3421 let result = response.read_to_end(&mut body);
3422 let err_type = match response.status.is_server_error() {
3423 false => SimpleErrorType::Permanent,
3424 true => SimpleErrorType::Temporary,
3425 };
3426 Err(ApiError::new(
3427 format!(
3428 "Unexpected response code {}:\n{:?}\n\n{}",
3429 code,
3430 headers,
3431 match result {
3432 Ok(_) => match str::from_utf8(&body) {
3433 Ok(body) => Cow::from(body),
3434 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3435 },
3436 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3437 }
3438 ),
3439 err_type,
3440 ))
3441 }
3442 })
3443 }
3444}
3445
3446impl CertificateApi for Client {
3447 type Error = ApiError;
3448
3449 fn get_certificate(&self, param_cert_id: uuid::Uuid) -> Result<models::Certificate, ApiError> {
3450 let mut url = format!(
3451 "{}/v1/certificates/{cert_id}",
3452 self.base_path,
3453 cert_id = utf8_percent_encode(¶m_cert_id.to_string(), ID_ENCODE_SET)
3454 );
3455
3456 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3457
3458 let query_string_str = query_string.finish();
3459 if !query_string_str.is_empty() {
3460 url += "?";
3461 url += &query_string_str;
3462 }
3463
3464 let url = match Url::from_str(&url) {
3465 Ok(url) => url,
3466 Err(err) => {
3467 return Err(ApiError::new(
3468 format!("Unable to build URL: {}", err),
3469 SimpleErrorType::Permanent,
3470 ))
3471 }
3472 };
3473
3474 let mut request = self.hyper_client.request(Method::Get, url);
3475 request = request.headers(self.headers.clone());
3476
3477 request
3478 .send()
3479 .map_err(|e| {
3480 ApiError::new(
3481 format!("No response received: {}", e),
3482 SimpleErrorType::Permanent,
3483 )
3484 })
3485 .and_then(|mut response| match response.status.to_u16() {
3486 200 => {
3487 let mut body = Vec::new();
3488 response.read_to_end(&mut body).map_err(|e| {
3489 ApiError::new(
3490 format!("Failed to read response: {}", e),
3491 SimpleErrorType::Temporary,
3492 )
3493 })?;
3494 str::from_utf8(&body)
3495 .map_err(|e| {
3496 ApiError::new(
3497 format!("Response was not valid UTF8: {}", e),
3498 SimpleErrorType::Temporary,
3499 )
3500 })
3501 .and_then(|body| {
3502 serde_json::from_str::<models::Certificate>(body).map_err(|e| e.into())
3503 })
3504 }
3505 code => {
3506 let headers = response.headers.clone();
3507 let mut body = Vec::new();
3508 let result = response.read_to_end(&mut body);
3509 let err_type = match response.status.is_server_error() {
3510 false => SimpleErrorType::Permanent,
3511 true => SimpleErrorType::Temporary,
3512 };
3513 Err(ApiError::new(
3514 format!(
3515 "Unexpected response code {}:\n{:?}\n\n{}",
3516 code,
3517 headers,
3518 match result {
3519 Ok(_) => match str::from_utf8(&body) {
3520 Ok(body) => Cow::from(body),
3521 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3522 },
3523 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3524 }
3525 ),
3526 err_type,
3527 ))
3528 }
3529 })
3530 }
3531
3532 fn new_certificate(
3533 &self,
3534 param_body: models::NewCertificateRequest,
3535 ) -> Result<models::TaskResult, ApiError> {
3536 let mut url = format!("{}/v1/certificates", self.base_path);
3537
3538 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3539
3540 let query_string_str = query_string.finish();
3541 if !query_string_str.is_empty() {
3542 url += "?";
3543 url += &query_string_str;
3544 }
3545
3546 let url = match Url::from_str(&url) {
3547 Ok(url) => url,
3548 Err(err) => {
3549 return Err(ApiError::new(
3550 format!("Unable to build URL: {}", err),
3551 SimpleErrorType::Permanent,
3552 ))
3553 }
3554 };
3555
3556 let mut request = self.hyper_client.request(Method::Post, url);
3557 request = request.headers(self.headers.clone());
3558 let body = serde_json::to_string(¶m_body)
3559 .expect("impossible to fail to serialize")
3560 .into_bytes();
3561 request = request.body(body.as_slice());
3562
3563 request = request.header(ContentType(mimetypes::requests::NEW_CERTIFICATE.clone()));
3564
3565 request
3566 .send()
3567 .map_err(|e| {
3568 ApiError::new(
3569 format!("No response received: {}", e),
3570 SimpleErrorType::Permanent,
3571 )
3572 })
3573 .and_then(|mut response| match response.status.to_u16() {
3574 200 => {
3575 let mut body = Vec::new();
3576 response.read_to_end(&mut body).map_err(|e| {
3577 ApiError::new(
3578 format!("Failed to read response: {}", e),
3579 SimpleErrorType::Temporary,
3580 )
3581 })?;
3582 str::from_utf8(&body)
3583 .map_err(|e| {
3584 ApiError::new(
3585 format!("Response was not valid UTF8: {}", e),
3586 SimpleErrorType::Temporary,
3587 )
3588 })
3589 .and_then(|body| {
3590 serde_json::from_str::<models::TaskResult>(body).map_err(|e| e.into())
3591 })
3592 }
3593 code => {
3594 let headers = response.headers.clone();
3595 let mut body = Vec::new();
3596 let result = response.read_to_end(&mut body);
3597 let err_type = match response.status.is_server_error() {
3598 false => SimpleErrorType::Permanent,
3599 true => SimpleErrorType::Temporary,
3600 };
3601 Err(ApiError::new(
3602 format!(
3603 "Unexpected response code {}:\n{:?}\n\n{}",
3604 code,
3605 headers,
3606 match result {
3607 Ok(_) => match str::from_utf8(&body) {
3608 Ok(body) => Cow::from(body),
3609 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3610 },
3611 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3612 }
3613 ),
3614 err_type,
3615 ))
3616 }
3617 })
3618 }
3619}
3620
3621impl DatasetApi for Client {
3622 type Error = ApiError;
3623
3624 fn create_dataset(
3625 &self,
3626 param_body: models::CreateDatasetRequest,
3627 ) -> Result<models::Dataset, ApiError> {
3628 let mut url = format!("{}/v1/datasets", self.base_path);
3629
3630 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3631
3632 let query_string_str = query_string.finish();
3633 if !query_string_str.is_empty() {
3634 url += "?";
3635 url += &query_string_str;
3636 }
3637
3638 let url = match Url::from_str(&url) {
3639 Ok(url) => url,
3640 Err(err) => {
3641 return Err(ApiError::new(
3642 format!("Unable to build URL: {}", err),
3643 SimpleErrorType::Permanent,
3644 ))
3645 }
3646 };
3647
3648 let mut request = self.hyper_client.request(Method::Post, url);
3649 request = request.headers(self.headers.clone());
3650 let body = serde_json::to_string(¶m_body)
3652 .expect("impossible to fail to serialize")
3653 .into_bytes();
3654 request = request.body(body.as_slice());
3655
3656 request = request.header(ContentType(mimetypes::requests::CREATE_DATASET.clone()));
3657
3658 request
3659 .send()
3660 .map_err(|e| {
3661 ApiError::new(
3662 format!("No response received: {}", e),
3663 SimpleErrorType::Permanent,
3664 )
3665 })
3666 .and_then(|mut response| match response.status.to_u16() {
3667 200 => {
3668 let mut body = Vec::new();
3669 response.read_to_end(&mut body).map_err(|e| {
3670 ApiError::new(
3671 format!("Failed to read response: {}", e),
3672 SimpleErrorType::Temporary,
3673 )
3674 })?;
3675 str::from_utf8(&body)
3676 .map_err(|e| {
3677 ApiError::new(
3678 format!("Response was not valid UTF8: {}", e),
3679 SimpleErrorType::Temporary,
3680 )
3681 })
3682 .and_then(|body| {
3683 serde_json::from_str::<models::Dataset>(body).map_err(|e| e.into())
3684 })
3685 }
3686 code => {
3687 let headers = response.headers.clone();
3688 let mut body = Vec::new();
3689 let result = response.read_to_end(&mut body);
3690 let err_type = match response.status.is_server_error() {
3691 false => SimpleErrorType::Permanent,
3692 true => SimpleErrorType::Temporary,
3693 };
3694 Err(ApiError::new(
3695 format!(
3696 "Unexpected response code {}:\n{:?}\n\n{}",
3697 code,
3698 headers,
3699 match result {
3700 Ok(_) => match str::from_utf8(&body) {
3701 Ok(body) => Cow::from(body),
3702 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3703 },
3704 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3705 }
3706 ),
3707 err_type,
3708 ))
3709 }
3710 })
3711 }
3712
3713 fn delete_dataset(&self, param_dataset_id: uuid::Uuid) -> Result<(), ApiError> {
3714 let mut url = format!(
3715 "{}/v1/datasets/{dataset_id}",
3716 self.base_path,
3717 dataset_id = utf8_percent_encode(¶m_dataset_id.to_string(), ID_ENCODE_SET)
3718 );
3719
3720 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3721
3722 let query_string_str = query_string.finish();
3723 if !query_string_str.is_empty() {
3724 url += "?";
3725 url += &query_string_str;
3726 }
3727
3728 let url = match Url::from_str(&url) {
3729 Ok(url) => url,
3730 Err(err) => {
3731 return Err(ApiError::new(
3732 format!("Unable to build URL: {}", err),
3733 SimpleErrorType::Permanent,
3734 ))
3735 }
3736 };
3737
3738 let mut request = self.hyper_client.request(Method::Delete, url);
3739 request = request.headers(self.headers.clone());
3740
3741 request
3742 .send()
3743 .map_err(|e| {
3744 ApiError::new(
3745 format!("No response received: {}", e),
3746 SimpleErrorType::Permanent,
3747 )
3748 })
3749 .and_then(|mut response| match response.status.to_u16() {
3750 204 => {
3751 let mut body = Vec::new();
3752 response.read_to_end(&mut body).map_err(|e| {
3753 ApiError::new(
3754 format!("Failed to read response: {}", e),
3755 SimpleErrorType::Temporary,
3756 )
3757 })?;
3758
3759 Ok(())
3760 }
3761 code => {
3762 let headers = response.headers.clone();
3763 let mut body = Vec::new();
3764 let result = response.read_to_end(&mut body);
3765 let err_type = match response.status.is_server_error() {
3766 false => SimpleErrorType::Permanent,
3767 true => SimpleErrorType::Temporary,
3768 };
3769 Err(ApiError::new(
3770 format!(
3771 "Unexpected response code {}:\n{:?}\n\n{}",
3772 code,
3773 headers,
3774 match result {
3775 Ok(_) => match str::from_utf8(&body) {
3776 Ok(body) => Cow::from(body),
3777 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3778 },
3779 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3780 }
3781 ),
3782 err_type,
3783 ))
3784 }
3785 })
3786 }
3787
3788 fn get_all_datasets(
3789 &self,
3790 param_name: Option<String>,
3791 param_description: Option<String>,
3792 param_limit: Option<i32>,
3793 param_offset: Option<i32>,
3794 ) -> Result<models::GetAllDatasetsResponse, ApiError> {
3795 let mut url = format!("{}/v1/datasets", self.base_path);
3796
3797 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3798
3799 if let Some(name) = param_name {
3800 query_string.append_pair("name", &name.to_string());
3801 }
3802 if let Some(description) = param_description {
3803 query_string.append_pair("description", &description.to_string());
3804 }
3805 if let Some(limit) = param_limit {
3806 query_string.append_pair("limit", &limit.to_string());
3807 }
3808 if let Some(offset) = param_offset {
3809 query_string.append_pair("offset", &offset.to_string());
3810 }
3811 let query_string_str = query_string.finish();
3812 if !query_string_str.is_empty() {
3813 url += "?";
3814 url += &query_string_str;
3815 }
3816
3817 let url = match Url::from_str(&url) {
3818 Ok(url) => url,
3819 Err(err) => {
3820 return Err(ApiError::new(
3821 format!("Unable to build URL: {}", err),
3822 SimpleErrorType::Permanent,
3823 ))
3824 }
3825 };
3826
3827 let mut request = self.hyper_client.request(Method::Get, url);
3828 request = request.headers(self.headers.clone());
3829
3830 request
3831 .send()
3832 .map_err(|e| {
3833 ApiError::new(
3834 format!("No response received: {}", e),
3835 SimpleErrorType::Permanent,
3836 )
3837 })
3838 .and_then(|mut response| match response.status.to_u16() {
3839 200 => {
3840 let mut body = Vec::new();
3841 response.read_to_end(&mut body).map_err(|e| {
3842 ApiError::new(
3843 format!("Failed to read response: {}", e),
3844 SimpleErrorType::Temporary,
3845 )
3846 })?;
3847 str::from_utf8(&body)
3848 .map_err(|e| {
3849 ApiError::new(
3850 format!("Response was not valid UTF8: {}", e),
3851 SimpleErrorType::Temporary,
3852 )
3853 })
3854 .and_then(|body| {
3855 serde_json::from_str::<models::GetAllDatasetsResponse>(body)
3856 .map_err(|e| e.into())
3857 })
3858 }
3859 code => {
3860 let headers = response.headers.clone();
3861 let mut body = Vec::new();
3862 let result = response.read_to_end(&mut body);
3863 let err_type = match response.status.is_server_error() {
3864 false => SimpleErrorType::Permanent,
3865 true => SimpleErrorType::Temporary,
3866 };
3867 Err(ApiError::new(
3868 format!(
3869 "Unexpected response code {}:\n{:?}\n\n{}",
3870 code,
3871 headers,
3872 match result {
3873 Ok(_) => match str::from_utf8(&body) {
3874 Ok(body) => Cow::from(body),
3875 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3876 },
3877 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3878 }
3879 ),
3880 err_type,
3881 ))
3882 }
3883 })
3884 }
3885
3886 fn get_dataset(&self, param_dataset_id: uuid::Uuid) -> Result<models::Dataset, ApiError> {
3887 let mut url = format!(
3888 "{}/v1/datasets/{dataset_id}",
3889 self.base_path,
3890 dataset_id = utf8_percent_encode(¶m_dataset_id.to_string(), ID_ENCODE_SET)
3891 );
3892
3893 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3894
3895 let query_string_str = query_string.finish();
3896 if !query_string_str.is_empty() {
3897 url += "?";
3898 url += &query_string_str;
3899 }
3900
3901 let url = match Url::from_str(&url) {
3902 Ok(url) => url,
3903 Err(err) => {
3904 return Err(ApiError::new(
3905 format!("Unable to build URL: {}", err),
3906 SimpleErrorType::Permanent,
3907 ))
3908 }
3909 };
3910
3911 let mut request = self.hyper_client.request(Method::Get, url);
3912 request = request.headers(self.headers.clone());
3913
3914 request
3915 .send()
3916 .map_err(|e| {
3917 ApiError::new(
3918 format!("No response received: {}", e),
3919 SimpleErrorType::Permanent,
3920 )
3921 })
3922 .and_then(|mut response| match response.status.to_u16() {
3923 200 => {
3924 let mut body = Vec::new();
3925 response.read_to_end(&mut body).map_err(|e| {
3926 ApiError::new(
3927 format!("Failed to read response: {}", e),
3928 SimpleErrorType::Temporary,
3929 )
3930 })?;
3931 str::from_utf8(&body)
3932 .map_err(|e| {
3933 ApiError::new(
3934 format!("Response was not valid UTF8: {}", e),
3935 SimpleErrorType::Temporary,
3936 )
3937 })
3938 .and_then(|body| {
3939 serde_json::from_str::<models::Dataset>(body).map_err(|e| e.into())
3940 })
3941 }
3942 code => {
3943 let headers = response.headers.clone();
3944 let mut body = Vec::new();
3945 let result = response.read_to_end(&mut body);
3946 let err_type = match response.status.is_server_error() {
3947 false => SimpleErrorType::Permanent,
3948 true => SimpleErrorType::Temporary,
3949 };
3950 Err(ApiError::new(
3951 format!(
3952 "Unexpected response code {}:\n{:?}\n\n{}",
3953 code,
3954 headers,
3955 match result {
3956 Ok(_) => match str::from_utf8(&body) {
3957 Ok(body) => Cow::from(body),
3958 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
3959 },
3960 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
3961 }
3962 ),
3963 err_type,
3964 ))
3965 }
3966 })
3967 }
3968
3969 fn update_dataset(
3970 &self,
3971 param_dataset_id: uuid::Uuid,
3972 param_body: models::DatasetUpdateRequest,
3973 ) -> Result<models::Dataset, ApiError> {
3974 let mut url = format!(
3975 "{}/v1/datasets/{dataset_id}",
3976 self.base_path,
3977 dataset_id = utf8_percent_encode(¶m_dataset_id.to_string(), ID_ENCODE_SET)
3978 );
3979
3980 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
3981
3982 let query_string_str = query_string.finish();
3983 if !query_string_str.is_empty() {
3984 url += "?";
3985 url += &query_string_str;
3986 }
3987
3988 let url = match Url::from_str(&url) {
3989 Ok(url) => url,
3990 Err(err) => {
3991 return Err(ApiError::new(
3992 format!("Unable to build URL: {}", err),
3993 SimpleErrorType::Permanent,
3994 ))
3995 }
3996 };
3997
3998 let mut request = self.hyper_client.request(Method::Patch, url);
3999 request = request.headers(self.headers.clone());
4000 let body = serde_json::to_string(¶m_body)
4001 .expect("impossible to fail to serialize")
4002 .into_bytes();
4003 request = request.body(body.as_slice());
4004
4005 request = request.header(ContentType(mimetypes::requests::UPDATE_DATASET.clone()));
4006
4007 request
4008 .send()
4009 .map_err(|e| {
4010 ApiError::new(
4011 format!("No response received: {}", e),
4012 SimpleErrorType::Permanent,
4013 )
4014 })
4015 .and_then(|mut response| match response.status.to_u16() {
4016 200 => {
4017 let mut body = Vec::new();
4018 response.read_to_end(&mut body).map_err(|e| {
4019 ApiError::new(
4020 format!("Failed to read response: {}", e),
4021 SimpleErrorType::Temporary,
4022 )
4023 })?;
4024 str::from_utf8(&body)
4025 .map_err(|e| {
4026 ApiError::new(
4027 format!("Response was not valid UTF8: {}", e),
4028 SimpleErrorType::Temporary,
4029 )
4030 })
4031 .and_then(|body| {
4032 serde_json::from_str::<models::Dataset>(body).map_err(|e| e.into())
4033 })
4034 }
4035 code => {
4036 let headers = response.headers.clone();
4037 let mut body = Vec::new();
4038 let result = response.read_to_end(&mut body);
4039 let err_type = match response.status.is_server_error() {
4040 false => SimpleErrorType::Permanent,
4041 true => SimpleErrorType::Temporary,
4042 };
4043 Err(ApiError::new(
4044 format!(
4045 "Unexpected response code {}:\n{:?}\n\n{}",
4046 code,
4047 headers,
4048 match result {
4049 Ok(_) => match str::from_utf8(&body) {
4050 Ok(body) => Cow::from(body),
4051 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4052 },
4053 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4054 }
4055 ),
4056 err_type,
4057 ))
4058 }
4059 })
4060 }
4061}
4062
4063impl NodeApi for Client {
4064 type Error = ApiError;
4065
4066 fn deactivate_node(&self, param_node_id: uuid::Uuid) -> Result<(), ApiError> {
4067 let mut url = format!(
4068 "{}/v1/nodes/{node_id}/deactivate",
4069 self.base_path,
4070 node_id = utf8_percent_encode(¶m_node_id.to_string(), ID_ENCODE_SET)
4071 );
4072
4073 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4074
4075 let query_string_str = query_string.finish();
4076 if !query_string_str.is_empty() {
4077 url += "?";
4078 url += &query_string_str;
4079 }
4080
4081 let url = match Url::from_str(&url) {
4082 Ok(url) => url,
4083 Err(err) => {
4084 return Err(ApiError::new(
4085 format!("Unable to build URL: {}", err),
4086 SimpleErrorType::Permanent,
4087 ))
4088 }
4089 };
4090
4091 let mut request = self.hyper_client.request(Method::Post, url);
4092 request = request.headers(self.headers.clone());
4093
4094 request
4095 .send()
4096 .map_err(|e| {
4097 ApiError::new(
4098 format!("No response received: {}", e),
4099 SimpleErrorType::Permanent,
4100 )
4101 })
4102 .and_then(|mut response| match response.status.to_u16() {
4103 204 => {
4104 let mut body = Vec::new();
4105 response.read_to_end(&mut body).map_err(|e| {
4106 ApiError::new(
4107 format!("Failed to read response: {}", e),
4108 SimpleErrorType::Temporary,
4109 )
4110 })?;
4111
4112 Ok(())
4113 }
4114 code => {
4115 let headers = response.headers.clone();
4116 let mut body = Vec::new();
4117 let result = response.read_to_end(&mut body);
4118 let err_type = match response.status.is_server_error() {
4119 false => SimpleErrorType::Permanent,
4120 true => SimpleErrorType::Temporary,
4121 };
4122 Err(ApiError::new(
4123 format!(
4124 "Unexpected response code {}:\n{:?}\n\n{}",
4125 code,
4126 headers,
4127 match result {
4128 Ok(_) => match str::from_utf8(&body) {
4129 Ok(body) => Cow::from(body),
4130 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4131 },
4132 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4133 }
4134 ),
4135 err_type,
4136 ))
4137 }
4138 })
4139 }
4140
4141 fn get_all_nodes(
4142 &self,
4143 param_name: Option<String>,
4144 param_description: Option<String>,
4145 param_sgx_version: Option<String>,
4146 param_all_search: Option<String>,
4147 param_status: Option<String>,
4148 param_limit: Option<i32>,
4149 param_offset: Option<i32>,
4150 param_sort_by: Option<String>,
4151 ) -> Result<models::GetAllNodesResponse, ApiError> {
4152 let mut url = format!("{}/v1/nodes", self.base_path);
4153
4154 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4155
4156 if let Some(name) = param_name {
4157 query_string.append_pair("name", &name.to_string());
4158 }
4159 if let Some(description) = param_description {
4160 query_string.append_pair("description", &description.to_string());
4161 }
4162 if let Some(sgx_version) = param_sgx_version {
4163 query_string.append_pair("sgx_version", &sgx_version.to_string());
4164 }
4165 if let Some(all_search) = param_all_search {
4166 query_string.append_pair("all_search", &all_search.to_string());
4167 }
4168 if let Some(status) = param_status {
4169 query_string.append_pair("status", &status.to_string());
4170 }
4171 if let Some(limit) = param_limit {
4172 query_string.append_pair("limit", &limit.to_string());
4173 }
4174 if let Some(offset) = param_offset {
4175 query_string.append_pair("offset", &offset.to_string());
4176 }
4177 if let Some(sort_by) = param_sort_by {
4178 query_string.append_pair("sort_by", &sort_by.to_string());
4179 }
4180 let query_string_str = query_string.finish();
4181 if !query_string_str.is_empty() {
4182 url += "?";
4183 url += &query_string_str;
4184 }
4185
4186 let url = match Url::from_str(&url) {
4187 Ok(url) => url,
4188 Err(err) => {
4189 return Err(ApiError::new(
4190 format!("Unable to build URL: {}", err),
4191 SimpleErrorType::Permanent,
4192 ))
4193 }
4194 };
4195
4196 let mut request = self.hyper_client.request(Method::Get, url);
4197 request = request.headers(self.headers.clone());
4198
4199 request
4200 .send()
4201 .map_err(|e| {
4202 ApiError::new(
4203 format!("No response received: {}", e),
4204 SimpleErrorType::Permanent,
4205 )
4206 })
4207 .and_then(|mut response| match response.status.to_u16() {
4208 200 => {
4209 let mut body = Vec::new();
4210 response.read_to_end(&mut body).map_err(|e| {
4211 ApiError::new(
4212 format!("Failed to read response: {}", e),
4213 SimpleErrorType::Temporary,
4214 )
4215 })?;
4216 str::from_utf8(&body)
4217 .map_err(|e| {
4218 ApiError::new(
4219 format!("Response was not valid UTF8: {}", e),
4220 SimpleErrorType::Temporary,
4221 )
4222 })
4223 .and_then(|body| {
4224 serde_json::from_str::<models::GetAllNodesResponse>(body)
4225 .map_err(|e| e.into())
4226 })
4227 }
4228 code => {
4229 let headers = response.headers.clone();
4230 let mut body = Vec::new();
4231 let result = response.read_to_end(&mut body);
4232 let err_type = match response.status.is_server_error() {
4233 false => SimpleErrorType::Permanent,
4234 true => SimpleErrorType::Temporary,
4235 };
4236 Err(ApiError::new(
4237 format!(
4238 "Unexpected response code {}:\n{:?}\n\n{}",
4239 code,
4240 headers,
4241 match result {
4242 Ok(_) => match str::from_utf8(&body) {
4243 Ok(body) => Cow::from(body),
4244 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4245 },
4246 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4247 }
4248 ),
4249 err_type,
4250 ))
4251 }
4252 })
4253 }
4254
4255 fn get_node(&self, param_node_id: uuid::Uuid) -> Result<models::Node, ApiError> {
4256 let mut url = format!(
4257 "{}/v1/nodes/{node_id}",
4258 self.base_path,
4259 node_id = utf8_percent_encode(¶m_node_id.to_string(), ID_ENCODE_SET)
4260 );
4261
4262 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4263
4264 let query_string_str = query_string.finish();
4265 if !query_string_str.is_empty() {
4266 url += "?";
4267 url += &query_string_str;
4268 }
4269
4270 let url = match Url::from_str(&url) {
4271 Ok(url) => url,
4272 Err(err) => {
4273 return Err(ApiError::new(
4274 format!("Unable to build URL: {}", err),
4275 SimpleErrorType::Permanent,
4276 ))
4277 }
4278 };
4279
4280 let mut request = self.hyper_client.request(Method::Get, url);
4281 request = request.headers(self.headers.clone());
4282
4283 request
4284 .send()
4285 .map_err(|e| {
4286 ApiError::new(
4287 format!("No response received: {}", e),
4288 SimpleErrorType::Permanent,
4289 )
4290 })
4291 .and_then(|mut response| match response.status.to_u16() {
4292 200 => {
4293 let mut body = Vec::new();
4294 response.read_to_end(&mut body).map_err(|e| {
4295 ApiError::new(
4296 format!("Failed to read response: {}", e),
4297 SimpleErrorType::Temporary,
4298 )
4299 })?;
4300 str::from_utf8(&body)
4301 .map_err(|e| {
4302 ApiError::new(
4303 format!("Response was not valid UTF8: {}", e),
4304 SimpleErrorType::Temporary,
4305 )
4306 })
4307 .and_then(|body| {
4308 serde_json::from_str::<models::Node>(body).map_err(|e| e.into())
4309 })
4310 }
4311 code => {
4312 let headers = response.headers.clone();
4313 let mut body = Vec::new();
4314 let result = response.read_to_end(&mut body);
4315 let err_type = match response.status.is_server_error() {
4316 false => SimpleErrorType::Permanent,
4317 true => SimpleErrorType::Temporary,
4318 };
4319 Err(ApiError::new(
4320 format!(
4321 "Unexpected response code {}:\n{:?}\n\n{}",
4322 code,
4323 headers,
4324 match result {
4325 Ok(_) => match str::from_utf8(&body) {
4326 Ok(body) => Cow::from(body),
4327 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4328 },
4329 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4330 }
4331 ),
4332 err_type,
4333 ))
4334 }
4335 })
4336 }
4337
4338 fn get_node_certificate(
4339 &self,
4340 param_node_id: uuid::Uuid,
4341 ) -> Result<models::Certificate, ApiError> {
4342 let mut url = format!(
4343 "{}/v1/nodes/{node_id}/certificate",
4344 self.base_path,
4345 node_id = utf8_percent_encode(¶m_node_id.to_string(), ID_ENCODE_SET)
4346 );
4347
4348 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4349
4350 let query_string_str = query_string.finish();
4351 if !query_string_str.is_empty() {
4352 url += "?";
4353 url += &query_string_str;
4354 }
4355
4356 let url = match Url::from_str(&url) {
4357 Ok(url) => url,
4358 Err(err) => {
4359 return Err(ApiError::new(
4360 format!("Unable to build URL: {}", err),
4361 SimpleErrorType::Permanent,
4362 ))
4363 }
4364 };
4365
4366 let mut request = self.hyper_client.request(Method::Get, url);
4367 request = request.headers(self.headers.clone());
4368
4369 request
4370 .send()
4371 .map_err(|e| {
4372 ApiError::new(
4373 format!("No response received: {}", e),
4374 SimpleErrorType::Permanent,
4375 )
4376 })
4377 .and_then(|mut response| match response.status.to_u16() {
4378 200 => {
4379 let mut body = Vec::new();
4380 response.read_to_end(&mut body).map_err(|e| {
4381 ApiError::new(
4382 format!("Failed to read response: {}", e),
4383 SimpleErrorType::Temporary,
4384 )
4385 })?;
4386 str::from_utf8(&body)
4387 .map_err(|e| {
4388 ApiError::new(
4389 format!("Response was not valid UTF8: {}", e),
4390 SimpleErrorType::Temporary,
4391 )
4392 })
4393 .and_then(|body| {
4394 serde_json::from_str::<models::Certificate>(body).map_err(|e| e.into())
4395 })
4396 }
4397 code => {
4398 let headers = response.headers.clone();
4399 let mut body = Vec::new();
4400 let result = response.read_to_end(&mut body);
4401 let err_type = match response.status.is_server_error() {
4402 false => SimpleErrorType::Permanent,
4403 true => SimpleErrorType::Temporary,
4404 };
4405 Err(ApiError::new(
4406 format!(
4407 "Unexpected response code {}:\n{:?}\n\n{}",
4408 code,
4409 headers,
4410 match result {
4411 Ok(_) => match str::from_utf8(&body) {
4412 Ok(body) => Cow::from(body),
4413 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4414 },
4415 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4416 }
4417 ),
4418 err_type,
4419 ))
4420 }
4421 })
4422 }
4423
4424 fn get_node_certificate_details(
4425 &self,
4426 param_node_id: uuid::Uuid,
4427 ) -> Result<models::CertificateDetails, ApiError> {
4428 let mut url = format!(
4429 "{}/v1/nodes/{node_id}/certificate-details",
4430 self.base_path,
4431 node_id = utf8_percent_encode(¶m_node_id.to_string(), ID_ENCODE_SET)
4432 );
4433
4434 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4435
4436 let query_string_str = query_string.finish();
4437 if !query_string_str.is_empty() {
4438 url += "?";
4439 url += &query_string_str;
4440 }
4441
4442 let url = match Url::from_str(&url) {
4443 Ok(url) => url,
4444 Err(err) => {
4445 return Err(ApiError::new(
4446 format!("Unable to build URL: {}", err),
4447 SimpleErrorType::Permanent,
4448 ))
4449 }
4450 };
4451
4452 let mut request = self.hyper_client.request(Method::Get, url);
4453 request = request.headers(self.headers.clone());
4454
4455 request
4456 .send()
4457 .map_err(|e| {
4458 ApiError::new(
4459 format!("No response received: {}", e),
4460 SimpleErrorType::Permanent,
4461 )
4462 })
4463 .and_then(|mut response| match response.status.to_u16() {
4464 200 => {
4465 let mut body = Vec::new();
4466 response.read_to_end(&mut body).map_err(|e| {
4467 ApiError::new(
4468 format!("Failed to read response: {}", e),
4469 SimpleErrorType::Temporary,
4470 )
4471 })?;
4472 str::from_utf8(&body)
4473 .map_err(|e| {
4474 ApiError::new(
4475 format!("Response was not valid UTF8: {}", e),
4476 SimpleErrorType::Temporary,
4477 )
4478 })
4479 .and_then(|body| {
4480 serde_json::from_str::<models::CertificateDetails>(body)
4481 .map_err(|e| e.into())
4482 })
4483 }
4484 code => {
4485 let headers = response.headers.clone();
4486 let mut body = Vec::new();
4487 let result = response.read_to_end(&mut body);
4488 let err_type = match response.status.is_server_error() {
4489 false => SimpleErrorType::Permanent,
4490 true => SimpleErrorType::Temporary,
4491 };
4492 Err(ApiError::new(
4493 format!(
4494 "Unexpected response code {}:\n{:?}\n\n{}",
4495 code,
4496 headers,
4497 match result {
4498 Ok(_) => match str::from_utf8(&body) {
4499 Ok(body) => Cow::from(body),
4500 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4501 },
4502 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4503 }
4504 ),
4505 err_type,
4506 ))
4507 }
4508 })
4509 }
4510
4511 fn get_nodes_unique_labels(&self) -> Result<models::LabelsCount, ApiError> {
4512 let mut url = format!("{}/v1/nodes/unique_labels/count", self.base_path);
4513
4514 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4515
4516 let query_string_str = query_string.finish();
4517 if !query_string_str.is_empty() {
4518 url += "?";
4519 url += &query_string_str;
4520 }
4521
4522 let url = match Url::from_str(&url) {
4523 Ok(url) => url,
4524 Err(err) => {
4525 return Err(ApiError::new(
4526 format!("Unable to build URL: {}", err),
4527 SimpleErrorType::Permanent,
4528 ))
4529 }
4530 };
4531
4532 let mut request = self.hyper_client.request(Method::Get, url);
4533 request = request.headers(self.headers.clone());
4534
4535 request
4536 .send()
4537 .map_err(|e| {
4538 ApiError::new(
4539 format!("No response received: {}", e),
4540 SimpleErrorType::Permanent,
4541 )
4542 })
4543 .and_then(|mut response| match response.status.to_u16() {
4544 200 => {
4545 let mut body = Vec::new();
4546 response.read_to_end(&mut body).map_err(|e| {
4547 ApiError::new(
4548 format!("Failed to read response: {}", e),
4549 SimpleErrorType::Temporary,
4550 )
4551 })?;
4552 str::from_utf8(&body)
4553 .map_err(|e| {
4554 ApiError::new(
4555 format!("Response was not valid UTF8: {}", e),
4556 SimpleErrorType::Temporary,
4557 )
4558 })
4559 .and_then(|body| {
4560 serde_json::from_str::<models::LabelsCount>(body).map_err(|e| e.into())
4561 })
4562 }
4563 code => {
4564 let headers = response.headers.clone();
4565 let mut body = Vec::new();
4566 let result = response.read_to_end(&mut body);
4567 let err_type = match response.status.is_server_error() {
4568 false => SimpleErrorType::Permanent,
4569 true => SimpleErrorType::Temporary,
4570 };
4571 Err(ApiError::new(
4572 format!(
4573 "Unexpected response code {}:\n{:?}\n\n{}",
4574 code,
4575 headers,
4576 match result {
4577 Ok(_) => match str::from_utf8(&body) {
4578 Ok(body) => Cow::from(body),
4579 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4580 },
4581 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4582 }
4583 ),
4584 err_type,
4585 ))
4586 }
4587 })
4588 }
4589
4590 fn provision_node(
4591 &self,
4592 param_body: models::NodeProvisionRequest,
4593 ) -> Result<models::TaskResult, ApiError> {
4594 let mut url = format!("{}/v1/nodes", self.base_path);
4595
4596 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4597
4598 let query_string_str = query_string.finish();
4599 if !query_string_str.is_empty() {
4600 url += "?";
4601 url += &query_string_str;
4602 }
4603
4604 let url = match Url::from_str(&url) {
4605 Ok(url) => url,
4606 Err(err) => {
4607 return Err(ApiError::new(
4608 format!("Unable to build URL: {}", err),
4609 SimpleErrorType::Permanent,
4610 ))
4611 }
4612 };
4613
4614 let mut request = self.hyper_client.request(Method::Post, url);
4615 request = request.headers(self.headers.clone());
4616 let body = serde_json::to_string(¶m_body)
4617 .expect("impossible to fail to serialize")
4618 .into_bytes();
4619 request = request.body(body.as_slice());
4620
4621 request = request.header(ContentType(mimetypes::requests::PROVISION_NODE.clone()));
4622
4623 request
4624 .send()
4625 .map_err(|e| {
4626 ApiError::new(
4627 format!("No response received: {}", e),
4628 SimpleErrorType::Permanent,
4629 )
4630 })
4631 .and_then(|mut response| match response.status.to_u16() {
4632 200 => {
4633 let mut body = Vec::new();
4634 response.read_to_end(&mut body).map_err(|e| {
4635 ApiError::new(
4636 format!("Failed to read response: {}", e),
4637 SimpleErrorType::Temporary,
4638 )
4639 })?;
4640 str::from_utf8(&body)
4641 .map_err(|e| {
4642 ApiError::new(
4643 format!("Response was not valid UTF8: {}", e),
4644 SimpleErrorType::Temporary,
4645 )
4646 })
4647 .and_then(|body| {
4648 serde_json::from_str::<models::TaskResult>(body).map_err(|e| e.into())
4649 })
4650 }
4651 code => {
4652 let headers = response.headers.clone();
4653 let mut body = Vec::new();
4654 let result = response.read_to_end(&mut body);
4655 let err_type = match response.status.is_server_error() {
4656 false => SimpleErrorType::Permanent,
4657 true => SimpleErrorType::Temporary,
4658 };
4659 Err(ApiError::new(
4660 format!(
4661 "Unexpected response code {}:\n{:?}\n\n{}",
4662 code,
4663 headers,
4664 match result {
4665 Ok(_) => match str::from_utf8(&body) {
4666 Ok(body) => Cow::from(body),
4667 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4668 },
4669 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4670 }
4671 ),
4672 err_type,
4673 ))
4674 }
4675 })
4676 }
4677
4678 fn update_node(
4679 &self,
4680 param_node_id: uuid::Uuid,
4681 param_body: models::NodeUpdateRequest,
4682 ) -> Result<models::Node, ApiError> {
4683 let mut url = format!(
4684 "{}/v1/nodes/{node_id}",
4685 self.base_path,
4686 node_id = utf8_percent_encode(¶m_node_id.to_string(), ID_ENCODE_SET)
4687 );
4688
4689 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4690
4691 let query_string_str = query_string.finish();
4692 if !query_string_str.is_empty() {
4693 url += "?";
4694 url += &query_string_str;
4695 }
4696
4697 let url = match Url::from_str(&url) {
4698 Ok(url) => url,
4699 Err(err) => {
4700 return Err(ApiError::new(
4701 format!("Unable to build URL: {}", err),
4702 SimpleErrorType::Permanent,
4703 ))
4704 }
4705 };
4706
4707 let mut request = self.hyper_client.request(Method::Patch, url);
4708 request = request.headers(self.headers.clone());
4709 let body = serde_json::to_string(¶m_body)
4710 .expect("impossible to fail to serialize")
4711 .into_bytes();
4712 request = request.body(body.as_slice());
4713
4714 request = request.header(ContentType(mimetypes::requests::UPDATE_NODE.clone()));
4715
4716 request
4717 .send()
4718 .map_err(|e| {
4719 ApiError::new(
4720 format!("No response received: {}", e),
4721 SimpleErrorType::Permanent,
4722 )
4723 })
4724 .and_then(|mut response| match response.status.to_u16() {
4725 200 => {
4726 let mut body = Vec::new();
4727 response.read_to_end(&mut body).map_err(|e| {
4728 ApiError::new(
4729 format!("Failed to read response: {}", e),
4730 SimpleErrorType::Temporary,
4731 )
4732 })?;
4733 str::from_utf8(&body)
4734 .map_err(|e| {
4735 ApiError::new(
4736 format!("Response was not valid UTF8: {}", e),
4737 SimpleErrorType::Temporary,
4738 )
4739 })
4740 .and_then(|body| {
4741 serde_json::from_str::<models::Node>(body).map_err(|e| e.into())
4742 })
4743 }
4744 code => {
4745 let headers = response.headers.clone();
4746 let mut body = Vec::new();
4747 let result = response.read_to_end(&mut body);
4748 let err_type = match response.status.is_server_error() {
4749 false => SimpleErrorType::Permanent,
4750 true => SimpleErrorType::Temporary,
4751 };
4752 Err(ApiError::new(
4753 format!(
4754 "Unexpected response code {}:\n{:?}\n\n{}",
4755 code,
4756 headers,
4757 match result {
4758 Ok(_) => match str::from_utf8(&body) {
4759 Ok(body) => Cow::from(body),
4760 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4761 },
4762 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4763 }
4764 ),
4765 err_type,
4766 ))
4767 }
4768 })
4769 }
4770
4771 fn update_node_status(
4772 &self,
4773 param_body: models::NodeStatusRequest,
4774 ) -> Result<models::NodeStatusResponse, ApiError> {
4775 let mut url = format!("{}/v1/node/status", self.base_path);
4776
4777 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4778
4779 let query_string_str = query_string.finish();
4780 if !query_string_str.is_empty() {
4781 url += "?";
4782 url += &query_string_str;
4783 }
4784
4785 let url = match Url::from_str(&url) {
4786 Ok(url) => url,
4787 Err(err) => {
4788 return Err(ApiError::new(
4789 format!("Unable to build URL: {}", err),
4790 SimpleErrorType::Permanent,
4791 ))
4792 }
4793 };
4794
4795 let mut request = self.hyper_client.request(Method::Post, url);
4796 request = request.headers(self.headers.clone());
4797 let body = serde_json::to_string(¶m_body)
4798 .expect("impossible to fail to serialize")
4799 .into_bytes();
4800 request = request.body(body.as_slice());
4801
4802 request = request.header(ContentType(mimetypes::requests::UPDATE_NODE_STATUS.clone()));
4803
4804 request
4805 .send()
4806 .map_err(|e| {
4807 ApiError::new(
4808 format!("No response received: {}", e),
4809 SimpleErrorType::Permanent,
4810 )
4811 })
4812 .and_then(|mut response| match response.status.to_u16() {
4813 200 => {
4814 let mut body = Vec::new();
4815 response.read_to_end(&mut body).map_err(|e| {
4816 ApiError::new(
4817 format!("Failed to read response: {}", e),
4818 SimpleErrorType::Temporary,
4819 )
4820 })?;
4821 str::from_utf8(&body)
4822 .map_err(|e| {
4823 ApiError::new(
4824 format!("Response was not valid UTF8: {}", e),
4825 SimpleErrorType::Temporary,
4826 )
4827 })
4828 .and_then(|body| {
4829 serde_json::from_str::<models::NodeStatusResponse>(body)
4830 .map_err(|e| e.into())
4831 })
4832 }
4833 code => {
4834 let headers = response.headers.clone();
4835 let mut body = Vec::new();
4836 let result = response.read_to_end(&mut body);
4837 let err_type = match response.status.is_server_error() {
4838 false => SimpleErrorType::Permanent,
4839 true => SimpleErrorType::Temporary,
4840 };
4841 Err(ApiError::new(
4842 format!(
4843 "Unexpected response code {}:\n{:?}\n\n{}",
4844 code,
4845 headers,
4846 match result {
4847 Ok(_) => match str::from_utf8(&body) {
4848 Ok(body) => Cow::from(body),
4849 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4850 },
4851 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4852 }
4853 ),
4854 err_type,
4855 ))
4856 }
4857 })
4858 }
4859}
4860
4861impl RegistryApi for Client {
4862 type Error = ApiError;
4863
4864 fn create_registry(
4865 &self,
4866 param_registry_request: models::RegistryRequest,
4867 ) -> Result<models::Registry, ApiError> {
4868 let mut url = format!("{}/v1/registry", self.base_path);
4869
4870 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4871
4872 let query_string_str = query_string.finish();
4873 if !query_string_str.is_empty() {
4874 url += "?";
4875 url += &query_string_str;
4876 }
4877
4878 let url = match Url::from_str(&url) {
4879 Ok(url) => url,
4880 Err(err) => {
4881 return Err(ApiError::new(
4882 format!("Unable to build URL: {}", err),
4883 SimpleErrorType::Permanent,
4884 ))
4885 }
4886 };
4887
4888 let mut request = self.hyper_client.request(Method::Post, url);
4889 request = request.headers(self.headers.clone());
4890 let body = serde_json::to_string(¶m_registry_request)
4892 .expect("impossible to fail to serialize")
4893 .into_bytes();
4894 request = request.body(body.as_slice());
4895
4896 request = request.header(ContentType(mimetypes::requests::CREATE_REGISTRY.clone()));
4897
4898 request
4899 .send()
4900 .map_err(|e| {
4901 ApiError::new(
4902 format!("No response received: {}", e),
4903 SimpleErrorType::Permanent,
4904 )
4905 })
4906 .and_then(|mut response| match response.status.to_u16() {
4907 200 => {
4908 let mut body = Vec::new();
4909 response.read_to_end(&mut body).map_err(|e| {
4910 ApiError::new(
4911 format!("Failed to read response: {}", e),
4912 SimpleErrorType::Temporary,
4913 )
4914 })?;
4915 str::from_utf8(&body)
4916 .map_err(|e| {
4917 ApiError::new(
4918 format!("Response was not valid UTF8: {}", e),
4919 SimpleErrorType::Temporary,
4920 )
4921 })
4922 .and_then(|body| {
4923 serde_json::from_str::<models::Registry>(body).map_err(|e| e.into())
4924 })
4925 }
4926 code => {
4927 let headers = response.headers.clone();
4928 let mut body = Vec::new();
4929 let result = response.read_to_end(&mut body);
4930 let err_type = match response.status.is_server_error() {
4931 false => SimpleErrorType::Permanent,
4932 true => SimpleErrorType::Temporary,
4933 };
4934 Err(ApiError::new(
4935 format!(
4936 "Unexpected response code {}:\n{:?}\n\n{}",
4937 code,
4938 headers,
4939 match result {
4940 Ok(_) => match str::from_utf8(&body) {
4941 Ok(body) => Cow::from(body),
4942 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
4943 },
4944 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
4945 }
4946 ),
4947 err_type,
4948 ))
4949 }
4950 })
4951 }
4952
4953 fn delete_registry(&self, param_registry_id: uuid::Uuid) -> Result<(), ApiError> {
4954 let mut url = format!(
4955 "{}/v1/registry/{registry_id}",
4956 self.base_path,
4957 registry_id = utf8_percent_encode(¶m_registry_id.to_string(), ID_ENCODE_SET)
4958 );
4959
4960 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
4961
4962 let query_string_str = query_string.finish();
4963 if !query_string_str.is_empty() {
4964 url += "?";
4965 url += &query_string_str;
4966 }
4967
4968 let url = match Url::from_str(&url) {
4969 Ok(url) => url,
4970 Err(err) => {
4971 return Err(ApiError::new(
4972 format!("Unable to build URL: {}", err),
4973 SimpleErrorType::Permanent,
4974 ))
4975 }
4976 };
4977
4978 let mut request = self.hyper_client.request(Method::Delete, url);
4979 request = request.headers(self.headers.clone());
4980
4981 request
4982 .send()
4983 .map_err(|e| {
4984 ApiError::new(
4985 format!("No response received: {}", e),
4986 SimpleErrorType::Permanent,
4987 )
4988 })
4989 .and_then(|mut response| match response.status.to_u16() {
4990 204 => {
4991 let mut body = Vec::new();
4992 response.read_to_end(&mut body).map_err(|e| {
4993 ApiError::new(
4994 format!("Failed to read response: {}", e),
4995 SimpleErrorType::Temporary,
4996 )
4997 })?;
4998
4999 Ok(())
5000 }
5001 code => {
5002 let headers = response.headers.clone();
5003 let mut body = Vec::new();
5004 let result = response.read_to_end(&mut body);
5005 let err_type = match response.status.is_server_error() {
5006 false => SimpleErrorType::Permanent,
5007 true => SimpleErrorType::Temporary,
5008 };
5009 Err(ApiError::new(
5010 format!(
5011 "Unexpected response code {}:\n{:?}\n\n{}",
5012 code,
5013 headers,
5014 match result {
5015 Ok(_) => match str::from_utf8(&body) {
5016 Ok(body) => Cow::from(body),
5017 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5018 },
5019 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5020 }
5021 ),
5022 err_type,
5023 ))
5024 }
5025 })
5026 }
5027
5028 fn get_all_registries(&self) -> Result<Vec<models::Registry>, ApiError> {
5029 let mut url = format!("{}/v1/registry", self.base_path);
5030
5031 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5032
5033 let query_string_str = query_string.finish();
5034 if !query_string_str.is_empty() {
5035 url += "?";
5036 url += &query_string_str;
5037 }
5038
5039 let url = match Url::from_str(&url) {
5040 Ok(url) => url,
5041 Err(err) => {
5042 return Err(ApiError::new(
5043 format!("Unable to build URL: {}", err),
5044 SimpleErrorType::Permanent,
5045 ))
5046 }
5047 };
5048
5049 let mut request = self.hyper_client.request(Method::Get, url);
5050 request = request.headers(self.headers.clone());
5051
5052 request
5053 .send()
5054 .map_err(|e| {
5055 ApiError::new(
5056 format!("No response received: {}", e),
5057 SimpleErrorType::Permanent,
5058 )
5059 })
5060 .and_then(|mut response| match response.status.to_u16() {
5061 200 => {
5062 let mut body = Vec::new();
5063 response.read_to_end(&mut body).map_err(|e| {
5064 ApiError::new(
5065 format!("Failed to read response: {}", e),
5066 SimpleErrorType::Temporary,
5067 )
5068 })?;
5069 str::from_utf8(&body)
5070 .map_err(|e| {
5071 ApiError::new(
5072 format!("Response was not valid UTF8: {}", e),
5073 SimpleErrorType::Temporary,
5074 )
5075 })
5076 .and_then(|body| {
5077 serde_json::from_str::<Vec<models::Registry>>(body)
5078 .map_err(|e| e.into())
5079 })
5080 }
5081 code => {
5082 let headers = response.headers.clone();
5083 let mut body = Vec::new();
5084 let result = response.read_to_end(&mut body);
5085 let err_type = match response.status.is_server_error() {
5086 false => SimpleErrorType::Permanent,
5087 true => SimpleErrorType::Temporary,
5088 };
5089 Err(ApiError::new(
5090 format!(
5091 "Unexpected response code {}:\n{:?}\n\n{}",
5092 code,
5093 headers,
5094 match result {
5095 Ok(_) => match str::from_utf8(&body) {
5096 Ok(body) => Cow::from(body),
5097 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5098 },
5099 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5100 }
5101 ),
5102 err_type,
5103 ))
5104 }
5105 })
5106 }
5107
5108 fn get_registry(&self, param_registry_id: uuid::Uuid) -> Result<models::Registry, ApiError> {
5109 let mut url = format!(
5110 "{}/v1/registry/{registry_id}",
5111 self.base_path,
5112 registry_id = utf8_percent_encode(¶m_registry_id.to_string(), ID_ENCODE_SET)
5113 );
5114
5115 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5116
5117 let query_string_str = query_string.finish();
5118 if !query_string_str.is_empty() {
5119 url += "?";
5120 url += &query_string_str;
5121 }
5122
5123 let url = match Url::from_str(&url) {
5124 Ok(url) => url,
5125 Err(err) => {
5126 return Err(ApiError::new(
5127 format!("Unable to build URL: {}", err),
5128 SimpleErrorType::Permanent,
5129 ))
5130 }
5131 };
5132
5133 let mut request = self.hyper_client.request(Method::Get, url);
5134 request = request.headers(self.headers.clone());
5135
5136 request
5137 .send()
5138 .map_err(|e| {
5139 ApiError::new(
5140 format!("No response received: {}", e),
5141 SimpleErrorType::Permanent,
5142 )
5143 })
5144 .and_then(|mut response| match response.status.to_u16() {
5145 200 => {
5146 let mut body = Vec::new();
5147 response.read_to_end(&mut body).map_err(|e| {
5148 ApiError::new(
5149 format!("Failed to read response: {}", e),
5150 SimpleErrorType::Temporary,
5151 )
5152 })?;
5153 str::from_utf8(&body)
5154 .map_err(|e| {
5155 ApiError::new(
5156 format!("Response was not valid UTF8: {}", e),
5157 SimpleErrorType::Temporary,
5158 )
5159 })
5160 .and_then(|body| {
5161 serde_json::from_str::<models::Registry>(body).map_err(|e| e.into())
5162 })
5163 }
5164 code => {
5165 let headers = response.headers.clone();
5166 let mut body = Vec::new();
5167 let result = response.read_to_end(&mut body);
5168 let err_type = match response.status.is_server_error() {
5169 false => SimpleErrorType::Permanent,
5170 true => SimpleErrorType::Temporary,
5171 };
5172 Err(ApiError::new(
5173 format!(
5174 "Unexpected response code {}:\n{:?}\n\n{}",
5175 code,
5176 headers,
5177 match result {
5178 Ok(_) => match str::from_utf8(&body) {
5179 Ok(body) => Cow::from(body),
5180 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5181 },
5182 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5183 }
5184 ),
5185 err_type,
5186 ))
5187 }
5188 })
5189 }
5190
5191 fn get_registry_for_app(
5192 &self,
5193 param_app_id: uuid::Uuid,
5194 ) -> Result<models::AppRegistryResponse, ApiError> {
5195 let mut url = format!(
5196 "{}/v1/registry/app/{app_id}",
5197 self.base_path,
5198 app_id = utf8_percent_encode(¶m_app_id.to_string(), ID_ENCODE_SET)
5199 );
5200
5201 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5202
5203 let query_string_str = query_string.finish();
5204 if !query_string_str.is_empty() {
5205 url += "?";
5206 url += &query_string_str;
5207 }
5208
5209 let url = match Url::from_str(&url) {
5210 Ok(url) => url,
5211 Err(err) => {
5212 return Err(ApiError::new(
5213 format!("Unable to build URL: {}", err),
5214 SimpleErrorType::Permanent,
5215 ))
5216 }
5217 };
5218
5219 let mut request = self.hyper_client.request(Method::Get, url);
5220 request = request.headers(self.headers.clone());
5221
5222 request
5223 .send()
5224 .map_err(|e| {
5225 ApiError::new(
5226 format!("No response received: {}", e),
5227 SimpleErrorType::Permanent,
5228 )
5229 })
5230 .and_then(|mut response| match response.status.to_u16() {
5231 200 => {
5232 let mut body = Vec::new();
5233 response.read_to_end(&mut body).map_err(|e| {
5234 ApiError::new(
5235 format!("Failed to read response: {}", e),
5236 SimpleErrorType::Temporary,
5237 )
5238 })?;
5239 str::from_utf8(&body)
5240 .map_err(|e| {
5241 ApiError::new(
5242 format!("Response was not valid UTF8: {}", e),
5243 SimpleErrorType::Temporary,
5244 )
5245 })
5246 .and_then(|body| {
5247 serde_json::from_str::<models::AppRegistryResponse>(body)
5248 .map_err(|e| e.into())
5249 })
5250 }
5251 code => {
5252 let headers = response.headers.clone();
5253 let mut body = Vec::new();
5254 let result = response.read_to_end(&mut body);
5255 let err_type = match response.status.is_server_error() {
5256 false => SimpleErrorType::Permanent,
5257 true => SimpleErrorType::Temporary,
5258 };
5259 Err(ApiError::new(
5260 format!(
5261 "Unexpected response code {}:\n{:?}\n\n{}",
5262 code,
5263 headers,
5264 match result {
5265 Ok(_) => match str::from_utf8(&body) {
5266 Ok(body) => Cow::from(body),
5267 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5268 },
5269 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5270 }
5271 ),
5272 err_type,
5273 ))
5274 }
5275 })
5276 }
5277
5278 fn get_registry_for_image(
5279 &self,
5280 param_image_name: String,
5281 ) -> Result<models::ImageRegistryResponse, ApiError> {
5282 let mut url = format!("{}/v1/image/registry", self.base_path);
5283
5284 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5285 query_string.append_pair("image_name", ¶m_image_name.to_string());
5286
5287 let query_string_str = query_string.finish();
5288 if !query_string_str.is_empty() {
5289 url += "?";
5290 url += &query_string_str;
5291 }
5292
5293 let url = match Url::from_str(&url) {
5294 Ok(url) => url,
5295 Err(err) => {
5296 return Err(ApiError::new(
5297 format!("Unable to build URL: {}", err),
5298 SimpleErrorType::Permanent,
5299 ))
5300 }
5301 };
5302
5303 let mut request = self.hyper_client.request(Method::Get, url);
5304 request = request.headers(self.headers.clone());
5305
5306 request
5307 .send()
5308 .map_err(|e| {
5309 ApiError::new(
5310 format!("No response received: {}", e),
5311 SimpleErrorType::Permanent,
5312 )
5313 })
5314 .and_then(|mut response| match response.status.to_u16() {
5315 200 => {
5316 let mut body = Vec::new();
5317 response.read_to_end(&mut body).map_err(|e| {
5318 ApiError::new(
5319 format!("Failed to read response: {}", e),
5320 SimpleErrorType::Temporary,
5321 )
5322 })?;
5323 str::from_utf8(&body)
5324 .map_err(|e| {
5325 ApiError::new(
5326 format!("Response was not valid UTF8: {}", e),
5327 SimpleErrorType::Temporary,
5328 )
5329 })
5330 .and_then(|body| {
5331 serde_json::from_str::<models::ImageRegistryResponse>(body)
5332 .map_err(|e| e.into())
5333 })
5334 }
5335 code => {
5336 let headers = response.headers.clone();
5337 let mut body = Vec::new();
5338 let result = response.read_to_end(&mut body);
5339 let err_type = match response.status.is_server_error() {
5340 false => SimpleErrorType::Permanent,
5341 true => SimpleErrorType::Temporary,
5342 };
5343 Err(ApiError::new(
5344 format!(
5345 "Unexpected response code {}:\n{:?}\n\n{}",
5346 code,
5347 headers,
5348 match result {
5349 Ok(_) => match str::from_utf8(&body) {
5350 Ok(body) => Cow::from(body),
5351 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5352 },
5353 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5354 }
5355 ),
5356 err_type,
5357 ))
5358 }
5359 })
5360 }
5361
5362 fn update_registry(
5363 &self,
5364 param_registry_id: uuid::Uuid,
5365 param_body: models::UpdateRegistryRequest,
5366 ) -> Result<models::Registry, ApiError> {
5367 let mut url = format!(
5368 "{}/v1/registry/{registry_id}",
5369 self.base_path,
5370 registry_id = utf8_percent_encode(¶m_registry_id.to_string(), ID_ENCODE_SET)
5371 );
5372
5373 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5374
5375 let query_string_str = query_string.finish();
5376 if !query_string_str.is_empty() {
5377 url += "?";
5378 url += &query_string_str;
5379 }
5380
5381 let url = match Url::from_str(&url) {
5382 Ok(url) => url,
5383 Err(err) => {
5384 return Err(ApiError::new(
5385 format!("Unable to build URL: {}", err),
5386 SimpleErrorType::Permanent,
5387 ))
5388 }
5389 };
5390
5391 let mut request = self.hyper_client.request(Method::Patch, url);
5392 request = request.headers(self.headers.clone());
5393 let body = serde_json::to_string(¶m_body)
5394 .expect("impossible to fail to serialize")
5395 .into_bytes();
5396 request = request.body(body.as_slice());
5397
5398 request = request.header(ContentType(mimetypes::requests::UPDATE_REGISTRY.clone()));
5399
5400 request
5401 .send()
5402 .map_err(|e| {
5403 ApiError::new(
5404 format!("No response received: {}", e),
5405 SimpleErrorType::Permanent,
5406 )
5407 })
5408 .and_then(|mut response| match response.status.to_u16() {
5409 200 => {
5410 let mut body = Vec::new();
5411 response.read_to_end(&mut body).map_err(|e| {
5412 ApiError::new(
5413 format!("Failed to read response: {}", e),
5414 SimpleErrorType::Temporary,
5415 )
5416 })?;
5417 str::from_utf8(&body)
5418 .map_err(|e| {
5419 ApiError::new(
5420 format!("Response was not valid UTF8: {}", e),
5421 SimpleErrorType::Temporary,
5422 )
5423 })
5424 .and_then(|body| {
5425 serde_json::from_str::<models::Registry>(body).map_err(|e| e.into())
5426 })
5427 }
5428 code => {
5429 let headers = response.headers.clone();
5430 let mut body = Vec::new();
5431 let result = response.read_to_end(&mut body);
5432 let err_type = match response.status.is_server_error() {
5433 false => SimpleErrorType::Permanent,
5434 true => SimpleErrorType::Temporary,
5435 };
5436 Err(ApiError::new(
5437 format!(
5438 "Unexpected response code {}:\n{:?}\n\n{}",
5439 code,
5440 headers,
5441 match result {
5442 Ok(_) => match str::from_utf8(&body) {
5443 Ok(body) => Cow::from(body),
5444 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5445 },
5446 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5447 }
5448 ),
5449 err_type,
5450 ))
5451 }
5452 })
5453 }
5454}
5455
5456impl SystemApi for Client {
5457 type Error = ApiError;
5458
5459 fn get_manager_version(&self) -> Result<models::VersionResponse, ApiError> {
5460 let mut url = format!("{}/v1/sys/version", self.base_path);
5461
5462 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5463
5464 let query_string_str = query_string.finish();
5465 if !query_string_str.is_empty() {
5466 url += "?";
5467 url += &query_string_str;
5468 }
5469
5470 let url = match Url::from_str(&url) {
5471 Ok(url) => url,
5472 Err(err) => {
5473 return Err(ApiError::new(
5474 format!("Unable to build URL: {}", err),
5475 SimpleErrorType::Permanent,
5476 ))
5477 }
5478 };
5479
5480 let mut request = self.hyper_client.request(Method::Get, url);
5481 request = request.headers(self.headers.clone());
5482
5483 request
5484 .send()
5485 .map_err(|e| {
5486 ApiError::new(
5487 format!("No response received: {}", e),
5488 SimpleErrorType::Permanent,
5489 )
5490 })
5491 .and_then(|mut response| match response.status.to_u16() {
5492 200 => {
5493 let mut body = Vec::new();
5494 response.read_to_end(&mut body).map_err(|e| {
5495 ApiError::new(
5496 format!("Failed to read response: {}", e),
5497 SimpleErrorType::Temporary,
5498 )
5499 })?;
5500 str::from_utf8(&body)
5501 .map_err(|e| {
5502 ApiError::new(
5503 format!("Response was not valid UTF8: {}", e),
5504 SimpleErrorType::Temporary,
5505 )
5506 })
5507 .and_then(|body| {
5508 serde_json::from_str::<models::VersionResponse>(body)
5509 .map_err(|e| e.into())
5510 })
5511 }
5512 code => {
5513 let headers = response.headers.clone();
5514 let mut body = Vec::new();
5515 let result = response.read_to_end(&mut body);
5516 let err_type = match response.status.is_server_error() {
5517 false => SimpleErrorType::Permanent,
5518 true => SimpleErrorType::Temporary,
5519 };
5520 Err(ApiError::new(
5521 format!(
5522 "Unexpected response code {}:\n{:?}\n\n{}",
5523 code,
5524 headers,
5525 match result {
5526 Ok(_) => match str::from_utf8(&body) {
5527 Ok(body) => Cow::from(body),
5528 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5529 },
5530 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5531 }
5532 ),
5533 err_type,
5534 ))
5535 }
5536 })
5537 }
5538}
5539
5540impl TaskApi for Client {
5541 type Error = ApiError;
5542
5543 fn get_all_tasks(
5544 &self,
5545 param_task_type: Option<String>,
5546 param_status: Option<String>,
5547 param_requester: Option<String>,
5548 param_approver: Option<String>,
5549 param_all_search: Option<String>,
5550 param_limit: Option<i32>,
5551 param_offset: Option<i32>,
5552 param_sort_by: Option<String>,
5553 param_base_filters: Option<String>,
5554 ) -> Result<models::GetAllTasksResponse, ApiError> {
5555 let mut url = format!("{}/v1/tasks", self.base_path);
5556
5557 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5558
5559 if let Some(task_type) = param_task_type {
5560 query_string.append_pair("task_type", &task_type.to_string());
5561 }
5562 if let Some(status) = param_status {
5563 query_string.append_pair("status", &status.to_string());
5564 }
5565 if let Some(requester) = param_requester {
5566 query_string.append_pair("requester", &requester.to_string());
5567 }
5568 if let Some(approver) = param_approver {
5569 query_string.append_pair("approver", &approver.to_string());
5570 }
5571 if let Some(all_search) = param_all_search {
5572 query_string.append_pair("all_search", &all_search.to_string());
5573 }
5574 if let Some(limit) = param_limit {
5575 query_string.append_pair("limit", &limit.to_string());
5576 }
5577 if let Some(offset) = param_offset {
5578 query_string.append_pair("offset", &offset.to_string());
5579 }
5580 if let Some(sort_by) = param_sort_by {
5581 query_string.append_pair("sort_by", &sort_by.to_string());
5582 }
5583 if let Some(base_filters) = param_base_filters {
5584 query_string.append_pair("base_filters", &base_filters.to_string());
5585 }
5586 let query_string_str = query_string.finish();
5587 if !query_string_str.is_empty() {
5588 url += "?";
5589 url += &query_string_str;
5590 }
5591
5592 let url = match Url::from_str(&url) {
5593 Ok(url) => url,
5594 Err(err) => {
5595 return Err(ApiError::new(
5596 format!("Unable to build URL: {}", err),
5597 SimpleErrorType::Permanent,
5598 ))
5599 }
5600 };
5601
5602 let mut request = self.hyper_client.request(Method::Get, url);
5603 request = request.headers(self.headers.clone());
5604
5605 request
5606 .send()
5607 .map_err(|e| {
5608 ApiError::new(
5609 format!("No response received: {}", e),
5610 SimpleErrorType::Permanent,
5611 )
5612 })
5613 .and_then(|mut response| match response.status.to_u16() {
5614 200 => {
5615 let mut body = Vec::new();
5616 response.read_to_end(&mut body).map_err(|e| {
5617 ApiError::new(
5618 format!("Failed to read response: {}", e),
5619 SimpleErrorType::Temporary,
5620 )
5621 })?;
5622 str::from_utf8(&body)
5623 .map_err(|e| {
5624 ApiError::new(
5625 format!("Response was not valid UTF8: {}", e),
5626 SimpleErrorType::Temporary,
5627 )
5628 })
5629 .and_then(|body| {
5630 serde_json::from_str::<models::GetAllTasksResponse>(body)
5631 .map_err(|e| e.into())
5632 })
5633 }
5634 code => {
5635 let headers = response.headers.clone();
5636 let mut body = Vec::new();
5637 let result = response.read_to_end(&mut body);
5638 let err_type = match response.status.is_server_error() {
5639 false => SimpleErrorType::Permanent,
5640 true => SimpleErrorType::Temporary,
5641 };
5642 Err(ApiError::new(
5643 format!(
5644 "Unexpected response code {}:\n{:?}\n\n{}",
5645 code,
5646 headers,
5647 match result {
5648 Ok(_) => match str::from_utf8(&body) {
5649 Ok(body) => Cow::from(body),
5650 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5651 },
5652 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5653 }
5654 ),
5655 err_type,
5656 ))
5657 }
5658 })
5659 }
5660
5661 fn get_task(&self, param_task_id: uuid::Uuid) -> Result<models::Task, ApiError> {
5662 let mut url = format!(
5663 "{}/v1/tasks/{task_id}",
5664 self.base_path,
5665 task_id = utf8_percent_encode(¶m_task_id.to_string(), ID_ENCODE_SET)
5666 );
5667
5668 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5669
5670 let query_string_str = query_string.finish();
5671 if !query_string_str.is_empty() {
5672 url += "?";
5673 url += &query_string_str;
5674 }
5675
5676 let url = match Url::from_str(&url) {
5677 Ok(url) => url,
5678 Err(err) => {
5679 return Err(ApiError::new(
5680 format!("Unable to build URL: {}", err),
5681 SimpleErrorType::Permanent,
5682 ))
5683 }
5684 };
5685
5686 let mut request = self.hyper_client.request(Method::Get, url);
5687 request = request.headers(self.headers.clone());
5688
5689 request
5690 .send()
5691 .map_err(|e| {
5692 ApiError::new(
5693 format!("No response received: {}", e),
5694 SimpleErrorType::Permanent,
5695 )
5696 })
5697 .and_then(|mut response| match response.status.to_u16() {
5698 200 => {
5699 let mut body = Vec::new();
5700 response.read_to_end(&mut body).map_err(|e| {
5701 ApiError::new(
5702 format!("Failed to read response: {}", e),
5703 SimpleErrorType::Temporary,
5704 )
5705 })?;
5706 str::from_utf8(&body)
5707 .map_err(|e| {
5708 ApiError::new(
5709 format!("Response was not valid UTF8: {}", e),
5710 SimpleErrorType::Temporary,
5711 )
5712 })
5713 .and_then(|body| {
5714 serde_json::from_str::<models::Task>(body).map_err(|e| e.into())
5715 })
5716 }
5717 code => {
5718 let headers = response.headers.clone();
5719 let mut body = Vec::new();
5720 let result = response.read_to_end(&mut body);
5721 let err_type = match response.status.is_server_error() {
5722 false => SimpleErrorType::Permanent,
5723 true => SimpleErrorType::Temporary,
5724 };
5725 Err(ApiError::new(
5726 format!(
5727 "Unexpected response code {}:\n{:?}\n\n{}",
5728 code,
5729 headers,
5730 match result {
5731 Ok(_) => match str::from_utf8(&body) {
5732 Ok(body) => Cow::from(body),
5733 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5734 },
5735 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5736 }
5737 ),
5738 err_type,
5739 ))
5740 }
5741 })
5742 }
5743
5744 fn get_task_status(&self, param_task_id: uuid::Uuid) -> Result<models::TaskResult, ApiError> {
5745 let mut url = format!(
5746 "{}/v1/tasks/status/{task_id}",
5747 self.base_path,
5748 task_id = utf8_percent_encode(¶m_task_id.to_string(), ID_ENCODE_SET)
5749 );
5750
5751 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5752
5753 let query_string_str = query_string.finish();
5754 if !query_string_str.is_empty() {
5755 url += "?";
5756 url += &query_string_str;
5757 }
5758
5759 let url = match Url::from_str(&url) {
5760 Ok(url) => url,
5761 Err(err) => {
5762 return Err(ApiError::new(
5763 format!("Unable to build URL: {}", err),
5764 SimpleErrorType::Permanent,
5765 ))
5766 }
5767 };
5768
5769 let mut request = self.hyper_client.request(Method::Get, url);
5770 request = request.headers(self.headers.clone());
5771
5772 request
5773 .send()
5774 .map_err(|e| {
5775 ApiError::new(
5776 format!("No response received: {}", e),
5777 SimpleErrorType::Permanent,
5778 )
5779 })
5780 .and_then(|mut response| match response.status.to_u16() {
5781 200 => {
5782 let mut body = Vec::new();
5783 response.read_to_end(&mut body).map_err(|e| {
5784 ApiError::new(
5785 format!("Failed to read response: {}", e),
5786 SimpleErrorType::Temporary,
5787 )
5788 })?;
5789 str::from_utf8(&body)
5790 .map_err(|e| {
5791 ApiError::new(
5792 format!("Response was not valid UTF8: {}", e),
5793 SimpleErrorType::Temporary,
5794 )
5795 })
5796 .and_then(|body| {
5797 serde_json::from_str::<models::TaskResult>(body).map_err(|e| e.into())
5798 })
5799 }
5800 code => {
5801 let headers = response.headers.clone();
5802 let mut body = Vec::new();
5803 let result = response.read_to_end(&mut body);
5804 let err_type = match response.status.is_server_error() {
5805 false => SimpleErrorType::Permanent,
5806 true => SimpleErrorType::Temporary,
5807 };
5808 Err(ApiError::new(
5809 format!(
5810 "Unexpected response code {}:\n{:?}\n\n{}",
5811 code,
5812 headers,
5813 match result {
5814 Ok(_) => match str::from_utf8(&body) {
5815 Ok(body) => Cow::from(body),
5816 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5817 },
5818 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5819 }
5820 ),
5821 err_type,
5822 ))
5823 }
5824 })
5825 }
5826
5827 fn update_task(
5828 &self,
5829 param_task_id: uuid::Uuid,
5830 param_body: models::TaskUpdateRequest,
5831 ) -> Result<models::TaskResult, ApiError> {
5832 let mut url = format!(
5833 "{}/v1/tasks/{task_id}",
5834 self.base_path,
5835 task_id = utf8_percent_encode(¶m_task_id.to_string(), ID_ENCODE_SET)
5836 );
5837
5838 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5839
5840 let query_string_str = query_string.finish();
5841 if !query_string_str.is_empty() {
5842 url += "?";
5843 url += &query_string_str;
5844 }
5845
5846 let url = match Url::from_str(&url) {
5847 Ok(url) => url,
5848 Err(err) => {
5849 return Err(ApiError::new(
5850 format!("Unable to build URL: {}", err),
5851 SimpleErrorType::Permanent,
5852 ))
5853 }
5854 };
5855
5856 let mut request = self.hyper_client.request(Method::Patch, url);
5857 request = request.headers(self.headers.clone());
5858 let body = serde_json::to_string(¶m_body)
5859 .expect("impossible to fail to serialize")
5860 .into_bytes();
5861 request = request.body(body.as_slice());
5862
5863 request = request.header(ContentType(mimetypes::requests::UPDATE_TASK.clone()));
5864
5865 request
5866 .send()
5867 .map_err(|e| {
5868 ApiError::new(
5869 format!("No response received: {}", e),
5870 SimpleErrorType::Permanent,
5871 )
5872 })
5873 .and_then(|mut response| match response.status.to_u16() {
5874 200 => {
5875 let mut body = Vec::new();
5876 response.read_to_end(&mut body).map_err(|e| {
5877 ApiError::new(
5878 format!("Failed to read response: {}", e),
5879 SimpleErrorType::Temporary,
5880 )
5881 })?;
5882 str::from_utf8(&body)
5883 .map_err(|e| {
5884 ApiError::new(
5885 format!("Response was not valid UTF8: {}", e),
5886 SimpleErrorType::Temporary,
5887 )
5888 })
5889 .and_then(|body| {
5890 serde_json::from_str::<models::TaskResult>(body).map_err(|e| e.into())
5891 })
5892 }
5893 code => {
5894 let headers = response.headers.clone();
5895 let mut body = Vec::new();
5896 let result = response.read_to_end(&mut body);
5897 let err_type = match response.status.is_server_error() {
5898 false => SimpleErrorType::Permanent,
5899 true => SimpleErrorType::Temporary,
5900 };
5901 Err(ApiError::new(
5902 format!(
5903 "Unexpected response code {}:\n{:?}\n\n{}",
5904 code,
5905 headers,
5906 match result {
5907 Ok(_) => match str::from_utf8(&body) {
5908 Ok(body) => Cow::from(body),
5909 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
5910 },
5911 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
5912 }
5913 ),
5914 err_type,
5915 ))
5916 }
5917 })
5918 }
5919}
5920
5921impl ToolsApi for Client {
5922 type Error = ApiError;
5923
5924 fn convert_app(
5925 &self,
5926 param_body: models::ConversionRequest,
5927 ) -> Result<models::ConversionResponse, ApiError> {
5928 let mut url = format!("{}/v1/tools/converter/convert-app", self.base_path);
5929
5930 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
5931
5932 let query_string_str = query_string.finish();
5933 if !query_string_str.is_empty() {
5934 url += "?";
5935 url += &query_string_str;
5936 }
5937
5938 let url = match Url::from_str(&url) {
5939 Ok(url) => url,
5940 Err(err) => {
5941 return Err(ApiError::new(
5942 format!("Unable to build URL: {}", err),
5943 SimpleErrorType::Permanent,
5944 ))
5945 }
5946 };
5947
5948 let mut request = self.hyper_client.request(Method::Post, url);
5949 request = request.headers(self.headers.clone());
5950 let body = serde_json::to_string(¶m_body)
5952 .expect("impossible to fail to serialize")
5953 .into_bytes();
5954 request = request.body(body.as_slice());
5955
5956 request = request.header(ContentType(mimetypes::requests::CONVERT_APP.clone()));
5957
5958 request
5959 .send()
5960 .map_err(|e| {
5961 ApiError::new(
5962 format!("No response received: {}", e),
5963 SimpleErrorType::Permanent,
5964 )
5965 })
5966 .and_then(|mut response| match response.status.to_u16() {
5967 200 => {
5968 let mut body = Vec::new();
5969 response.read_to_end(&mut body).map_err(|e| {
5970 ApiError::new(
5971 format!("Failed to read response: {}", e),
5972 SimpleErrorType::Temporary,
5973 )
5974 })?;
5975 str::from_utf8(&body)
5976 .map_err(|e| {
5977 ApiError::new(
5978 format!("Response was not valid UTF8: {}", e),
5979 SimpleErrorType::Temporary,
5980 )
5981 })
5982 .and_then(|body| {
5983 serde_json::from_str::<models::ConversionResponse>(body)
5984 .map_err(|e| e.into())
5985 })
5986 }
5987 code => {
5988 let headers = response.headers.clone();
5989 let mut body = Vec::new();
5990 let result = response.read_to_end(&mut body);
5991 let err_type = match response.status.is_server_error() {
5992 false => SimpleErrorType::Permanent,
5993 true => SimpleErrorType::Temporary,
5994 };
5995 Err(ApiError::new(
5996 format!(
5997 "Unexpected response code {}:\n{:?}\n\n{}",
5998 code,
5999 headers,
6000 match result {
6001 Ok(_) => match str::from_utf8(&body) {
6002 Ok(body) => Cow::from(body),
6003 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6004 },
6005 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6006 }
6007 ),
6008 err_type,
6009 ))
6010 }
6011 })
6012 }
6013}
6014
6015impl UsersApi for Client {
6016 type Error = ApiError;
6017
6018 fn accept_terms_and_conditions(&self) -> Result<(), ApiError> {
6019 let mut url = format!("{}/v1/users/terms_and_conditions", self.base_path);
6020
6021 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6022
6023 let query_string_str = query_string.finish();
6024 if !query_string_str.is_empty() {
6025 url += "?";
6026 url += &query_string_str;
6027 }
6028
6029 let url = match Url::from_str(&url) {
6030 Ok(url) => url,
6031 Err(err) => {
6032 return Err(ApiError::new(
6033 format!("Unable to build URL: {}", err),
6034 SimpleErrorType::Permanent,
6035 ))
6036 }
6037 };
6038
6039 let mut request = self.hyper_client.request(Method::Patch, url);
6040 request = request.headers(self.headers.clone());
6041
6042 request
6043 .send()
6044 .map_err(|e| {
6045 ApiError::new(
6046 format!("No response received: {}", e),
6047 SimpleErrorType::Permanent,
6048 )
6049 })
6050 .and_then(|mut response| match response.status.to_u16() {
6051 204 => {
6052 let mut body = Vec::new();
6053 response.read_to_end(&mut body).map_err(|e| {
6054 ApiError::new(
6055 format!("Failed to read response: {}", e),
6056 SimpleErrorType::Temporary,
6057 )
6058 })?;
6059
6060 Ok(())
6061 }
6062 code => {
6063 let headers = response.headers.clone();
6064 let mut body = Vec::new();
6065 let result = response.read_to_end(&mut body);
6066 let err_type = match response.status.is_server_error() {
6067 false => SimpleErrorType::Permanent,
6068 true => SimpleErrorType::Temporary,
6069 };
6070 Err(ApiError::new(
6071 format!(
6072 "Unexpected response code {}:\n{:?}\n\n{}",
6073 code,
6074 headers,
6075 match result {
6076 Ok(_) => match str::from_utf8(&body) {
6077 Ok(body) => Cow::from(body),
6078 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6079 },
6080 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6081 }
6082 ),
6083 err_type,
6084 ))
6085 }
6086 })
6087 }
6088
6089 fn change_password(&self, param_body: models::PasswordChangeRequest) -> Result<(), ApiError> {
6090 let mut url = format!("{}/v1/users/change_password", self.base_path);
6091
6092 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6093
6094 let query_string_str = query_string.finish();
6095 if !query_string_str.is_empty() {
6096 url += "?";
6097 url += &query_string_str;
6098 }
6099
6100 let url = match Url::from_str(&url) {
6101 Ok(url) => url,
6102 Err(err) => {
6103 return Err(ApiError::new(
6104 format!("Unable to build URL: {}", err),
6105 SimpleErrorType::Permanent,
6106 ))
6107 }
6108 };
6109
6110 let mut request = self.hyper_client.request(Method::Post, url);
6111 request = request.headers(self.headers.clone());
6112 let body = serde_json::to_string(¶m_body)
6113 .expect("impossible to fail to serialize")
6114 .into_bytes();
6115 request = request.body(body.as_slice());
6116
6117 request = request.header(ContentType(mimetypes::requests::CHANGE_PASSWORD.clone()));
6118
6119 request
6120 .send()
6121 .map_err(|e| {
6122 ApiError::new(
6123 format!("No response received: {}", e),
6124 SimpleErrorType::Permanent,
6125 )
6126 })
6127 .and_then(|mut response| match response.status.to_u16() {
6128 204 => {
6129 let mut body = Vec::new();
6130 response.read_to_end(&mut body).map_err(|e| {
6131 ApiError::new(
6132 format!("Failed to read response: {}", e),
6133 SimpleErrorType::Temporary,
6134 )
6135 })?;
6136
6137 Ok(())
6138 }
6139 code => {
6140 let headers = response.headers.clone();
6141 let mut body = Vec::new();
6142 let result = response.read_to_end(&mut body);
6143 let err_type = match response.status.is_server_error() {
6144 false => SimpleErrorType::Permanent,
6145 true => SimpleErrorType::Temporary,
6146 };
6147 Err(ApiError::new(
6148 format!(
6149 "Unexpected response code {}:\n{:?}\n\n{}",
6150 code,
6151 headers,
6152 match result {
6153 Ok(_) => match str::from_utf8(&body) {
6154 Ok(body) => Cow::from(body),
6155 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6156 },
6157 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6158 }
6159 ),
6160 err_type,
6161 ))
6162 }
6163 })
6164 }
6165
6166 fn confirm_email(
6167 &self,
6168 param_body: models::ConfirmEmailRequest,
6169 ) -> Result<models::ConfirmEmailResponse, ApiError> {
6170 let mut url = format!("{}/v1/users/confirm_email", self.base_path);
6171
6172 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6173
6174 let query_string_str = query_string.finish();
6175 if !query_string_str.is_empty() {
6176 url += "?";
6177 url += &query_string_str;
6178 }
6179
6180 let url = match Url::from_str(&url) {
6181 Ok(url) => url,
6182 Err(err) => {
6183 return Err(ApiError::new(
6184 format!("Unable to build URL: {}", err),
6185 SimpleErrorType::Permanent,
6186 ))
6187 }
6188 };
6189
6190 let mut request = self.hyper_client.request(Method::Post, url);
6191 request = request.headers(self.headers.clone());
6192 let body = serde_json::to_string(¶m_body)
6193 .expect("impossible to fail to serialize")
6194 .into_bytes();
6195 request = request.body(body.as_slice());
6196
6197 request = request.header(ContentType(mimetypes::requests::CONFIRM_EMAIL.clone()));
6198
6199 request
6200 .send()
6201 .map_err(|e| {
6202 ApiError::new(
6203 format!("No response received: {}", e),
6204 SimpleErrorType::Permanent,
6205 )
6206 })
6207 .and_then(|mut response| match response.status.to_u16() {
6208 200 => {
6209 let mut body = Vec::new();
6210 response.read_to_end(&mut body).map_err(|e| {
6211 ApiError::new(
6212 format!("Failed to read response: {}", e),
6213 SimpleErrorType::Temporary,
6214 )
6215 })?;
6216 str::from_utf8(&body)
6217 .map_err(|e| {
6218 ApiError::new(
6219 format!("Response was not valid UTF8: {}", e),
6220 SimpleErrorType::Temporary,
6221 )
6222 })
6223 .and_then(|body| {
6224 serde_json::from_str::<models::ConfirmEmailResponse>(body)
6225 .map_err(|e| e.into())
6226 })
6227 }
6228 code => {
6229 let headers = response.headers.clone();
6230 let mut body = Vec::new();
6231 let result = response.read_to_end(&mut body);
6232 let err_type = match response.status.is_server_error() {
6233 false => SimpleErrorType::Permanent,
6234 true => SimpleErrorType::Temporary,
6235 };
6236 Err(ApiError::new(
6237 format!(
6238 "Unexpected response code {}:\n{:?}\n\n{}",
6239 code,
6240 headers,
6241 match result {
6242 Ok(_) => match str::from_utf8(&body) {
6243 Ok(body) => Cow::from(body),
6244 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6245 },
6246 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6247 }
6248 ),
6249 err_type,
6250 ))
6251 }
6252 })
6253 }
6254
6255 fn create_user(&self, param_body: models::SignupRequest) -> Result<models::User, ApiError> {
6256 let mut url = format!("{}/v1/users", self.base_path);
6257
6258 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6259
6260 let query_string_str = query_string.finish();
6261 if !query_string_str.is_empty() {
6262 url += "?";
6263 url += &query_string_str;
6264 }
6265
6266 let url = match Url::from_str(&url) {
6267 Ok(url) => url,
6268 Err(err) => {
6269 return Err(ApiError::new(
6270 format!("Unable to build URL: {}", err),
6271 SimpleErrorType::Permanent,
6272 ))
6273 }
6274 };
6275
6276 let mut request = self.hyper_client.request(Method::Post, url);
6277 request = request.headers(self.headers.clone());
6278 let body = serde_json::to_string(¶m_body)
6279 .expect("impossible to fail to serialize")
6280 .into_bytes();
6281 request = request.body(body.as_slice());
6282
6283 request = request.header(ContentType(mimetypes::requests::CREATE_USER.clone()));
6284
6285 request
6286 .send()
6287 .map_err(|e| {
6288 ApiError::new(
6289 format!("No response received: {}", e),
6290 SimpleErrorType::Permanent,
6291 )
6292 })
6293 .and_then(|mut response| match response.status.to_u16() {
6294 201 => {
6295 let mut body = Vec::new();
6296 response.read_to_end(&mut body).map_err(|e| {
6297 ApiError::new(
6298 format!("Failed to read response: {}", e),
6299 SimpleErrorType::Temporary,
6300 )
6301 })?;
6302 str::from_utf8(&body)
6303 .map_err(|e| {
6304 ApiError::new(
6305 format!("Response was not valid UTF8: {}", e),
6306 SimpleErrorType::Temporary,
6307 )
6308 })
6309 .and_then(|body| {
6310 serde_json::from_str::<models::User>(body).map_err(|e| e.into())
6311 })
6312 }
6313 code => {
6314 let headers = response.headers.clone();
6315 let mut body = Vec::new();
6316 let result = response.read_to_end(&mut body);
6317 let err_type = match response.status.is_server_error() {
6318 false => SimpleErrorType::Permanent,
6319 true => SimpleErrorType::Temporary,
6320 };
6321 Err(ApiError::new(
6322 format!(
6323 "Unexpected response code {}:\n{:?}\n\n{}",
6324 code,
6325 headers,
6326 match result {
6327 Ok(_) => match str::from_utf8(&body) {
6328 Ok(body) => Cow::from(body),
6329 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6330 },
6331 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6332 }
6333 ),
6334 err_type,
6335 ))
6336 }
6337 })
6338 }
6339
6340 fn delete_user_account(&self, param_user_id: uuid::Uuid) -> Result<(), ApiError> {
6341 let mut url = format!(
6342 "{}/v1/users/{user_id}",
6343 self.base_path,
6344 user_id = utf8_percent_encode(¶m_user_id.to_string(), ID_ENCODE_SET)
6345 );
6346
6347 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6348
6349 let query_string_str = query_string.finish();
6350 if !query_string_str.is_empty() {
6351 url += "?";
6352 url += &query_string_str;
6353 }
6354
6355 let url = match Url::from_str(&url) {
6356 Ok(url) => url,
6357 Err(err) => {
6358 return Err(ApiError::new(
6359 format!("Unable to build URL: {}", err),
6360 SimpleErrorType::Permanent,
6361 ))
6362 }
6363 };
6364
6365 let mut request = self.hyper_client.request(Method::Delete, url);
6366 request = request.headers(self.headers.clone());
6367
6368 request
6369 .send()
6370 .map_err(|e| {
6371 ApiError::new(
6372 format!("No response received: {}", e),
6373 SimpleErrorType::Permanent,
6374 )
6375 })
6376 .and_then(|mut response| match response.status.to_u16() {
6377 204 => {
6378 let mut body = Vec::new();
6379 response.read_to_end(&mut body).map_err(|e| {
6380 ApiError::new(
6381 format!("Failed to read response: {}", e),
6382 SimpleErrorType::Temporary,
6383 )
6384 })?;
6385
6386 Ok(())
6387 }
6388 code => {
6389 let headers = response.headers.clone();
6390 let mut body = Vec::new();
6391 let result = response.read_to_end(&mut body);
6392 let err_type = match response.status.is_server_error() {
6393 false => SimpleErrorType::Permanent,
6394 true => SimpleErrorType::Temporary,
6395 };
6396 Err(ApiError::new(
6397 format!(
6398 "Unexpected response code {}:\n{:?}\n\n{}",
6399 code,
6400 headers,
6401 match result {
6402 Ok(_) => match str::from_utf8(&body) {
6403 Ok(body) => Cow::from(body),
6404 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6405 },
6406 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6407 }
6408 ),
6409 err_type,
6410 ))
6411 }
6412 })
6413 }
6414
6415 fn delete_user_from_account(&self, param_user_id: uuid::Uuid) -> Result<(), ApiError> {
6416 let mut url = format!(
6417 "{}/v1/users/{user_id}/accounts",
6418 self.base_path,
6419 user_id = utf8_percent_encode(¶m_user_id.to_string(), ID_ENCODE_SET)
6420 );
6421
6422 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6423
6424 let query_string_str = query_string.finish();
6425 if !query_string_str.is_empty() {
6426 url += "?";
6427 url += &query_string_str;
6428 }
6429
6430 let url = match Url::from_str(&url) {
6431 Ok(url) => url,
6432 Err(err) => {
6433 return Err(ApiError::new(
6434 format!("Unable to build URL: {}", err),
6435 SimpleErrorType::Permanent,
6436 ))
6437 }
6438 };
6439
6440 let mut request = self.hyper_client.request(Method::Delete, url);
6441 request = request.headers(self.headers.clone());
6442
6443 request
6444 .send()
6445 .map_err(|e| {
6446 ApiError::new(
6447 format!("No response received: {}", e),
6448 SimpleErrorType::Permanent,
6449 )
6450 })
6451 .and_then(|mut response| match response.status.to_u16() {
6452 204 => {
6453 let mut body = Vec::new();
6454 response.read_to_end(&mut body).map_err(|e| {
6455 ApiError::new(
6456 format!("Failed to read response: {}", e),
6457 SimpleErrorType::Temporary,
6458 )
6459 })?;
6460
6461 Ok(())
6462 }
6463 code => {
6464 let headers = response.headers.clone();
6465 let mut body = Vec::new();
6466 let result = response.read_to_end(&mut body);
6467 let err_type = match response.status.is_server_error() {
6468 false => SimpleErrorType::Permanent,
6469 true => SimpleErrorType::Temporary,
6470 };
6471 Err(ApiError::new(
6472 format!(
6473 "Unexpected response code {}:\n{:?}\n\n{}",
6474 code,
6475 headers,
6476 match result {
6477 Ok(_) => match str::from_utf8(&body) {
6478 Ok(body) => Cow::from(body),
6479 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6480 },
6481 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6482 }
6483 ),
6484 err_type,
6485 ))
6486 }
6487 })
6488 }
6489
6490 fn forgot_password(&self, param_body: models::ForgotPasswordRequest) -> Result<(), ApiError> {
6491 let mut url = format!("{}/v1/users/forgot_password", self.base_path);
6492
6493 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6494
6495 let query_string_str = query_string.finish();
6496 if !query_string_str.is_empty() {
6497 url += "?";
6498 url += &query_string_str;
6499 }
6500
6501 let url = match Url::from_str(&url) {
6502 Ok(url) => url,
6503 Err(err) => {
6504 return Err(ApiError::new(
6505 format!("Unable to build URL: {}", err),
6506 SimpleErrorType::Permanent,
6507 ))
6508 }
6509 };
6510
6511 let mut request = self.hyper_client.request(Method::Post, url);
6512 request = request.headers(self.headers.clone());
6513 let body = serde_json::to_string(¶m_body)
6514 .expect("impossible to fail to serialize")
6515 .into_bytes();
6516 request = request.body(body.as_slice());
6517
6518 request = request.header(ContentType(mimetypes::requests::FORGOT_PASSWORD.clone()));
6519
6520 request
6521 .send()
6522 .map_err(|e| {
6523 ApiError::new(
6524 format!("No response received: {}", e),
6525 SimpleErrorType::Permanent,
6526 )
6527 })
6528 .and_then(|mut response| match response.status.to_u16() {
6529 204 => {
6530 let mut body = Vec::new();
6531 response.read_to_end(&mut body).map_err(|e| {
6532 ApiError::new(
6533 format!("Failed to read response: {}", e),
6534 SimpleErrorType::Temporary,
6535 )
6536 })?;
6537
6538 Ok(())
6539 }
6540 code => {
6541 let headers = response.headers.clone();
6542 let mut body = Vec::new();
6543 let result = response.read_to_end(&mut body);
6544 let err_type = match response.status.is_server_error() {
6545 false => SimpleErrorType::Permanent,
6546 true => SimpleErrorType::Temporary,
6547 };
6548 Err(ApiError::new(
6549 format!(
6550 "Unexpected response code {}:\n{:?}\n\n{}",
6551 code,
6552 headers,
6553 match result {
6554 Ok(_) => match str::from_utf8(&body) {
6555 Ok(body) => Cow::from(body),
6556 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6557 },
6558 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6559 }
6560 ),
6561 err_type,
6562 ))
6563 }
6564 })
6565 }
6566
6567 fn get_all_users(
6568 &self,
6569 param_all_search: Option<String>,
6570 param_limit: Option<i32>,
6571 param_offset: Option<i32>,
6572 param_sort_by: Option<String>,
6573 ) -> Result<models::GetAllUsersResponse, ApiError> {
6574 let mut url = format!("{}/v1/users", self.base_path);
6575
6576 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6577
6578 if let Some(all_search) = param_all_search {
6579 query_string.append_pair("all_search", &all_search.to_string());
6580 }
6581 if let Some(limit) = param_limit {
6582 query_string.append_pair("limit", &limit.to_string());
6583 }
6584 if let Some(offset) = param_offset {
6585 query_string.append_pair("offset", &offset.to_string());
6586 }
6587 if let Some(sort_by) = param_sort_by {
6588 query_string.append_pair("sort_by", &sort_by.to_string());
6589 }
6590 let query_string_str = query_string.finish();
6591 if !query_string_str.is_empty() {
6592 url += "?";
6593 url += &query_string_str;
6594 }
6595
6596 let url = match Url::from_str(&url) {
6597 Ok(url) => url,
6598 Err(err) => {
6599 return Err(ApiError::new(
6600 format!("Unable to build URL: {}", err),
6601 SimpleErrorType::Permanent,
6602 ))
6603 }
6604 };
6605
6606 let mut request = self.hyper_client.request(Method::Get, url);
6607 request = request.headers(self.headers.clone());
6608
6609 request
6610 .send()
6611 .map_err(|e| {
6612 ApiError::new(
6613 format!("No response received: {}", e),
6614 SimpleErrorType::Permanent,
6615 )
6616 })
6617 .and_then(|mut response| match response.status.to_u16() {
6618 200 => {
6619 let mut body = Vec::new();
6620 response.read_to_end(&mut body).map_err(|e| {
6621 ApiError::new(
6622 format!("Failed to read response: {}", e),
6623 SimpleErrorType::Temporary,
6624 )
6625 })?;
6626 str::from_utf8(&body)
6627 .map_err(|e| {
6628 ApiError::new(
6629 format!("Response was not valid UTF8: {}", e),
6630 SimpleErrorType::Temporary,
6631 )
6632 })
6633 .and_then(|body| {
6634 serde_json::from_str::<models::GetAllUsersResponse>(body)
6635 .map_err(|e| e.into())
6636 })
6637 }
6638 code => {
6639 let headers = response.headers.clone();
6640 let mut body = Vec::new();
6641 let result = response.read_to_end(&mut body);
6642 let err_type = match response.status.is_server_error() {
6643 false => SimpleErrorType::Permanent,
6644 true => SimpleErrorType::Temporary,
6645 };
6646 Err(ApiError::new(
6647 format!(
6648 "Unexpected response code {}:\n{:?}\n\n{}",
6649 code,
6650 headers,
6651 match result {
6652 Ok(_) => match str::from_utf8(&body) {
6653 Ok(body) => Cow::from(body),
6654 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6655 },
6656 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6657 }
6658 ),
6659 err_type,
6660 ))
6661 }
6662 })
6663 }
6664
6665 fn get_logged_in_user(&self) -> Result<models::User, ApiError> {
6666 let mut url = format!("{}/v1/user", self.base_path);
6667
6668 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6669
6670 let query_string_str = query_string.finish();
6671 if !query_string_str.is_empty() {
6672 url += "?";
6673 url += &query_string_str;
6674 }
6675
6676 let url = match Url::from_str(&url) {
6677 Ok(url) => url,
6678 Err(err) => {
6679 return Err(ApiError::new(
6680 format!("Unable to build URL: {}", err),
6681 SimpleErrorType::Permanent,
6682 ))
6683 }
6684 };
6685
6686 let mut request = self.hyper_client.request(Method::Get, url);
6687 request = request.headers(self.headers.clone());
6688
6689 request
6690 .send()
6691 .map_err(|e| {
6692 ApiError::new(
6693 format!("No response received: {}", e),
6694 SimpleErrorType::Permanent,
6695 )
6696 })
6697 .and_then(|mut response| match response.status.to_u16() {
6698 200 => {
6699 let mut body = Vec::new();
6700 response.read_to_end(&mut body).map_err(|e| {
6701 ApiError::new(
6702 format!("Failed to read response: {}", e),
6703 SimpleErrorType::Temporary,
6704 )
6705 })?;
6706 str::from_utf8(&body)
6707 .map_err(|e| {
6708 ApiError::new(
6709 format!("Response was not valid UTF8: {}", e),
6710 SimpleErrorType::Temporary,
6711 )
6712 })
6713 .and_then(|body| {
6714 serde_json::from_str::<models::User>(body).map_err(|e| e.into())
6715 })
6716 }
6717 code => {
6718 let headers = response.headers.clone();
6719 let mut body = Vec::new();
6720 let result = response.read_to_end(&mut body);
6721 let err_type = match response.status.is_server_error() {
6722 false => SimpleErrorType::Permanent,
6723 true => SimpleErrorType::Temporary,
6724 };
6725 Err(ApiError::new(
6726 format!(
6727 "Unexpected response code {}:\n{:?}\n\n{}",
6728 code,
6729 headers,
6730 match result {
6731 Ok(_) => match str::from_utf8(&body) {
6732 Ok(body) => Cow::from(body),
6733 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6734 },
6735 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6736 }
6737 ),
6738 err_type,
6739 ))
6740 }
6741 })
6742 }
6743
6744 fn get_user(&self, param_user_id: uuid::Uuid) -> Result<models::User, ApiError> {
6745 let mut url = format!(
6746 "{}/v1/users/{user_id}",
6747 self.base_path,
6748 user_id = utf8_percent_encode(¶m_user_id.to_string(), ID_ENCODE_SET)
6749 );
6750
6751 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6752
6753 let query_string_str = query_string.finish();
6754 if !query_string_str.is_empty() {
6755 url += "?";
6756 url += &query_string_str;
6757 }
6758
6759 let url = match Url::from_str(&url) {
6760 Ok(url) => url,
6761 Err(err) => {
6762 return Err(ApiError::new(
6763 format!("Unable to build URL: {}", err),
6764 SimpleErrorType::Permanent,
6765 ))
6766 }
6767 };
6768
6769 let mut request = self.hyper_client.request(Method::Get, url);
6770 request = request.headers(self.headers.clone());
6771
6772 request
6773 .send()
6774 .map_err(|e| {
6775 ApiError::new(
6776 format!("No response received: {}", e),
6777 SimpleErrorType::Permanent,
6778 )
6779 })
6780 .and_then(|mut response| match response.status.to_u16() {
6781 200 => {
6782 let mut body = Vec::new();
6783 response.read_to_end(&mut body).map_err(|e| {
6784 ApiError::new(
6785 format!("Failed to read response: {}", e),
6786 SimpleErrorType::Temporary,
6787 )
6788 })?;
6789 str::from_utf8(&body)
6790 .map_err(|e| {
6791 ApiError::new(
6792 format!("Response was not valid UTF8: {}", e),
6793 SimpleErrorType::Temporary,
6794 )
6795 })
6796 .and_then(|body| {
6797 serde_json::from_str::<models::User>(body).map_err(|e| e.into())
6798 })
6799 }
6800 code => {
6801 let headers = response.headers.clone();
6802 let mut body = Vec::new();
6803 let result = response.read_to_end(&mut body);
6804 let err_type = match response.status.is_server_error() {
6805 false => SimpleErrorType::Permanent,
6806 true => SimpleErrorType::Temporary,
6807 };
6808 Err(ApiError::new(
6809 format!(
6810 "Unexpected response code {}:\n{:?}\n\n{}",
6811 code,
6812 headers,
6813 match result {
6814 Ok(_) => match str::from_utf8(&body) {
6815 Ok(body) => Cow::from(body),
6816 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6817 },
6818 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6819 }
6820 ),
6821 err_type,
6822 ))
6823 }
6824 })
6825 }
6826
6827 fn invite_user(&self, param_body: models::InviteUserRequest) -> Result<models::User, ApiError> {
6828 let mut url = format!("{}/v1/users/invite", self.base_path);
6829
6830 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6831
6832 let query_string_str = query_string.finish();
6833 if !query_string_str.is_empty() {
6834 url += "?";
6835 url += &query_string_str;
6836 }
6837
6838 let url = match Url::from_str(&url) {
6839 Ok(url) => url,
6840 Err(err) => {
6841 return Err(ApiError::new(
6842 format!("Unable to build URL: {}", err),
6843 SimpleErrorType::Permanent,
6844 ))
6845 }
6846 };
6847
6848 let mut request = self.hyper_client.request(Method::Post, url);
6849 request = request.headers(self.headers.clone());
6850 let body = serde_json::to_string(¶m_body)
6851 .expect("impossible to fail to serialize")
6852 .into_bytes();
6853 request = request.body(body.as_slice());
6854
6855 request = request.header(ContentType(mimetypes::requests::INVITE_USER.clone()));
6856
6857 request
6858 .send()
6859 .map_err(|e| {
6860 ApiError::new(
6861 format!("No response received: {}", e),
6862 SimpleErrorType::Permanent,
6863 )
6864 })
6865 .and_then(|mut response| match response.status.to_u16() {
6866 201 => {
6867 let mut body = Vec::new();
6868 response.read_to_end(&mut body).map_err(|e| {
6869 ApiError::new(
6870 format!("Failed to read response: {}", e),
6871 SimpleErrorType::Temporary,
6872 )
6873 })?;
6874 str::from_utf8(&body)
6875 .map_err(|e| {
6876 ApiError::new(
6877 format!("Response was not valid UTF8: {}", e),
6878 SimpleErrorType::Temporary,
6879 )
6880 })
6881 .and_then(|body| {
6882 serde_json::from_str::<models::User>(body).map_err(|e| e.into())
6883 })
6884 }
6885 code => {
6886 let headers = response.headers.clone();
6887 let mut body = Vec::new();
6888 let result = response.read_to_end(&mut body);
6889 let err_type = match response.status.is_server_error() {
6890 false => SimpleErrorType::Permanent,
6891 true => SimpleErrorType::Temporary,
6892 };
6893 Err(ApiError::new(
6894 format!(
6895 "Unexpected response code {}:\n{:?}\n\n{}",
6896 code,
6897 headers,
6898 match result {
6899 Ok(_) => match str::from_utf8(&body) {
6900 Ok(body) => Cow::from(body),
6901 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6902 },
6903 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6904 }
6905 ),
6906 err_type,
6907 ))
6908 }
6909 })
6910 }
6911
6912 fn process_invitations(
6913 &self,
6914 param_body: models::ProcessInviteRequest,
6915 ) -> Result<(), ApiError> {
6916 let mut url = format!("{}/v1/users/process_invite", self.base_path);
6917
6918 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6919
6920 let query_string_str = query_string.finish();
6921 if !query_string_str.is_empty() {
6922 url += "?";
6923 url += &query_string_str;
6924 }
6925
6926 let url = match Url::from_str(&url) {
6927 Ok(url) => url,
6928 Err(err) => {
6929 return Err(ApiError::new(
6930 format!("Unable to build URL: {}", err),
6931 SimpleErrorType::Permanent,
6932 ))
6933 }
6934 };
6935
6936 let mut request = self.hyper_client.request(Method::Post, url);
6937 request = request.headers(self.headers.clone());
6938 let body = serde_json::to_string(¶m_body)
6939 .expect("impossible to fail to serialize")
6940 .into_bytes();
6941 request = request.body(body.as_slice());
6942
6943 request = request.header(ContentType(
6944 mimetypes::requests::PROCESS_INVITATIONS.clone(),
6945 ));
6946
6947 request
6948 .send()
6949 .map_err(|e| {
6950 ApiError::new(
6951 format!("No response received: {}", e),
6952 SimpleErrorType::Permanent,
6953 )
6954 })
6955 .and_then(|mut response| match response.status.to_u16() {
6956 204 => {
6957 let mut body = Vec::new();
6958 response.read_to_end(&mut body).map_err(|e| {
6959 ApiError::new(
6960 format!("Failed to read response: {}", e),
6961 SimpleErrorType::Temporary,
6962 )
6963 })?;
6964
6965 Ok(())
6966 }
6967 code => {
6968 let headers = response.headers.clone();
6969 let mut body = Vec::new();
6970 let result = response.read_to_end(&mut body);
6971 let err_type = match response.status.is_server_error() {
6972 false => SimpleErrorType::Permanent,
6973 true => SimpleErrorType::Temporary,
6974 };
6975 Err(ApiError::new(
6976 format!(
6977 "Unexpected response code {}:\n{:?}\n\n{}",
6978 code,
6979 headers,
6980 match result {
6981 Ok(_) => match str::from_utf8(&body) {
6982 Ok(body) => Cow::from(body),
6983 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
6984 },
6985 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
6986 }
6987 ),
6988 err_type,
6989 ))
6990 }
6991 })
6992 }
6993
6994 fn resend_confirm_email(&self) -> Result<(), ApiError> {
6995 let mut url = format!("{}/v1/users/resend_confirm_email", self.base_path);
6996
6997 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
6998
6999 let query_string_str = query_string.finish();
7000 if !query_string_str.is_empty() {
7001 url += "?";
7002 url += &query_string_str;
7003 }
7004
7005 let url = match Url::from_str(&url) {
7006 Ok(url) => url,
7007 Err(err) => {
7008 return Err(ApiError::new(
7009 format!("Unable to build URL: {}", err),
7010 SimpleErrorType::Permanent,
7011 ))
7012 }
7013 };
7014
7015 let mut request = self.hyper_client.request(Method::Post, url);
7016 request = request.headers(self.headers.clone());
7017
7018 request
7019 .send()
7020 .map_err(|e| {
7021 ApiError::new(
7022 format!("No response received: {}", e),
7023 SimpleErrorType::Permanent,
7024 )
7025 })
7026 .and_then(|mut response| match response.status.to_u16() {
7027 204 => {
7028 let mut body = Vec::new();
7029 response.read_to_end(&mut body).map_err(|e| {
7030 ApiError::new(
7031 format!("Failed to read response: {}", e),
7032 SimpleErrorType::Temporary,
7033 )
7034 })?;
7035
7036 Ok(())
7037 }
7038 code => {
7039 let headers = response.headers.clone();
7040 let mut body = Vec::new();
7041 let result = response.read_to_end(&mut body);
7042 let err_type = match response.status.is_server_error() {
7043 false => SimpleErrorType::Permanent,
7044 true => SimpleErrorType::Temporary,
7045 };
7046 Err(ApiError::new(
7047 format!(
7048 "Unexpected response code {}:\n{:?}\n\n{}",
7049 code,
7050 headers,
7051 match result {
7052 Ok(_) => match str::from_utf8(&body) {
7053 Ok(body) => Cow::from(body),
7054 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7055 },
7056 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7057 }
7058 ),
7059 err_type,
7060 ))
7061 }
7062 })
7063 }
7064
7065 fn resend_invitation(&self, param_user_id: uuid::Uuid) -> Result<(), ApiError> {
7066 let mut url = format!(
7067 "{}/v1/users/{user_id}/resend_invite",
7068 self.base_path,
7069 user_id = utf8_percent_encode(¶m_user_id.to_string(), ID_ENCODE_SET)
7070 );
7071
7072 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7073
7074 let query_string_str = query_string.finish();
7075 if !query_string_str.is_empty() {
7076 url += "?";
7077 url += &query_string_str;
7078 }
7079
7080 let url = match Url::from_str(&url) {
7081 Ok(url) => url,
7082 Err(err) => {
7083 return Err(ApiError::new(
7084 format!("Unable to build URL: {}", err),
7085 SimpleErrorType::Permanent,
7086 ))
7087 }
7088 };
7089
7090 let mut request = self.hyper_client.request(Method::Post, url);
7091 request = request.headers(self.headers.clone());
7092
7093 request
7094 .send()
7095 .map_err(|e| {
7096 ApiError::new(
7097 format!("No response received: {}", e),
7098 SimpleErrorType::Permanent,
7099 )
7100 })
7101 .and_then(|mut response| match response.status.to_u16() {
7102 204 => {
7103 let mut body = Vec::new();
7104 response.read_to_end(&mut body).map_err(|e| {
7105 ApiError::new(
7106 format!("Failed to read response: {}", e),
7107 SimpleErrorType::Temporary,
7108 )
7109 })?;
7110
7111 Ok(())
7112 }
7113 code => {
7114 let headers = response.headers.clone();
7115 let mut body = Vec::new();
7116 let result = response.read_to_end(&mut body);
7117 let err_type = match response.status.is_server_error() {
7118 false => SimpleErrorType::Permanent,
7119 true => SimpleErrorType::Temporary,
7120 };
7121 Err(ApiError::new(
7122 format!(
7123 "Unexpected response code {}:\n{:?}\n\n{}",
7124 code,
7125 headers,
7126 match result {
7127 Ok(_) => match str::from_utf8(&body) {
7128 Ok(body) => Cow::from(body),
7129 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7130 },
7131 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7132 }
7133 ),
7134 err_type,
7135 ))
7136 }
7137 })
7138 }
7139
7140 fn reset_password(
7141 &self,
7142 param_user_id: uuid::Uuid,
7143 param_body: models::PasswordResetRequest,
7144 ) -> Result<(), ApiError> {
7145 let mut url = format!(
7146 "{}/v1/users/{user_id}/reset_password",
7147 self.base_path,
7148 user_id = utf8_percent_encode(¶m_user_id.to_string(), ID_ENCODE_SET)
7149 );
7150
7151 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7152
7153 let query_string_str = query_string.finish();
7154 if !query_string_str.is_empty() {
7155 url += "?";
7156 url += &query_string_str;
7157 }
7158
7159 let url = match Url::from_str(&url) {
7160 Ok(url) => url,
7161 Err(err) => {
7162 return Err(ApiError::new(
7163 format!("Unable to build URL: {}", err),
7164 SimpleErrorType::Permanent,
7165 ))
7166 }
7167 };
7168
7169 let mut request = self.hyper_client.request(Method::Post, url);
7170 request = request.headers(self.headers.clone());
7171 let body = serde_json::to_string(¶m_body)
7172 .expect("impossible to fail to serialize")
7173 .into_bytes();
7174 request = request.body(body.as_slice());
7175
7176 request = request.header(ContentType(mimetypes::requests::RESET_PASSWORD.clone()));
7177
7178 request
7179 .send()
7180 .map_err(|e| {
7181 ApiError::new(
7182 format!("No response received: {}", e),
7183 SimpleErrorType::Permanent,
7184 )
7185 })
7186 .and_then(|mut response| match response.status.to_u16() {
7187 204 => {
7188 let mut body = Vec::new();
7189 response.read_to_end(&mut body).map_err(|e| {
7190 ApiError::new(
7191 format!("Failed to read response: {}", e),
7192 SimpleErrorType::Temporary,
7193 )
7194 })?;
7195
7196 Ok(())
7197 }
7198 code => {
7199 let headers = response.headers.clone();
7200 let mut body = Vec::new();
7201 let result = response.read_to_end(&mut body);
7202 let err_type = match response.status.is_server_error() {
7203 false => SimpleErrorType::Permanent,
7204 true => SimpleErrorType::Temporary,
7205 };
7206 Err(ApiError::new(
7207 format!(
7208 "Unexpected response code {}:\n{:?}\n\n{}",
7209 code,
7210 headers,
7211 match result {
7212 Ok(_) => match str::from_utf8(&body) {
7213 Ok(body) => Cow::from(body),
7214 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7215 },
7216 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7217 }
7218 ),
7219 err_type,
7220 ))
7221 }
7222 })
7223 }
7224
7225 fn update_user(
7226 &self,
7227 param_user_id: uuid::Uuid,
7228 param_body: models::UpdateUserRequest,
7229 ) -> Result<models::User, ApiError> {
7230 let mut url = format!(
7231 "{}/v1/users/{user_id}",
7232 self.base_path,
7233 user_id = utf8_percent_encode(¶m_user_id.to_string(), ID_ENCODE_SET)
7234 );
7235
7236 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7237
7238 let query_string_str = query_string.finish();
7239 if !query_string_str.is_empty() {
7240 url += "?";
7241 url += &query_string_str;
7242 }
7243
7244 let url = match Url::from_str(&url) {
7245 Ok(url) => url,
7246 Err(err) => {
7247 return Err(ApiError::new(
7248 format!("Unable to build URL: {}", err),
7249 SimpleErrorType::Permanent,
7250 ))
7251 }
7252 };
7253
7254 let mut request = self.hyper_client.request(Method::Patch, url);
7255 request = request.headers(self.headers.clone());
7256 let body = serde_json::to_string(¶m_body)
7257 .expect("impossible to fail to serialize")
7258 .into_bytes();
7259 request = request.body(body.as_slice());
7260
7261 request = request.header(ContentType(mimetypes::requests::UPDATE_USER.clone()));
7262
7263 request
7264 .send()
7265 .map_err(|e| {
7266 ApiError::new(
7267 format!("No response received: {}", e),
7268 SimpleErrorType::Permanent,
7269 )
7270 })
7271 .and_then(|mut response| match response.status.to_u16() {
7272 200 => {
7273 let mut body = Vec::new();
7274 response.read_to_end(&mut body).map_err(|e| {
7275 ApiError::new(
7276 format!("Failed to read response: {}", e),
7277 SimpleErrorType::Temporary,
7278 )
7279 })?;
7280 str::from_utf8(&body)
7281 .map_err(|e| {
7282 ApiError::new(
7283 format!("Response was not valid UTF8: {}", e),
7284 SimpleErrorType::Temporary,
7285 )
7286 })
7287 .and_then(|body| {
7288 serde_json::from_str::<models::User>(body).map_err(|e| e.into())
7289 })
7290 }
7291 code => {
7292 let headers = response.headers.clone();
7293 let mut body = Vec::new();
7294 let result = response.read_to_end(&mut body);
7295 let err_type = match response.status.is_server_error() {
7296 false => SimpleErrorType::Permanent,
7297 true => SimpleErrorType::Temporary,
7298 };
7299 Err(ApiError::new(
7300 format!(
7301 "Unexpected response code {}:\n{:?}\n\n{}",
7302 code,
7303 headers,
7304 match result {
7305 Ok(_) => match str::from_utf8(&body) {
7306 Ok(body) => Cow::from(body),
7307 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7308 },
7309 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7310 }
7311 ),
7312 err_type,
7313 ))
7314 }
7315 })
7316 }
7317
7318 fn validate_password_reset_token(
7319 &self,
7320 param_user_id: uuid::Uuid,
7321 param_body: models::ValidateTokenRequest,
7322 ) -> Result<models::ValidateTokenResponse, ApiError> {
7323 let mut url = format!(
7324 "{}/v1/users/{user_id}/validate_token",
7325 self.base_path,
7326 user_id = utf8_percent_encode(¶m_user_id.to_string(), ID_ENCODE_SET)
7327 );
7328
7329 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7330
7331 let query_string_str = query_string.finish();
7332 if !query_string_str.is_empty() {
7333 url += "?";
7334 url += &query_string_str;
7335 }
7336
7337 let url = match Url::from_str(&url) {
7338 Ok(url) => url,
7339 Err(err) => {
7340 return Err(ApiError::new(
7341 format!("Unable to build URL: {}", err),
7342 SimpleErrorType::Permanent,
7343 ))
7344 }
7345 };
7346
7347 let mut request = self.hyper_client.request(Method::Post, url);
7348 request = request.headers(self.headers.clone());
7349 let body = serde_json::to_string(¶m_body)
7350 .expect("impossible to fail to serialize")
7351 .into_bytes();
7352 request = request.body(body.as_slice());
7353
7354 request = request.header(ContentType(
7355 mimetypes::requests::VALIDATE_PASSWORD_RESET_TOKEN.clone(),
7356 ));
7357
7358 request
7359 .send()
7360 .map_err(|e| {
7361 ApiError::new(
7362 format!("No response received: {}", e),
7363 SimpleErrorType::Permanent,
7364 )
7365 })
7366 .and_then(|mut response| match response.status.to_u16() {
7367 200 => {
7368 let mut body = Vec::new();
7369 response.read_to_end(&mut body).map_err(|e| {
7370 ApiError::new(
7371 format!("Failed to read response: {}", e),
7372 SimpleErrorType::Temporary,
7373 )
7374 })?;
7375 str::from_utf8(&body)
7376 .map_err(|e| {
7377 ApiError::new(
7378 format!("Response was not valid UTF8: {}", e),
7379 SimpleErrorType::Temporary,
7380 )
7381 })
7382 .and_then(|body| {
7383 serde_json::from_str::<models::ValidateTokenResponse>(body)
7384 .map_err(|e| e.into())
7385 })
7386 }
7387 code => {
7388 let headers = response.headers.clone();
7389 let mut body = Vec::new();
7390 let result = response.read_to_end(&mut body);
7391 let err_type = match response.status.is_server_error() {
7392 false => SimpleErrorType::Permanent,
7393 true => SimpleErrorType::Temporary,
7394 };
7395 Err(ApiError::new(
7396 format!(
7397 "Unexpected response code {}:\n{:?}\n\n{}",
7398 code,
7399 headers,
7400 match result {
7401 Ok(_) => match str::from_utf8(&body) {
7402 Ok(body) => Cow::from(body),
7403 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7404 },
7405 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7406 }
7407 ),
7408 err_type,
7409 ))
7410 }
7411 })
7412 }
7413}
7414
7415impl WorkflowApi for Client {
7416 type Error = ApiError;
7417
7418 fn create_workflow_graph(
7419 &self,
7420 param_body: models::CreateWorkflowGraph,
7421 ) -> Result<models::WorkflowGraph, ApiError> {
7422 let mut url = format!("{}/v1/workflows/draft/graphs", self.base_path);
7423
7424 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7425
7426 let query_string_str = query_string.finish();
7427 if !query_string_str.is_empty() {
7428 url += "?";
7429 url += &query_string_str;
7430 }
7431
7432 let url = match Url::from_str(&url) {
7433 Ok(url) => url,
7434 Err(err) => {
7435 return Err(ApiError::new(
7436 format!("Unable to build URL: {}", err),
7437 SimpleErrorType::Permanent,
7438 ))
7439 }
7440 };
7441
7442 let mut request = self.hyper_client.request(Method::Post, url);
7443 request = request.headers(self.headers.clone());
7444 let body = serde_json::to_string(¶m_body)
7446 .expect("impossible to fail to serialize")
7447 .into_bytes();
7448 request = request.body(body.as_slice());
7449
7450 request = request.header(ContentType(
7451 mimetypes::requests::CREATE_WORKFLOW_GRAPH.clone(),
7452 ));
7453
7454 request
7455 .send()
7456 .map_err(|e| {
7457 ApiError::new(
7458 format!("No response received: {}", e),
7459 SimpleErrorType::Permanent,
7460 )
7461 })
7462 .and_then(|mut response| match response.status.to_u16() {
7463 200 => {
7464 let mut body = Vec::new();
7465 response.read_to_end(&mut body).map_err(|e| {
7466 ApiError::new(
7467 format!("Failed to read response: {}", e),
7468 SimpleErrorType::Temporary,
7469 )
7470 })?;
7471 str::from_utf8(&body)
7472 .map_err(|e| {
7473 ApiError::new(
7474 format!("Response was not valid UTF8: {}", e),
7475 SimpleErrorType::Temporary,
7476 )
7477 })
7478 .and_then(|body| {
7479 serde_json::from_str::<models::WorkflowGraph>(body)
7480 .map_err(|e| e.into())
7481 })
7482 }
7483 code => {
7484 let headers = response.headers.clone();
7485 let mut body = Vec::new();
7486 let result = response.read_to_end(&mut body);
7487 let err_type = match response.status.is_server_error() {
7488 false => SimpleErrorType::Permanent,
7489 true => SimpleErrorType::Temporary,
7490 };
7491 Err(ApiError::new(
7492 format!(
7493 "Unexpected response code {}:\n{:?}\n\n{}",
7494 code,
7495 headers,
7496 match result {
7497 Ok(_) => match str::from_utf8(&body) {
7498 Ok(body) => Cow::from(body),
7499 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7500 },
7501 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7502 }
7503 ),
7504 err_type,
7505 ))
7506 }
7507 })
7508 }
7509
7510 fn delete_workflow_graph(&self, param_graph_id: uuid::Uuid) -> Result<(), ApiError> {
7511 let mut url = format!(
7512 "{}/v1/workflows/draft/graphs/{graph_id}",
7513 self.base_path,
7514 graph_id = utf8_percent_encode(¶m_graph_id.to_string(), ID_ENCODE_SET)
7515 );
7516
7517 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7518
7519 let query_string_str = query_string.finish();
7520 if !query_string_str.is_empty() {
7521 url += "?";
7522 url += &query_string_str;
7523 }
7524
7525 let url = match Url::from_str(&url) {
7526 Ok(url) => url,
7527 Err(err) => {
7528 return Err(ApiError::new(
7529 format!("Unable to build URL: {}", err),
7530 SimpleErrorType::Permanent,
7531 ))
7532 }
7533 };
7534
7535 let mut request = self.hyper_client.request(Method::Delete, url);
7536 request = request.headers(self.headers.clone());
7537
7538 request
7539 .send()
7540 .map_err(|e| {
7541 ApiError::new(
7542 format!("No response received: {}", e),
7543 SimpleErrorType::Permanent,
7544 )
7545 })
7546 .and_then(|mut response| match response.status.to_u16() {
7547 204 => {
7548 let mut body = Vec::new();
7549 response.read_to_end(&mut body).map_err(|e| {
7550 ApiError::new(
7551 format!("Failed to read response: {}", e),
7552 SimpleErrorType::Temporary,
7553 )
7554 })?;
7555
7556 Ok(())
7557 }
7558 code => {
7559 let headers = response.headers.clone();
7560 let mut body = Vec::new();
7561 let result = response.read_to_end(&mut body);
7562 let err_type = match response.status.is_server_error() {
7563 false => SimpleErrorType::Permanent,
7564 true => SimpleErrorType::Temporary,
7565 };
7566 Err(ApiError::new(
7567 format!(
7568 "Unexpected response code {}:\n{:?}\n\n{}",
7569 code,
7570 headers,
7571 match result {
7572 Ok(_) => match str::from_utf8(&body) {
7573 Ok(body) => Cow::from(body),
7574 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7575 },
7576 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7577 }
7578 ),
7579 err_type,
7580 ))
7581 }
7582 })
7583 }
7584
7585 fn get_all_workflow_graphs(
7586 &self,
7587 param_name: Option<String>,
7588 param_description: Option<String>,
7589 param_all_search: Option<String>,
7590 param_parent_graph_id: Option<String>,
7591 param_sort_by: Option<String>,
7592 param_limit: Option<i32>,
7593 param_offset: Option<i32>,
7594 ) -> Result<models::GetAllWorkflowGraphsResponse, ApiError> {
7595 let mut url = format!("{}/v1/workflows/draft/graphs", self.base_path);
7596
7597 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7598
7599 if let Some(name) = param_name {
7600 query_string.append_pair("name", &name.to_string());
7601 }
7602 if let Some(description) = param_description {
7603 query_string.append_pair("description", &description.to_string());
7604 }
7605 if let Some(all_search) = param_all_search {
7606 query_string.append_pair("all_search", &all_search.to_string());
7607 }
7608 if let Some(parent_graph_id) = param_parent_graph_id {
7609 query_string.append_pair("parent_graph_id", &parent_graph_id.to_string());
7610 }
7611 if let Some(sort_by) = param_sort_by {
7612 query_string.append_pair("sort_by", &sort_by.to_string());
7613 }
7614 if let Some(limit) = param_limit {
7615 query_string.append_pair("limit", &limit.to_string());
7616 }
7617 if let Some(offset) = param_offset {
7618 query_string.append_pair("offset", &offset.to_string());
7619 }
7620 let query_string_str = query_string.finish();
7621 if !query_string_str.is_empty() {
7622 url += "?";
7623 url += &query_string_str;
7624 }
7625
7626 let url = match Url::from_str(&url) {
7627 Ok(url) => url,
7628 Err(err) => {
7629 return Err(ApiError::new(
7630 format!("Unable to build URL: {}", err),
7631 SimpleErrorType::Permanent,
7632 ))
7633 }
7634 };
7635
7636 let mut request = self.hyper_client.request(Method::Get, url);
7637 request = request.headers(self.headers.clone());
7638
7639 request
7640 .send()
7641 .map_err(|e| {
7642 ApiError::new(
7643 format!("No response received: {}", e),
7644 SimpleErrorType::Permanent,
7645 )
7646 })
7647 .and_then(|mut response| match response.status.to_u16() {
7648 200 => {
7649 let mut body = Vec::new();
7650 response.read_to_end(&mut body).map_err(|e| {
7651 ApiError::new(
7652 format!("Failed to read response: {}", e),
7653 SimpleErrorType::Temporary,
7654 )
7655 })?;
7656 str::from_utf8(&body)
7657 .map_err(|e| {
7658 ApiError::new(
7659 format!("Response was not valid UTF8: {}", e),
7660 SimpleErrorType::Temporary,
7661 )
7662 })
7663 .and_then(|body| {
7664 serde_json::from_str::<models::GetAllWorkflowGraphsResponse>(body)
7665 .map_err(|e| e.into())
7666 })
7667 }
7668 code => {
7669 let headers = response.headers.clone();
7670 let mut body = Vec::new();
7671 let result = response.read_to_end(&mut body);
7672 let err_type = match response.status.is_server_error() {
7673 false => SimpleErrorType::Permanent,
7674 true => SimpleErrorType::Temporary,
7675 };
7676 Err(ApiError::new(
7677 format!(
7678 "Unexpected response code {}:\n{:?}\n\n{}",
7679 code,
7680 headers,
7681 match result {
7682 Ok(_) => match str::from_utf8(&body) {
7683 Ok(body) => Cow::from(body),
7684 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7685 },
7686 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7687 }
7688 ),
7689 err_type,
7690 ))
7691 }
7692 })
7693 }
7694
7695 fn get_workflow_graph(
7696 &self,
7697 param_graph_id: uuid::Uuid,
7698 ) -> Result<models::WorkflowGraph, ApiError> {
7699 let mut url = format!(
7700 "{}/v1/workflows/draft/graphs/{graph_id}",
7701 self.base_path,
7702 graph_id = utf8_percent_encode(¶m_graph_id.to_string(), ID_ENCODE_SET)
7703 );
7704
7705 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7706
7707 let query_string_str = query_string.finish();
7708 if !query_string_str.is_empty() {
7709 url += "?";
7710 url += &query_string_str;
7711 }
7712
7713 let url = match Url::from_str(&url) {
7714 Ok(url) => url,
7715 Err(err) => {
7716 return Err(ApiError::new(
7717 format!("Unable to build URL: {}", err),
7718 SimpleErrorType::Permanent,
7719 ))
7720 }
7721 };
7722
7723 let mut request = self.hyper_client.request(Method::Get, url);
7724 request = request.headers(self.headers.clone());
7725
7726 request
7727 .send()
7728 .map_err(|e| {
7729 ApiError::new(
7730 format!("No response received: {}", e),
7731 SimpleErrorType::Permanent,
7732 )
7733 })
7734 .and_then(|mut response| match response.status.to_u16() {
7735 200 => {
7736 let mut body = Vec::new();
7737 response.read_to_end(&mut body).map_err(|e| {
7738 ApiError::new(
7739 format!("Failed to read response: {}", e),
7740 SimpleErrorType::Temporary,
7741 )
7742 })?;
7743 str::from_utf8(&body)
7744 .map_err(|e| {
7745 ApiError::new(
7746 format!("Response was not valid UTF8: {}", e),
7747 SimpleErrorType::Temporary,
7748 )
7749 })
7750 .and_then(|body| {
7751 serde_json::from_str::<models::WorkflowGraph>(body)
7752 .map_err(|e| e.into())
7753 })
7754 }
7755 code => {
7756 let headers = response.headers.clone();
7757 let mut body = Vec::new();
7758 let result = response.read_to_end(&mut body);
7759 let err_type = match response.status.is_server_error() {
7760 false => SimpleErrorType::Permanent,
7761 true => SimpleErrorType::Temporary,
7762 };
7763 Err(ApiError::new(
7764 format!(
7765 "Unexpected response code {}:\n{:?}\n\n{}",
7766 code,
7767 headers,
7768 match result {
7769 Ok(_) => match str::from_utf8(&body) {
7770 Ok(body) => Cow::from(body),
7771 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7772 },
7773 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7774 }
7775 ),
7776 err_type,
7777 ))
7778 }
7779 })
7780 }
7781
7782 fn update_workflow_graph(
7783 &self,
7784 param_graph_id: uuid::Uuid,
7785 param_body: models::UpdateWorkflowGraph,
7786 ) -> Result<models::WorkflowGraph, ApiError> {
7787 let mut url = format!(
7788 "{}/v1/workflows/draft/graphs/{graph_id}",
7789 self.base_path,
7790 graph_id = utf8_percent_encode(¶m_graph_id.to_string(), ID_ENCODE_SET)
7791 );
7792
7793 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7794
7795 let query_string_str = query_string.finish();
7796 if !query_string_str.is_empty() {
7797 url += "?";
7798 url += &query_string_str;
7799 }
7800
7801 let url = match Url::from_str(&url) {
7802 Ok(url) => url,
7803 Err(err) => {
7804 return Err(ApiError::new(
7805 format!("Unable to build URL: {}", err),
7806 SimpleErrorType::Permanent,
7807 ))
7808 }
7809 };
7810
7811 let mut request = self.hyper_client.request(Method::Put, url);
7812 request = request.headers(self.headers.clone());
7813 let body = serde_json::to_string(¶m_body)
7814 .expect("impossible to fail to serialize")
7815 .into_bytes();
7816 request = request.body(body.as_slice());
7817
7818 request = request.header(ContentType(
7819 mimetypes::requests::UPDATE_WORKFLOW_GRAPH.clone(),
7820 ));
7821
7822 request
7823 .send()
7824 .map_err(|e| {
7825 ApiError::new(
7826 format!("No response received: {}", e),
7827 SimpleErrorType::Permanent,
7828 )
7829 })
7830 .and_then(|mut response| match response.status.to_u16() {
7831 200 => {
7832 let mut body = Vec::new();
7833 response.read_to_end(&mut body).map_err(|e| {
7834 ApiError::new(
7835 format!("Failed to read response: {}", e),
7836 SimpleErrorType::Temporary,
7837 )
7838 })?;
7839 str::from_utf8(&body)
7840 .map_err(|e| {
7841 ApiError::new(
7842 format!("Response was not valid UTF8: {}", e),
7843 SimpleErrorType::Temporary,
7844 )
7845 })
7846 .and_then(|body| {
7847 serde_json::from_str::<models::WorkflowGraph>(body)
7848 .map_err(|e| e.into())
7849 })
7850 }
7851 code => {
7852 let headers = response.headers.clone();
7853 let mut body = Vec::new();
7854 let result = response.read_to_end(&mut body);
7855 let err_type = match response.status.is_server_error() {
7856 false => SimpleErrorType::Permanent,
7857 true => SimpleErrorType::Temporary,
7858 };
7859 Err(ApiError::new(
7860 format!(
7861 "Unexpected response code {}:\n{:?}\n\n{}",
7862 code,
7863 headers,
7864 match result {
7865 Ok(_) => match str::from_utf8(&body) {
7866 Ok(body) => Cow::from(body),
7867 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7868 },
7869 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7870 }
7871 ),
7872 err_type,
7873 ))
7874 }
7875 })
7876 }
7877}
7878
7879impl WorkflowFinalApi for Client {
7880 type Error = ApiError;
7881
7882 fn create_final_workflow_graph(
7883 &self,
7884 param_body: models::CreateFinalWorkflowGraph,
7885 ) -> Result<models::FinalWorkflow, ApiError> {
7886 let mut url = format!("{}/v1/workflows/final/graphs", self.base_path);
7887
7888 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7889
7890 let query_string_str = query_string.finish();
7891 if !query_string_str.is_empty() {
7892 url += "?";
7893 url += &query_string_str;
7894 }
7895
7896 let url = match Url::from_str(&url) {
7897 Ok(url) => url,
7898 Err(err) => {
7899 return Err(ApiError::new(
7900 format!("Unable to build URL: {}", err),
7901 SimpleErrorType::Permanent,
7902 ))
7903 }
7904 };
7905
7906 let mut request = self.hyper_client.request(Method::Post, url);
7907 request = request.headers(self.headers.clone());
7908 let body = serde_json::to_string(¶m_body)
7910 .expect("impossible to fail to serialize")
7911 .into_bytes();
7912 request = request.body(body.as_slice());
7913
7914 request = request.header(ContentType(
7915 mimetypes::requests::CREATE_FINAL_WORKFLOW_GRAPH.clone(),
7916 ));
7917
7918 request
7919 .send()
7920 .map_err(|e| {
7921 ApiError::new(
7922 format!("No response received: {}", e),
7923 SimpleErrorType::Permanent,
7924 )
7925 })
7926 .and_then(|mut response| match response.status.to_u16() {
7927 200 => {
7928 let mut body = Vec::new();
7929 response.read_to_end(&mut body).map_err(|e| {
7930 ApiError::new(
7931 format!("Failed to read response: {}", e),
7932 SimpleErrorType::Temporary,
7933 )
7934 })?;
7935 str::from_utf8(&body)
7936 .map_err(|e| {
7937 ApiError::new(
7938 format!("Response was not valid UTF8: {}", e),
7939 SimpleErrorType::Temporary,
7940 )
7941 })
7942 .and_then(|body| {
7943 serde_json::from_str::<models::FinalWorkflow>(body)
7944 .map_err(|e| e.into())
7945 })
7946 }
7947 code => {
7948 let headers = response.headers.clone();
7949 let mut body = Vec::new();
7950 let result = response.read_to_end(&mut body);
7951 let err_type = match response.status.is_server_error() {
7952 false => SimpleErrorType::Permanent,
7953 true => SimpleErrorType::Temporary,
7954 };
7955 Err(ApiError::new(
7956 format!(
7957 "Unexpected response code {}:\n{:?}\n\n{}",
7958 code,
7959 headers,
7960 match result {
7961 Ok(_) => match str::from_utf8(&body) {
7962 Ok(body) => Cow::from(body),
7963 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
7964 },
7965 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
7966 }
7967 ),
7968 err_type,
7969 ))
7970 }
7971 })
7972 }
7973
7974 fn delete_final_workflow_graph(
7975 &self,
7976 param_graph_id: uuid::Uuid,
7977 param_version: String,
7978 ) -> Result<(), ApiError> {
7979 let mut url = format!(
7980 "{}/v1/workflows/final/graphs/{graph_id}/{version}",
7981 self.base_path,
7982 graph_id = utf8_percent_encode(¶m_graph_id.to_string(), ID_ENCODE_SET),
7983 version = utf8_percent_encode(¶m_version.to_string(), ID_ENCODE_SET)
7984 );
7985
7986 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
7987
7988 let query_string_str = query_string.finish();
7989 if !query_string_str.is_empty() {
7990 url += "?";
7991 url += &query_string_str;
7992 }
7993
7994 let url = match Url::from_str(&url) {
7995 Ok(url) => url,
7996 Err(err) => {
7997 return Err(ApiError::new(
7998 format!("Unable to build URL: {}", err),
7999 SimpleErrorType::Permanent,
8000 ))
8001 }
8002 };
8003
8004 let mut request = self.hyper_client.request(Method::Delete, url);
8005 request = request.headers(self.headers.clone());
8006
8007 request
8008 .send()
8009 .map_err(|e| {
8010 ApiError::new(
8011 format!("No response received: {}", e),
8012 SimpleErrorType::Permanent,
8013 )
8014 })
8015 .and_then(|mut response| match response.status.to_u16() {
8016 204 => {
8017 let mut body = Vec::new();
8018 response.read_to_end(&mut body).map_err(|e| {
8019 ApiError::new(
8020 format!("Failed to read response: {}", e),
8021 SimpleErrorType::Temporary,
8022 )
8023 })?;
8024
8025 Ok(())
8026 }
8027 code => {
8028 let headers = response.headers.clone();
8029 let mut body = Vec::new();
8030 let result = response.read_to_end(&mut body);
8031 let err_type = match response.status.is_server_error() {
8032 false => SimpleErrorType::Permanent,
8033 true => SimpleErrorType::Temporary,
8034 };
8035 Err(ApiError::new(
8036 format!(
8037 "Unexpected response code {}:\n{:?}\n\n{}",
8038 code,
8039 headers,
8040 match result {
8041 Ok(_) => match str::from_utf8(&body) {
8042 Ok(body) => Cow::from(body),
8043 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
8044 },
8045 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
8046 }
8047 ),
8048 err_type,
8049 ))
8050 }
8051 })
8052 }
8053
8054 fn get_all_final_workflow_graphs(
8055 &self,
8056 param_name: Option<String>,
8057 param_description: Option<String>,
8058 param_all_search: Option<String>,
8059 param_sort_by: Option<String>,
8060 param_limit: Option<i32>,
8061 param_offset: Option<i32>,
8062 ) -> Result<models::GetAllFinalWorkflowGraphsResponse, ApiError> {
8063 let mut url = format!("{}/v1/workflows/final/graphs", self.base_path);
8064
8065 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
8066
8067 if let Some(name) = param_name {
8068 query_string.append_pair("name", &name.to_string());
8069 }
8070 if let Some(description) = param_description {
8071 query_string.append_pair("description", &description.to_string());
8072 }
8073 if let Some(all_search) = param_all_search {
8074 query_string.append_pair("all_search", &all_search.to_string());
8075 }
8076 if let Some(sort_by) = param_sort_by {
8077 query_string.append_pair("sort_by", &sort_by.to_string());
8078 }
8079 if let Some(limit) = param_limit {
8080 query_string.append_pair("limit", &limit.to_string());
8081 }
8082 if let Some(offset) = param_offset {
8083 query_string.append_pair("offset", &offset.to_string());
8084 }
8085 let query_string_str = query_string.finish();
8086 if !query_string_str.is_empty() {
8087 url += "?";
8088 url += &query_string_str;
8089 }
8090
8091 let url = match Url::from_str(&url) {
8092 Ok(url) => url,
8093 Err(err) => {
8094 return Err(ApiError::new(
8095 format!("Unable to build URL: {}", err),
8096 SimpleErrorType::Permanent,
8097 ))
8098 }
8099 };
8100
8101 let mut request = self.hyper_client.request(Method::Get, url);
8102 request = request.headers(self.headers.clone());
8103
8104 request
8105 .send()
8106 .map_err(|e| {
8107 ApiError::new(
8108 format!("No response received: {}", e),
8109 SimpleErrorType::Permanent,
8110 )
8111 })
8112 .and_then(|mut response| match response.status.to_u16() {
8113 200 => {
8114 let mut body = Vec::new();
8115 response.read_to_end(&mut body).map_err(|e| {
8116 ApiError::new(
8117 format!("Failed to read response: {}", e),
8118 SimpleErrorType::Temporary,
8119 )
8120 })?;
8121 str::from_utf8(&body)
8122 .map_err(|e| {
8123 ApiError::new(
8124 format!("Response was not valid UTF8: {}", e),
8125 SimpleErrorType::Temporary,
8126 )
8127 })
8128 .and_then(|body| {
8129 serde_json::from_str::<models::GetAllFinalWorkflowGraphsResponse>(body)
8130 .map_err(|e| e.into())
8131 })
8132 }
8133 code => {
8134 let headers = response.headers.clone();
8135 let mut body = Vec::new();
8136 let result = response.read_to_end(&mut body);
8137 let err_type = match response.status.is_server_error() {
8138 false => SimpleErrorType::Permanent,
8139 true => SimpleErrorType::Temporary,
8140 };
8141 Err(ApiError::new(
8142 format!(
8143 "Unexpected response code {}:\n{:?}\n\n{}",
8144 code,
8145 headers,
8146 match result {
8147 Ok(_) => match str::from_utf8(&body) {
8148 Ok(body) => Cow::from(body),
8149 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
8150 },
8151 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
8152 }
8153 ),
8154 err_type,
8155 ))
8156 }
8157 })
8158 }
8159
8160 fn get_final_workflow_graph(
8161 &self,
8162 param_graph_id: uuid::Uuid,
8163 param_version: String,
8164 ) -> Result<models::VersionInFinalWorkflow, ApiError> {
8165 let mut url = format!(
8166 "{}/v1/workflows/final/graphs/{graph_id}/{version}",
8167 self.base_path,
8168 graph_id = utf8_percent_encode(¶m_graph_id.to_string(), ID_ENCODE_SET),
8169 version = utf8_percent_encode(¶m_version.to_string(), ID_ENCODE_SET)
8170 );
8171
8172 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
8173
8174 let query_string_str = query_string.finish();
8175 if !query_string_str.is_empty() {
8176 url += "?";
8177 url += &query_string_str;
8178 }
8179
8180 let url = match Url::from_str(&url) {
8181 Ok(url) => url,
8182 Err(err) => {
8183 return Err(ApiError::new(
8184 format!("Unable to build URL: {}", err),
8185 SimpleErrorType::Permanent,
8186 ))
8187 }
8188 };
8189
8190 let mut request = self.hyper_client.request(Method::Get, url);
8191 request = request.headers(self.headers.clone());
8192
8193 request
8194 .send()
8195 .map_err(|e| {
8196 ApiError::new(
8197 format!("No response received: {}", e),
8198 SimpleErrorType::Permanent,
8199 )
8200 })
8201 .and_then(|mut response| match response.status.to_u16() {
8202 200 => {
8203 let mut body = Vec::new();
8204 response.read_to_end(&mut body).map_err(|e| {
8205 ApiError::new(
8206 format!("Failed to read response: {}", e),
8207 SimpleErrorType::Temporary,
8208 )
8209 })?;
8210 str::from_utf8(&body)
8211 .map_err(|e| {
8212 ApiError::new(
8213 format!("Response was not valid UTF8: {}", e),
8214 SimpleErrorType::Temporary,
8215 )
8216 })
8217 .and_then(|body| {
8218 serde_json::from_str::<models::VersionInFinalWorkflow>(body)
8219 .map_err(|e| e.into())
8220 })
8221 }
8222 code => {
8223 let headers = response.headers.clone();
8224 let mut body = Vec::new();
8225 let result = response.read_to_end(&mut body);
8226 let err_type = match response.status.is_server_error() {
8227 false => SimpleErrorType::Permanent,
8228 true => SimpleErrorType::Temporary,
8229 };
8230 Err(ApiError::new(
8231 format!(
8232 "Unexpected response code {}:\n{:?}\n\n{}",
8233 code,
8234 headers,
8235 match result {
8236 Ok(_) => match str::from_utf8(&body) {
8237 Ok(body) => Cow::from(body),
8238 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
8239 },
8240 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
8241 }
8242 ),
8243 err_type,
8244 ))
8245 }
8246 })
8247 }
8248
8249 fn get_full_final_workflow_graph(
8250 &self,
8251 param_graph_id: uuid::Uuid,
8252 ) -> Result<models::FinalWorkflow, ApiError> {
8253 let mut url = format!(
8254 "{}/v1/workflows/final/graphs/{graph_id}",
8255 self.base_path,
8256 graph_id = utf8_percent_encode(¶m_graph_id.to_string(), ID_ENCODE_SET)
8257 );
8258
8259 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
8260
8261 let query_string_str = query_string.finish();
8262 if !query_string_str.is_empty() {
8263 url += "?";
8264 url += &query_string_str;
8265 }
8266
8267 let url = match Url::from_str(&url) {
8268 Ok(url) => url,
8269 Err(err) => {
8270 return Err(ApiError::new(
8271 format!("Unable to build URL: {}", err),
8272 SimpleErrorType::Permanent,
8273 ))
8274 }
8275 };
8276
8277 let mut request = self.hyper_client.request(Method::Get, url);
8278 request = request.headers(self.headers.clone());
8279
8280 request
8281 .send()
8282 .map_err(|e| {
8283 ApiError::new(
8284 format!("No response received: {}", e),
8285 SimpleErrorType::Permanent,
8286 )
8287 })
8288 .and_then(|mut response| match response.status.to_u16() {
8289 200 => {
8290 let mut body = Vec::new();
8291 response.read_to_end(&mut body).map_err(|e| {
8292 ApiError::new(
8293 format!("Failed to read response: {}", e),
8294 SimpleErrorType::Temporary,
8295 )
8296 })?;
8297 str::from_utf8(&body)
8298 .map_err(|e| {
8299 ApiError::new(
8300 format!("Response was not valid UTF8: {}", e),
8301 SimpleErrorType::Temporary,
8302 )
8303 })
8304 .and_then(|body| {
8305 serde_json::from_str::<models::FinalWorkflow>(body)
8306 .map_err(|e| e.into())
8307 })
8308 }
8309 code => {
8310 let headers = response.headers.clone();
8311 let mut body = Vec::new();
8312 let result = response.read_to_end(&mut body);
8313 let err_type = match response.status.is_server_error() {
8314 false => SimpleErrorType::Permanent,
8315 true => SimpleErrorType::Temporary,
8316 };
8317 Err(ApiError::new(
8318 format!(
8319 "Unexpected response code {}:\n{:?}\n\n{}",
8320 code,
8321 headers,
8322 match result {
8323 Ok(_) => match str::from_utf8(&body) {
8324 Ok(body) => Cow::from(body),
8325 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
8326 },
8327 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
8328 }
8329 ),
8330 err_type,
8331 ))
8332 }
8333 })
8334 }
8335
8336 fn update_final_workflow_graph(
8337 &self,
8338 param_graph_id: uuid::Uuid,
8339 param_body: models::CreateWorkflowVersionRequest,
8340 ) -> Result<models::VersionInFinalWorkflow, ApiError> {
8341 let mut url = format!(
8342 "{}/v1/workflows/final/graphs/{graph_id}",
8343 self.base_path,
8344 graph_id = utf8_percent_encode(¶m_graph_id.to_string(), ID_ENCODE_SET)
8345 );
8346
8347 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
8348
8349 let query_string_str = query_string.finish();
8350 if !query_string_str.is_empty() {
8351 url += "?";
8352 url += &query_string_str;
8353 }
8354
8355 let url = match Url::from_str(&url) {
8356 Ok(url) => url,
8357 Err(err) => {
8358 return Err(ApiError::new(
8359 format!("Unable to build URL: {}", err),
8360 SimpleErrorType::Permanent,
8361 ))
8362 }
8363 };
8364
8365 let mut request = self.hyper_client.request(Method::Post, url);
8366 request = request.headers(self.headers.clone());
8367 let body = serde_json::to_string(¶m_body)
8368 .expect("impossible to fail to serialize")
8369 .into_bytes();
8370 request = request.body(body.as_slice());
8371
8372 request = request.header(ContentType(
8373 mimetypes::requests::UPDATE_FINAL_WORKFLOW_GRAPH.clone(),
8374 ));
8375
8376 request
8377 .send()
8378 .map_err(|e| {
8379 ApiError::new(
8380 format!("No response received: {}", e),
8381 SimpleErrorType::Permanent,
8382 )
8383 })
8384 .and_then(|mut response| match response.status.to_u16() {
8385 200 => {
8386 let mut body = Vec::new();
8387 response.read_to_end(&mut body).map_err(|e| {
8388 ApiError::new(
8389 format!("Failed to read response: {}", e),
8390 SimpleErrorType::Temporary,
8391 )
8392 })?;
8393 str::from_utf8(&body)
8394 .map_err(|e| {
8395 ApiError::new(
8396 format!("Response was not valid UTF8: {}", e),
8397 SimpleErrorType::Temporary,
8398 )
8399 })
8400 .and_then(|body| {
8401 serde_json::from_str::<models::VersionInFinalWorkflow>(body)
8402 .map_err(|e| e.into())
8403 })
8404 }
8405 code => {
8406 let headers = response.headers.clone();
8407 let mut body = Vec::new();
8408 let result = response.read_to_end(&mut body);
8409 let err_type = match response.status.is_server_error() {
8410 false => SimpleErrorType::Permanent,
8411 true => SimpleErrorType::Temporary,
8412 };
8413 Err(ApiError::new(
8414 format!(
8415 "Unexpected response code {}:\n{:?}\n\n{}",
8416 code,
8417 headers,
8418 match result {
8419 Ok(_) => match str::from_utf8(&body) {
8420 Ok(body) => Cow::from(body),
8421 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
8422 },
8423 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
8424 }
8425 ),
8426 err_type,
8427 ))
8428 }
8429 })
8430 }
8431}
8432
8433impl ZoneApi for Client {
8434 type Error = ApiError;
8435
8436 fn get_zone(&self, param_zone_id: uuid::Uuid) -> Result<models::Zone, ApiError> {
8437 let mut url = format!(
8438 "{}/v1/zones/{zone_id}",
8439 self.base_path,
8440 zone_id = utf8_percent_encode(¶m_zone_id.to_string(), ID_ENCODE_SET)
8441 );
8442
8443 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
8444
8445 let query_string_str = query_string.finish();
8446 if !query_string_str.is_empty() {
8447 url += "?";
8448 url += &query_string_str;
8449 }
8450
8451 let url = match Url::from_str(&url) {
8452 Ok(url) => url,
8453 Err(err) => {
8454 return Err(ApiError::new(
8455 format!("Unable to build URL: {}", err),
8456 SimpleErrorType::Permanent,
8457 ))
8458 }
8459 };
8460
8461 let mut request = self.hyper_client.request(Method::Get, url);
8462 request = request.headers(self.headers.clone());
8463
8464 request
8465 .send()
8466 .map_err(|e| {
8467 ApiError::new(
8468 format!("No response received: {}", e),
8469 SimpleErrorType::Permanent,
8470 )
8471 })
8472 .and_then(|mut response| match response.status.to_u16() {
8473 200 => {
8474 let mut body = Vec::new();
8475 response.read_to_end(&mut body).map_err(|e| {
8476 ApiError::new(
8477 format!("Failed to read response: {}", e),
8478 SimpleErrorType::Temporary,
8479 )
8480 })?;
8481 str::from_utf8(&body)
8482 .map_err(|e| {
8483 ApiError::new(
8484 format!("Response was not valid UTF8: {}", e),
8485 SimpleErrorType::Temporary,
8486 )
8487 })
8488 .and_then(|body| {
8489 serde_json::from_str::<models::Zone>(body).map_err(|e| e.into())
8490 })
8491 }
8492 code => {
8493 let headers = response.headers.clone();
8494 let mut body = Vec::new();
8495 let result = response.read_to_end(&mut body);
8496 let err_type = match response.status.is_server_error() {
8497 false => SimpleErrorType::Permanent,
8498 true => SimpleErrorType::Temporary,
8499 };
8500 Err(ApiError::new(
8501 format!(
8502 "Unexpected response code {}:\n{:?}\n\n{}",
8503 code,
8504 headers,
8505 match result {
8506 Ok(_) => match str::from_utf8(&body) {
8507 Ok(body) => Cow::from(body),
8508 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
8509 },
8510 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
8511 }
8512 ),
8513 err_type,
8514 ))
8515 }
8516 })
8517 }
8518
8519 fn get_zone_join_token(
8520 &self,
8521 param_zone_id: uuid::Uuid,
8522 ) -> Result<models::ZoneJoinToken, ApiError> {
8523 let mut url = format!(
8524 "{}/v1/zones/{zone_id}/token",
8525 self.base_path,
8526 zone_id = utf8_percent_encode(¶m_zone_id.to_string(), ID_ENCODE_SET)
8527 );
8528
8529 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
8530
8531 let query_string_str = query_string.finish();
8532 if !query_string_str.is_empty() {
8533 url += "?";
8534 url += &query_string_str;
8535 }
8536
8537 let url = match Url::from_str(&url) {
8538 Ok(url) => url,
8539 Err(err) => {
8540 return Err(ApiError::new(
8541 format!("Unable to build URL: {}", err),
8542 SimpleErrorType::Permanent,
8543 ))
8544 }
8545 };
8546
8547 let mut request = self.hyper_client.request(Method::Get, url);
8548 request = request.headers(self.headers.clone());
8549
8550 request
8551 .send()
8552 .map_err(|e| {
8553 ApiError::new(
8554 format!("No response received: {}", e),
8555 SimpleErrorType::Permanent,
8556 )
8557 })
8558 .and_then(|mut response| match response.status.to_u16() {
8559 200 => {
8560 let mut body = Vec::new();
8561 response.read_to_end(&mut body).map_err(|e| {
8562 ApiError::new(
8563 format!("Failed to read response: {}", e),
8564 SimpleErrorType::Temporary,
8565 )
8566 })?;
8567 str::from_utf8(&body)
8568 .map_err(|e| {
8569 ApiError::new(
8570 format!("Response was not valid UTF8: {}", e),
8571 SimpleErrorType::Temporary,
8572 )
8573 })
8574 .and_then(|body| {
8575 serde_json::from_str::<models::ZoneJoinToken>(body)
8576 .map_err(|e| e.into())
8577 })
8578 }
8579 code => {
8580 let headers = response.headers.clone();
8581 let mut body = Vec::new();
8582 let result = response.read_to_end(&mut body);
8583 let err_type = match response.status.is_server_error() {
8584 false => SimpleErrorType::Permanent,
8585 true => SimpleErrorType::Temporary,
8586 };
8587 Err(ApiError::new(
8588 format!(
8589 "Unexpected response code {}:\n{:?}\n\n{}",
8590 code,
8591 headers,
8592 match result {
8593 Ok(_) => match str::from_utf8(&body) {
8594 Ok(body) => Cow::from(body),
8595 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
8596 },
8597 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
8598 }
8599 ),
8600 err_type,
8601 ))
8602 }
8603 })
8604 }
8605
8606 fn get_zones(&self) -> Result<Vec<models::Zone>, ApiError> {
8607 let mut url = format!("{}/v1/zones", self.base_path);
8608
8609 let mut query_string = self::url::form_urlencoded::Serializer::new("".to_owned());
8610
8611 let query_string_str = query_string.finish();
8612 if !query_string_str.is_empty() {
8613 url += "?";
8614 url += &query_string_str;
8615 }
8616
8617 let url = match Url::from_str(&url) {
8618 Ok(url) => url,
8619 Err(err) => {
8620 return Err(ApiError::new(
8621 format!("Unable to build URL: {}", err),
8622 SimpleErrorType::Permanent,
8623 ))
8624 }
8625 };
8626
8627 let mut request = self.hyper_client.request(Method::Get, url);
8628 request = request.headers(self.headers.clone());
8629
8630 request
8631 .send()
8632 .map_err(|e| {
8633 ApiError::new(
8634 format!("No response received: {}", e),
8635 SimpleErrorType::Permanent,
8636 )
8637 })
8638 .and_then(|mut response| match response.status.to_u16() {
8639 200 => {
8640 let mut body = Vec::new();
8641 response.read_to_end(&mut body).map_err(|e| {
8642 ApiError::new(
8643 format!("Failed to read response: {}", e),
8644 SimpleErrorType::Temporary,
8645 )
8646 })?;
8647 str::from_utf8(&body)
8648 .map_err(|e| {
8649 ApiError::new(
8650 format!("Response was not valid UTF8: {}", e),
8651 SimpleErrorType::Temporary,
8652 )
8653 })
8654 .and_then(|body| {
8655 serde_json::from_str::<Vec<models::Zone>>(body).map_err(|e| e.into())
8656 })
8657 }
8658 code => {
8659 let headers = response.headers.clone();
8660 let mut body = Vec::new();
8661 let result = response.read_to_end(&mut body);
8662 let err_type = match response.status.is_server_error() {
8663 false => SimpleErrorType::Permanent,
8664 true => SimpleErrorType::Temporary,
8665 };
8666 Err(ApiError::new(
8667 format!(
8668 "Unexpected response code {}:\n{:?}\n\n{}",
8669 code,
8670 headers,
8671 match result {
8672 Ok(_) => match str::from_utf8(&body) {
8673 Ok(body) => Cow::from(body),
8674 Err(e) => Cow::from(format!("<Body was not UTF8: {:?}>", e)),
8675 },
8676 Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
8677 }
8678 ),
8679 err_type,
8680 ))
8681 }
8682 })
8683 }
8684}
8685
8686#[derive(Debug)]
8687pub enum ClientInitError {
8688 InvalidScheme,
8689 InvalidUri(hyper::error::ParseError),
8690 MissingHost,
8691}
8692
8693impl From<hyper::error::ParseError> for ClientInitError {
8694 fn from(err: hyper::error::ParseError) -> ClientInitError {
8695 ClientInitError::InvalidUri(err)
8696 }
8697}
8698
8699impl fmt::Display for ClientInitError {
8700 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
8701 <Self as fmt::Debug>::fmt(self, f)
8702 }
8703}
8704
8705impl error::Error for ClientInitError {
8706 fn description(&self) -> &str {
8707 "Failed to produce a hyper client."
8708 }
8709}
8710
8711fn deserialize_config_checked(
8712 raw_config: &str,
8713 expected_hash: &[u8; SHA256_BYTE_LENGTH],
8714) -> Result<models::RuntimeAppConfig, ApiError> {
8715 let result = serde_json::from_str::<models::RuntimeAppConfig>(&raw_config).map_err(|e| {
8716 ApiError::new(
8717 format!("Failed to serialize RuntimeAppConfig to json: {}", e),
8718 SimpleErrorType::Permanent,
8719 )
8720 })?;
8721
8722 let hashed_config_part = serde_json::to_string(&result.config).map_err(|e| {
8723 ApiError::new(
8724 format!("Failed to serialize HashedConfig to json: {}", e),
8725 SimpleErrorType::Permanent,
8726 )
8727 })?;
8728
8729 let hash = compute_sha256(hashed_config_part.as_bytes()).map_err(|e| {
8730 ApiError::new(
8731 format!("Unable to hash app config: {}", e),
8732 SimpleErrorType::Permanent,
8733 )
8734 })?;
8735
8736 if hash != *expected_hash {
8737 Err(ApiError::new(
8738 format!(
8739 "App config hash mismatch. Expected {:?}, but got {:?}.",
8740 hash, expected_hash
8741 )
8742 .to_string(),
8743 SimpleErrorType::Permanent,
8744 ))
8745 } else {
8746 Ok(result)
8747 }
8748}
8749
8750fn compute_sha256(input: &[u8]) -> Result<[u8; SHA256_BYTE_LENGTH], ApiError> {
8751 use mbedtls::hash::{Md, Type};
8752 let mut digest = [0; SHA256_BYTE_LENGTH];
8753 Md::hash(Type::Sha256, input, &mut digest).map_err(|e| {
8754 ApiError::new(
8755 format!("Unable to hash app config: {}", e),
8756 SimpleErrorType::Permanent,
8757 )
8758 })?;
8759
8760 Ok(digest)
8761}
8762
8763#[cfg(test)]
8764mod tests {
8765 use crate::{ApplicationConfigApi, Client, Sha256Hash, SHA256_BYTE_LENGTH, SHA256_CHAR_LENGTH};
8766 use client::deserialize_config_checked;
8767 use std::convert::{From, TryFrom};
8768
8769 #[test]
8770 fn test_valid_hash() {
8771 let json_data = r#"{"config":{"app_config":{"/opt/fortanix/enclave-os/app-config/rw/harmonize.txt":{"contents":"WyB7ICJiZWZvcmUiOiAiTGl2aW5nIiwgImFmdGVyIjogIkhhcHB5IiB9LCB7ICJiZWZvcmUiOiAiRGVjZWFzZWQiLCAiYWZ0ZXIiOiAiVW5oYXBweSIgfV0="}},"labels":{"location":"East US"},"zone_ca":["-----BEGIN CERTIFICATE-----\nMIIFGDCCA4CgAwIBAgIUHQCD590cMmMiUisayBBbQOdCKNUwDQYJKoZIhvcNAQEL\nBQAwgZIxNTAzBgsrBgEEAYOEGgEDAQwkZTMzNThjYjQtNWY2ZS00ZDFjLWFkN2Mt\nZGFmODc0ZGNmNzc4MTUwMwYLKwYBBAGDhBoBAwIMJGI3ZTMxMDQ3LThmZmYtNDdh\nMi05ODY1LWJjZjQwYmRmYjdlMjEiMCAGA1UEAwwZRGVmYXVsdCBFbmNsYXZlIFpv\nbmUgUm9vdDAeFw0yNDExMTkxMTU3NTFaFw0yOTExMTkxMTU3NTFaMIGSMTUwMwYL\nKwYBBAGDhBoBAwEMJGUzMzU4Y2I0LTVmNmUtNGQxYy1hZDdjLWRhZjg3NGRjZjc3\nODE1MDMGCysGAQQBg4QaAQMCDCRiN2UzMTA0Ny04ZmZmLTQ3YTItOTg2NS1iY2Y0\nMGJkZmI3ZTIxIjAgBgNVBAMMGURlZmF1bHQgRW5jbGF2ZSBab25lIFJvb3QwggGi\nMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDFTQXxYCihCZNPmBOL83peXl8N\nX4z5xx6PYpMkPaDLffKYidSYx8BeYlq7J/fB074NmuoL/ArygWRCdTfylWPnIyvx\n9kWQEdiK5EW0p1+mtgXdV4H61b+QjE5Jrtp7liZE/fKMGRMpvd8Gx4WkZwDyZo2n\nhc5mimULHNFTm1fE+gwUcg2b9z95n6NA3XAx/2AROkaYWka5wq2D6qU+Lo+ZRaNM\neccovOQH/7VZUxvMTVpFZLiccqJjHpFJ4O+0648HzLLaefiFGYMuEhfUN8To6JuU\ns6pY3j0UbYciBaOsWRZk4KjxLBkKJd3YqFkdExAu4yGuw7qoEZWpJ2gOu04evPBr\n5fhnH7X65ndYv2bJqtCcGjuVlICtsgP1K/zjd5WtpFAUpJCeGZFKdk/iT2ehRKnX\nnMLM0rrZWCbgSooB/Mo8omZNwe3PUDQ0CBiIKjWCn6tXnGTjER7uyp2C1LcloqBZ\nKK1XS6pTUMqkYRZGbhK+oBAJstV7hyEDonpC0skCAwEAAaNkMGIwDwYDVR0TAQH/\nBAUwAwEB/zAPBgNVHQ8BAf8EBQMDB4YAMB8GA1UdIwQYMBaAFGCJitDjMB1j9w4w\nKSl4zomn0EsYMB0GA1UdDgQWBBRgiYrQ4zAdY/cOMCkpeM6Jp9BLGDANBgkqhkiG\n9w0BAQsFAAOCAYEAUhz55qRSdC57EMq+JpKveT38rlcPYyhpVVL7kWTyHnKZjUAa\nQ9bPDGvq3yAQwLnI9DUyjpAzJPqJVP/ZFM633RrTtqNYEykatvYH0tgWhRcCyIE2\nZuqp8vqukzwdcCpZmNDrKM+XYk6Y/XoMNgF7nkiaDyFBRti4F6CzPk+St5xO1cpW\nz0vDWX+TbaZpj/iP8DI5XfIfEVG1P15A/zg5z5YObCPmslZYDeG3j7D2cUF9QvwT\nKs+MZUYXSIKCYDwPsHF+wo9lEh+2qbczY4Pno0SjamyrbZh6nUQ4aFVA2+6L+Pom\nQKtoA+VxXkD4yayhkAEK9GLxXFknnerC09IEs9FePl2WW8TzSLH2orBT/W/+1762\nn+MUiMgkb/r/CULaPCP6kmlceLCRUhdVogInSGV7R7RGyCUZNx30Foy2EFDsC4zs\nCsKQ2rkYDYXKyJovnr8pTlKMLczlvBsDztwlVhsKHKd+qLz1G0fFBqOmI0ktXQnt\nzVHIOmasuRWcoVXl\n-----END CERTIFICATE-----\n"],"workflow":{"workflow_id":"93156096-5ed4-41ad-ae23-19e8fab1e0af","app_name":"app-1","port_map":{"input":{"input-1":{"dataset":{"id":"141c73d4-36f2-4185-bc75-40e2f7f4f235"}}},"output":{"output-1":{"dataset":{"id":"d63b3d7d-72a1-466d-8df2-8e18f3d647ea"}}}}}},"extra":{"connections":{}}}"#;
8772
8773 let expected_hash = Sha256Hash::try_from(
8774 "0d0374f1f982570abcbe0c687deb54a708d56744ff4b5356810352d9ec8ae495",
8775 )
8776 .unwrap();
8777 let result = deserialize_config_checked(json_data, &expected_hash.0);
8778
8779 assert!(result.is_ok())
8780 }
8781
8782 #[test]
8783 fn test_valid_hash_additional_fields_in_workflow() {
8784 let json_data = r#"{"config":{"app_config":{"TestKey":{"contents":"U29tZXRoaW5nIG9mIHZhbHVl"}},"labels":{},"zone_ca":["-----BEGIN CERTIFICATE-----\nMIIFGDCCA4CgAwIBAgIUbOw7KSJs9E1tYTVl0Y5UxZjnoXwwDQYJKoZIhvcNAQEL\nBQAwgZIxNTAzBgsrBgEEAYOEGgEDAQwkYzUyMzJjOTYtMjliYy00Yzg5LWFmY2Qt\nZWU4ZTc3MmRmNTEzMTUwMwYLKwYBBAGDhBoBAwIMJDA1YjJkY2FlLWI5MjktNDg2\nNy05ZDI0LWZjMTRmYzJhM2UwZTEiMCAGA1UEAwwZRGVmYXVsdCBFbmNsYXZlIFpv\nbmUgUm9vdDAeFw0yNDEwMTQxMDIyMjNaFw0yOTEwMTQxMDIyMjNaMIGSMTUwMwYL\nKwYBBAGDhBoBAwEMJGM1MjMyYzk2LTI5YmMtNGM4OS1hZmNkLWVlOGU3NzJkZjUx\nMzE1MDMGCysGAQQBg4QaAQMCDCQwNWIyZGNhZS1iOTI5LTQ4NjctOWQyNC1mYzE0\nZmMyYTNlMGUxIjAgBgNVBAMMGURlZmF1bHQgRW5jbGF2ZSBab25lIFJvb3QwggGi\nMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDbiPKi09IKYVN507z8l2hpWs92\nkFwhfxwtp2m4wL61AGNwjJKYj+sX7cUsxZn3mq3RFtBM5DHH//6Fk70nXdfST+jG\n2F1GXQXqnicLeqnFTvtPQW/tR4GqnpG5ck1vz99xmWDacgfYkcNImU2r8naojCUs\nOR6mnOiOAOHrVIscNhuyhbIS8wlYeXjXKUbt4xBMZSzQXM4/sG4PvPdfnov8GUUY\nZwv31roMZBMq28nuuD2FcHi+jnwNwBztX3SggsIBtqREEVtAyomXnIuGu3wzNvH7\nqnNFJb+WyAwtyfATK1QFgpIiwr/sttEc7SWSGrAJE1eJrda657o6pxEWMRUCNy01\nZgsseJQlRLoCrgbklpjmqny4w7kpN6u2lQ0whfU+0Y4PWhgpSzgqZsEnJ17/vs41\nX3Xm5stSlNftFMmJa4ugBjOgsKmcJnokmBlhV6UHP4r24Zxw8qhXHd6Ve6sFyE0/\nl4ix4VjRWGFms3XgPNwAYF2AQB+82ezS/XY7lO0CAwEAAaNkMGIwDwYDVR0TAQH/\nBAUwAwEB/zAPBgNVHQ8BAf8EBQMDB4YAMB8GA1UdIwQYMBaAFKYkCG35BodJnsGO\nsn8rLERR/gZ5MB0GA1UdDgQWBBSmJAht+QaHSZ7BjrJ/KyxEUf4GeTANBgkqhkiG\n9w0BAQsFAAOCAYEAEkwQiDoeWZSKg1juQWVH7ND7ynbMQWWii4Gzf7ljpA6WjTCC\nl4ZBfi1uzn5vQlLR6Hvtxt+RNPupolCmShPmi07Ykmch4K+vgX374HVJxyb4s39U\n1IpIwucNxgtKATU+uPQ92yL0bf5K6RmOjr3tKslOTicWk1LBoclVqfqubeMAF3Ir\nz3uPlbSFSWuEGmkGUS6VqpGfzzCVpztecOzQ3wMLMrd3/luugn0GzoKAjy5gAiIS\nFqTC6xeYMy6YSlOioPqxsOckPOtpwtXI5cvTWdcqGq+tAxejAYmFj02Ct4MbljKg\n1RDjE/wMYz9EdJY6qfIL3ygst4wDCqHTrBsCRpU4kkfo9EoY2aqYwx1DBH0iobVB\nl1iKSjY777mhIMMuFl9+nOP+uuj1VF9chbkkH6s/eLBOKS5mPCr5IzJ2fGGCWRJ5\nTLNdNknTwF9RjiQfnFes1dwn5U5CG1b0lVPekeK8XmLgrxLKSaSyufCtWiDuGnSw\nl9PSKFeq622R9rXy\n-----END CERTIFICATE-----\n"],"workflow":{"workflow_id":"daf9b79a-1519-43ac-a519-08ea32840894","app_name":"stlw0qv3t","port_map":{},"app_acct_id":"c5232c96-29bc-4c89-afcd-ee8e772df513","app_group_id":"5ce01a15-4c14-479c-834f-1ddd485dfeb2"}},"extra":{"connections":{}}}"#;
8785
8786 let expected_hash = Sha256Hash::try_from(
8787 "c79839b310ca6c8ab281d05a3f3e9ebeddb4aa3f669c2c302110dead30894ce9",
8788 )
8789 .unwrap();
8790 let result = deserialize_config_checked(json_data, &expected_hash.0);
8791
8792 assert!(result.is_ok())
8793 }
8794
8795 #[test]
8807 fn test_valid_hash_with_application() {
8808 let json_data = r#"{"config":{"app_config":{},"labels":{"Um4J7P5P":"WSKsYIJs","autoshutdown":"True","location":"East US"},"zone_ca":["-----BEGIN CERTIFICATE-----\nMIIFGDCCA4CgAwIBAgIUbOw7KSJs9E1tYTVl0Y5UxZjnoXwwDQYJKoZIhvcNAQEL\nBQAwgZIxNTAzBgsrBgEEAYOEGgEDAQwkYzUyMzJjOTYtMjliYy00Yzg5LWFmY2Qt\nZWU4ZTc3MmRmNTEzMTUwMwYLKwYBBAGDhBoBAwIMJDA1YjJkY2FlLWI5MjktNDg2\nNy05ZDI0LWZjMTRmYzJhM2UwZTEiMCAGA1UEAwwZRGVmYXVsdCBFbmNsYXZlIFpv\nbmUgUm9vdDAeFw0yNDEwMTQxMDIyMjNaFw0yOTEwMTQxMDIyMjNaMIGSMTUwMwYL\nKwYBBAGDhBoBAwEMJGM1MjMyYzk2LTI5YmMtNGM4OS1hZmNkLWVlOGU3NzJkZjUx\nMzE1MDMGCysGAQQBg4QaAQMCDCQwNWIyZGNhZS1iOTI5LTQ4NjctOWQyNC1mYzE0\nZmMyYTNlMGUxIjAgBgNVBAMMGURlZmF1bHQgRW5jbGF2ZSBab25lIFJvb3QwggGi\nMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDbiPKi09IKYVN507z8l2hpWs92\nkFwhfxwtp2m4wL61AGNwjJKYj+sX7cUsxZn3mq3RFtBM5DHH//6Fk70nXdfST+jG\n2F1GXQXqnicLeqnFTvtPQW/tR4GqnpG5ck1vz99xmWDacgfYkcNImU2r8naojCUs\nOR6mnOiOAOHrVIscNhuyhbIS8wlYeXjXKUbt4xBMZSzQXM4/sG4PvPdfnov8GUUY\nZwv31roMZBMq28nuuD2FcHi+jnwNwBztX3SggsIBtqREEVtAyomXnIuGu3wzNvH7\nqnNFJb+WyAwtyfATK1QFgpIiwr/sttEc7SWSGrAJE1eJrda657o6pxEWMRUCNy01\nZgsseJQlRLoCrgbklpjmqny4w7kpN6u2lQ0whfU+0Y4PWhgpSzgqZsEnJ17/vs41\nX3Xm5stSlNftFMmJa4ugBjOgsKmcJnokmBlhV6UHP4r24Zxw8qhXHd6Ve6sFyE0/\nl4ix4VjRWGFms3XgPNwAYF2AQB+82ezS/XY7lO0CAwEAAaNkMGIwDwYDVR0TAQH/\nBAUwAwEB/zAPBgNVHQ8BAf8EBQMDB4YAMB8GA1UdIwQYMBaAFKYkCG35BodJnsGO\nsn8rLERR/gZ5MB0GA1UdDgQWBBSmJAht+QaHSZ7BjrJ/KyxEUf4GeTANBgkqhkiG\n9w0BAQsFAAOCAYEAEkwQiDoeWZSKg1juQWVH7ND7ynbMQWWii4Gzf7ljpA6WjTCC\nl4ZBfi1uzn5vQlLR6Hvtxt+RNPupolCmShPmi07Ykmch4K+vgX374HVJxyb4s39U\n1IpIwucNxgtKATU+uPQ92yL0bf5K6RmOjr3tKslOTicWk1LBoclVqfqubeMAF3Ir\nz3uPlbSFSWuEGmkGUS6VqpGfzzCVpztecOzQ3wMLMrd3/luugn0GzoKAjy5gAiIS\nFqTC6xeYMy6YSlOioPqxsOckPOtpwtXI5cvTWdcqGq+tAxejAYmFj02Ct4MbljKg\n1RDjE/wMYz9EdJY6qfIL3ygst4wDCqHTrBsCRpU4kkfo9EoY2aqYwx1DBH0iobVB\nl1iKSjY777mhIMMuFl9+nOP+uuj1VF9chbkkH6s/eLBOKS5mPCr5IzJ2fGGCWRJ5\nTLNdNknTwF9RjiQfnFes1dwn5U5CG1b0lVPekeK8XmLgrxLKSaSyufCtWiDuGnSw\nl9PSKFeq622R9rXy\n-----END CERTIFICATE-----\n"],"workflow":{"workflow_id":"c375e923-1390-4440-b9e6-ad9977557e5e","app_name":"chncthgm6","port_map":{"input":{"vZq7oNK9":{"application":{"acct_id":"c5232c96-29bc-4c89-afcd-ee8e772df513","group_id":"5ce01a15-4c14-479c-834f-1ddd485dfeb2"}}}},"app_acct_id":"c5232c96-29bc-4c89-afcd-ee8e772df513","app_group_id":"5ce01a15-4c14-479c-834f-1ddd485dfeb2"}},"extra":{"connections":{"input":{"vZq7oNK9":{"application":{"workflow_domain":"vZq7oNK9.c375e923-1390-4440-b9e6-ad9977557e5e.workflow.fortanix.cloud"}}}}}}"#;
8809
8810 let expected_hash = Sha256Hash::try_from(
8811 "43fd2e42e40365622fa81d3a3037b6ae130b552dc5f026d8c4168f89c7ff20c8",
8812 )
8813 .unwrap();
8814 let result = deserialize_config_checked(json_data, &expected_hash.0);
8815
8816 assert!(result.is_ok())
8817 }
8818
8819 #[test]
8820 fn test_remap_operation_path() {
8821 let mut client = Client::try_new_http("http://example.com:1234").unwrap();
8822 assert_eq!(
8823 client.remap_operation_path("/v1/test/path/no_remap"),
8824 "/v1/test/path/no_remap"
8825 );
8826 assert_eq!(
8827 client.remap_operation_path("/v1/test/654389468329ferugfirwvbyr/no_remap"),
8828 "/v1/test/654389468329ferugfirwvbyr/no_remap"
8829 );
8830 client.set_use_new_paths(true);
8831 assert_eq!(
8832 client.remap_operation_path("/v1/something/path/remap"),
8833 "/api/v1/confidential_computing/something/path/remap"
8834 );
8835 assert_eq!(
8836 client.remap_operation_path("/v1/test/654389468329ferugfirwvbyr/remap"),
8837 "/api/v1/confidential_computing/test/654389468329ferugfirwvbyr/remap"
8838 );
8839 }
8840
8841 #[test]
8842 fn test_mock_use_new_paths() {
8843 let mut server = mockito::Server::new();
8845 let expected_hash = Sha256Hash::try_from(
8846 "43fd2e42e40365622fa81d3a3037b6ae130b552dc5f026d8c4168f89c7ff20c8",
8847 )
8848 .unwrap();
8849
8850 let url = server.url();
8851 let mut client = Client::try_new_http(&url).unwrap();
8852 let mock_remap_path = server
8854 .mock("GET", "/v1/runtime/app_configs")
8855 .with_status(201)
8856 .create();
8857 let _ = client.get_runtime_application_config(&expected_hash);
8858 mock_remap_path.assert();
8859
8860 client.set_use_new_paths(true);
8861 let mock_remap_path = server
8863 .mock("GET", "/api/v1/confidential_computing/runtime/app_configs")
8864 .with_status(201)
8865 .create();
8866
8867 let _ = client.get_runtime_application_config(&expected_hash);
8868 mock_remap_path.assert();
8869 }
8870}