1#![doc = "Generated transport-independent contract objects."]
3
4use std::collections::BTreeMap;
5use std::error::Error as StdError;
6use std::fmt::{self, Display, Formatter};
7
8use serde::{Deserialize, Deserializer, Serialize, Serializer};
9use serde_json::Value;
10use spiral_contract::error::{ErrorEnvelope, ServiceError};
11use spiral_contract::strict::{DeserializeStrict, Strict};
12use uuid::Uuid;
13
14#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
16pub struct Grant {
17 #[serde(rename = "conditions")]
19 pub conditions: BTreeMap<String, String>,
20 #[serde(rename = "id")]
22 pub id: String,
23 #[serde(rename = "principal")]
25 pub principal: String,
26 #[serde(rename = "projectId")]
28 pub project_id: String,
29 #[serde(rename = "role")]
31 pub role: Role,
32}
33impl<'de> DeserializeStrict<'de> for Grant {
34 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
35 #[derive(Deserialize)]
36 #[serde(deny_unknown_fields)]
37 struct __Wire {
38 #[serde(rename = "conditions")]
39 conditions: Strict<BTreeMap<String, String>>,
40 #[serde(rename = "id")]
41 id: Strict<String>,
42 #[serde(rename = "principal")]
43 principal: Strict<String>,
44 #[serde(rename = "projectId")]
45 project_id: Strict<String>,
46 #[serde(rename = "role")]
47 role: Strict<Role>,
48 }
49 let wire = __Wire::deserialize(deserializer)?;
50 Ok(Self {
51 conditions: wire.conditions.0,
52 id: wire.id.0,
53 principal: wire.principal.0,
54 project_id: wire.project_id.0,
55 role: wire.role.0,
56 })
57 }
58}
59
60#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
63pub struct GrantPage {
64 #[serde(rename = "items")]
66 pub items: Vec<Grant>,
67 #[serde(rename = "nextPageToken")]
69 #[serde(default, skip_serializing_if = "Option::is_none")]
70 pub next_page_token: Option<String>,
71}
72impl<'de> DeserializeStrict<'de> for GrantPage {
73 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
74 #[derive(Deserialize)]
75 #[serde(deny_unknown_fields)]
76 struct __Wire {
77 #[serde(rename = "items")]
78 items: Strict<Vec<Grant>>,
79 #[serde(rename = "nextPageToken")]
80 #[serde(default)]
81 next_page_token: Strict<Option<String>>,
82 }
83 let wire = __Wire::deserialize(deserializer)?;
84 Ok(Self {
85 items: wire.items.0,
86 next_page_token: wire.next_page_token.0,
87 })
88 }
89}
90
91#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
93pub struct GrantResponse {
94 #[serde(rename = "grant")]
96 pub grant: Grant,
97}
98impl<'de> DeserializeStrict<'de> for GrantResponse {
99 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
100 #[derive(Deserialize)]
101 #[serde(deny_unknown_fields)]
102 struct __Wire {
103 #[serde(rename = "grant")]
104 grant: Strict<Grant>,
105 }
106 let wire = __Wire::deserialize(deserializer)?;
107 Ok(Self {
108 grant: wire.grant.0,
109 })
110 }
111}
112
113#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
115pub struct GrantRoleRequest {
116 #[serde(rename = "principal")]
118 pub principal: Principal,
119 #[serde(rename = "role")]
121 pub role: Role,
122}
123impl<'de> DeserializeStrict<'de> for GrantRoleRequest {
124 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
125 #[derive(Deserialize)]
126 #[serde(deny_unknown_fields)]
127 struct __Wire {
128 #[serde(rename = "principal")]
129 principal: Strict<Principal>,
130 #[serde(rename = "role")]
131 role: Strict<Role>,
132 }
133 let wire = __Wire::deserialize(deserializer)?;
134 Ok(Self {
135 principal: wire.principal.0,
136 role: wire.role.0,
137 })
138 }
139}
140
141#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
143pub struct Installation {
144 #[serde(rename = "createdAt")]
146 pub created_at: String,
147 #[serde(rename = "createdBy")]
149 pub created_by: String,
150 #[serde(rename = "id")]
152 pub id: String,
153 #[serde(rename = "resourceMounts")]
155 pub resource_mounts: Vec<ResourceMount>,
156 #[serde(rename = "source")]
158 pub source: String,
159}
160impl<'de> DeserializeStrict<'de> for Installation {
161 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
162 #[derive(Deserialize)]
163 #[serde(deny_unknown_fields)]
164 struct __Wire {
165 #[serde(rename = "createdAt")]
166 created_at: Strict<String>,
167 #[serde(rename = "createdBy")]
168 created_by: Strict<String>,
169 #[serde(rename = "id")]
170 id: Strict<String>,
171 #[serde(rename = "resourceMounts")]
172 resource_mounts: Strict<Vec<ResourceMount>>,
173 #[serde(rename = "source")]
174 source: Strict<String>,
175 }
176 let wire = __Wire::deserialize(deserializer)?;
177 Ok(Self {
178 created_at: wire.created_at.0,
179 created_by: wire.created_by.0,
180 id: wire.id.0,
181 resource_mounts: wire.resource_mounts.0,
182 source: wire.source.0,
183 })
184 }
185}
186
187#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
189pub struct InstallationResponse {
190 #[serde(rename = "installation")]
192 pub installation: Installation,
193}
194impl<'de> DeserializeStrict<'de> for InstallationResponse {
195 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
196 #[derive(Deserialize)]
197 #[serde(deny_unknown_fields)]
198 struct __Wire {
199 #[serde(rename = "installation")]
200 installation: Strict<Installation>,
201 }
202 let wire = __Wire::deserialize(deserializer)?;
203 Ok(Self {
204 installation: wire.installation.0,
205 })
206 }
207}
208
209#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
212pub struct ListGrantsRequest {
213 #[serde(rename = "pageSize")]
215 #[serde(default, skip_serializing_if = "Option::is_none")]
216 pub page_size: Option<u32>,
217 #[serde(rename = "pageToken")]
219 #[serde(default, skip_serializing_if = "Option::is_none")]
220 pub page_token: Option<String>,
221 #[serde(rename = "principal")]
223 #[serde(default, skip_serializing_if = "Option::is_none")]
224 pub principal: Option<String>,
225}
226impl<'de> DeserializeStrict<'de> for ListGrantsRequest {
227 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
228 #[derive(Deserialize)]
229 #[serde(deny_unknown_fields)]
230 struct __Wire {
231 #[serde(rename = "pageSize")]
232 #[serde(default)]
233 page_size: Strict<Option<u32>>,
234 #[serde(rename = "pageToken")]
235 #[serde(default)]
236 page_token: Strict<Option<String>>,
237 #[serde(rename = "principal")]
238 #[serde(default)]
239 principal: Strict<Option<String>>,
240 }
241 let wire = __Wire::deserialize(deserializer)?;
242 Ok(Self {
243 page_size: wire.page_size.0,
244 page_token: wire.page_token.0,
245 principal: wire.principal.0,
246 })
247 }
248}
249
250#[derive(Clone, Debug, PartialEq, Eq)]
252pub enum MountDecision {
253 Approve,
255 Reject,
257 Unknown(String),
259}
260impl Serialize for MountDecision {
261 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
262 serializer.serialize_str(match self {
263 Self::Approve => "approve",
264 Self::Reject => "reject",
265 Self::Unknown(value) => value,
266 })
267 }
268}
269impl<'de> Deserialize<'de> for MountDecision {
270 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
271 Ok(match String::deserialize(deserializer)?.as_str() {
272 "approve" => Self::Approve,
273 "reject" => Self::Reject,
274 value => Self::Unknown(value.to_owned()),
275 })
276 }
277}
278impl<'de> DeserializeStrict<'de> for MountDecision {
279 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
280 #[derive(Deserialize)]
281 enum __Known {
282 #[serde(rename = "approve")]
283 Approve,
284 #[serde(rename = "reject")]
285 Reject,
286 }
287 Ok(match __Known::deserialize(deserializer)? {
288 __Known::Approve => Self::Approve,
289 __Known::Reject => Self::Reject,
290 })
291 }
292}
293
294#[derive(Clone, Debug, PartialEq, Eq)]
296pub enum MountStatus {
297 Requested,
299 Approved,
301 Rejected,
303 Revoked,
305 Detached,
307 Unknown(String),
309}
310impl Serialize for MountStatus {
311 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
312 serializer.serialize_str(match self {
313 Self::Requested => "requested",
314 Self::Approved => "approved",
315 Self::Rejected => "rejected",
316 Self::Revoked => "revoked",
317 Self::Detached => "detached",
318 Self::Unknown(value) => value,
319 })
320 }
321}
322impl<'de> Deserialize<'de> for MountStatus {
323 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
324 Ok(match String::deserialize(deserializer)?.as_str() {
325 "requested" => Self::Requested,
326 "approved" => Self::Approved,
327 "rejected" => Self::Rejected,
328 "revoked" => Self::Revoked,
329 "detached" => Self::Detached,
330 value => Self::Unknown(value.to_owned()),
331 })
332 }
333}
334impl<'de> DeserializeStrict<'de> for MountStatus {
335 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
336 #[derive(Deserialize)]
337 enum __Known {
338 #[serde(rename = "requested")]
339 Requested,
340 #[serde(rename = "approved")]
341 Approved,
342 #[serde(rename = "rejected")]
343 Rejected,
344 #[serde(rename = "revoked")]
345 Revoked,
346 #[serde(rename = "detached")]
347 Detached,
348 }
349 Ok(match __Known::deserialize(deserializer)? {
350 __Known::Requested => Self::Requested,
351 __Known::Approved => Self::Approved,
352 __Known::Rejected => Self::Rejected,
353 __Known::Revoked => Self::Revoked,
354 __Known::Detached => Self::Detached,
355 })
356 }
357}
358
359#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
361pub struct OrganizationRolePrincipal {
362 #[serde(rename = "organizationId")]
364 pub organization_id: String,
365 #[serde(rename = "role")]
367 pub role: String,
368}
369impl<'de> DeserializeStrict<'de> for OrganizationRolePrincipal {
370 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
371 #[derive(Deserialize)]
372 #[serde(deny_unknown_fields)]
373 struct __Wire {
374 #[serde(rename = "organizationId")]
375 organization_id: Strict<String>,
376 #[serde(rename = "role")]
377 role: Strict<String>,
378 }
379 let wire = __Wire::deserialize(deserializer)?;
380 Ok(Self {
381 organization_id: wire.organization_id.0,
382 role: wire.role.0,
383 })
384 }
385}
386
387#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
389pub struct OrganizationUserPrincipal {
390 #[serde(rename = "organizationId")]
392 pub organization_id: String,
393 #[serde(rename = "userId")]
395 pub user_id: String,
396}
397impl<'de> DeserializeStrict<'de> for OrganizationUserPrincipal {
398 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
399 #[derive(Deserialize)]
400 #[serde(deny_unknown_fields)]
401 struct __Wire {
402 #[serde(rename = "organizationId")]
403 organization_id: Strict<String>,
404 #[serde(rename = "userId")]
405 user_id: Strict<String>,
406 }
407 let wire = __Wire::deserialize(deserializer)?;
408 Ok(Self {
409 organization_id: wire.organization_id.0,
410 user_id: wire.user_id.0,
411 })
412 }
413}
414
415#[derive(Clone, Debug, PartialEq, Eq)]
417pub enum Principal {
418 OrganizationRole(OrganizationRolePrincipal),
420 OrganizationUser(OrganizationUserPrincipal),
422 Workload(WorkloadPrincipal),
424 Unknown { tag: String, value: Value },
426}
427impl Serialize for Principal {
428 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
429 match self {
430 Self::OrganizationRole(value) => {
431 let mut object = serde_json::Map::new();
432 object.insert("type".into(), Value::String("organizationRole".into()));
433 object.insert(
434 "organizationRole".into(),
435 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
436 );
437 Value::Object(object).serialize(serializer)
438 }
439 Self::OrganizationUser(value) => {
440 let mut object = serde_json::Map::new();
441 object.insert("type".into(), Value::String("organizationUser".into()));
442 object.insert(
443 "organizationUser".into(),
444 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
445 );
446 Value::Object(object).serialize(serializer)
447 }
448 Self::Workload(value) => {
449 let mut object = serde_json::Map::new();
450 object.insert("type".into(), Value::String("workload".into()));
451 object.insert(
452 "workload".into(),
453 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
454 );
455 Value::Object(object).serialize(serializer)
456 }
457 Self::Unknown { tag, value } => {
458 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
459 return Err(serde::ser::Error::custom(
460 "unknown union discriminator mismatch",
461 ));
462 }
463 value.serialize(serializer)
464 }
465 }
466 }
467}
468impl<'de> Deserialize<'de> for Principal {
469 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
470 let value = Value::deserialize(deserializer)?;
471 let tag = value
472 .get("type")
473 .and_then(Value::as_str)
474 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
475 match tag {
476 "organizationRole" => Ok(Self::OrganizationRole(
477 serde_json::from_value(
478 value
479 .get("organizationRole")
480 .cloned()
481 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
482 )
483 .map_err(serde::de::Error::custom)?,
484 )),
485 "organizationUser" => Ok(Self::OrganizationUser(
486 serde_json::from_value(
487 value
488 .get("organizationUser")
489 .cloned()
490 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
491 )
492 .map_err(serde::de::Error::custom)?,
493 )),
494 "workload" => Ok(Self::Workload(
495 serde_json::from_value(
496 value
497 .get("workload")
498 .cloned()
499 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
500 )
501 .map_err(serde::de::Error::custom)?,
502 )),
503 tag => Ok(Self::Unknown {
504 tag: tag.to_owned(),
505 value,
506 }),
507 }
508 }
509}
510impl<'de> DeserializeStrict<'de> for Principal {
511 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
512 #[derive(Deserialize)]
513 enum __Tag0 {
514 #[serde(rename = "organizationRole")]
515 Value,
516 }
517 #[derive(Deserialize)]
518 #[serde(deny_unknown_fields)]
519 struct __Arm0 {
520 #[serde(rename = "type")]
521 _tag: __Tag0,
522 #[serde(rename = "organizationRole")]
523 value: Strict<OrganizationRolePrincipal>,
524 }
525 #[derive(Deserialize)]
526 enum __Tag1 {
527 #[serde(rename = "organizationUser")]
528 Value,
529 }
530 #[derive(Deserialize)]
531 #[serde(deny_unknown_fields)]
532 struct __Arm1 {
533 #[serde(rename = "type")]
534 _tag: __Tag1,
535 #[serde(rename = "organizationUser")]
536 value: Strict<OrganizationUserPrincipal>,
537 }
538 #[derive(Deserialize)]
539 enum __Tag2 {
540 #[serde(rename = "workload")]
541 Value,
542 }
543 #[derive(Deserialize)]
544 #[serde(deny_unknown_fields)]
545 struct __Arm2 {
546 #[serde(rename = "type")]
547 _tag: __Tag2,
548 #[serde(rename = "workload")]
549 value: Strict<WorkloadPrincipal>,
550 }
551 #[derive(Deserialize)]
552 #[serde(untagged)]
553 enum __Known {
554 OrganizationRole(Box<__Arm0>),
555 OrganizationUser(Box<__Arm1>),
556 Workload(Box<__Arm2>),
557 }
558 Ok(match __Known::deserialize(deserializer)? {
559 __Known::OrganizationRole(arm) => Self::OrganizationRole(arm.value.0),
560 __Known::OrganizationUser(arm) => Self::OrganizationUser(arm.value.0),
561 __Known::Workload(arm) => Self::Workload(arm.value.0),
562 })
563 }
564}
565
566#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
568pub struct ResourceMount {
569 #[serde(rename = "createdAt")]
571 pub created_at: String,
572 #[serde(rename = "createdBy")]
574 pub created_by: String,
575 #[serde(rename = "id")]
577 pub id: String,
578 #[serde(rename = "installationId")]
580 pub installation_id: String,
581 #[serde(rename = "permission")]
583 pub permission: String,
584 #[serde(rename = "source")]
586 pub source: String,
587 #[serde(rename = "status")]
589 pub status: MountStatus,
590 #[serde(rename = "statusChangedAt")]
592 #[serde(default, skip_serializing_if = "Option::is_none")]
593 pub status_changed_at: Option<String>,
594 #[serde(rename = "statusChangedBy")]
596 #[serde(default, skip_serializing_if = "Option::is_none")]
597 pub status_changed_by: Option<String>,
598 #[serde(rename = "target")]
600 pub target: String,
601}
602impl<'de> DeserializeStrict<'de> for ResourceMount {
603 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
604 #[derive(Deserialize)]
605 #[serde(deny_unknown_fields)]
606 struct __Wire {
607 #[serde(rename = "createdAt")]
608 created_at: Strict<String>,
609 #[serde(rename = "createdBy")]
610 created_by: Strict<String>,
611 #[serde(rename = "id")]
612 id: Strict<String>,
613 #[serde(rename = "installationId")]
614 installation_id: Strict<String>,
615 #[serde(rename = "permission")]
616 permission: Strict<String>,
617 #[serde(rename = "source")]
618 source: Strict<String>,
619 #[serde(rename = "status")]
620 status: Strict<MountStatus>,
621 #[serde(rename = "statusChangedAt")]
622 #[serde(default)]
623 status_changed_at: Strict<Option<String>>,
624 #[serde(rename = "statusChangedBy")]
625 #[serde(default)]
626 status_changed_by: Strict<Option<String>>,
627 #[serde(rename = "target")]
628 target: Strict<String>,
629 }
630 let wire = __Wire::deserialize(deserializer)?;
631 Ok(Self {
632 created_at: wire.created_at.0,
633 created_by: wire.created_by.0,
634 id: wire.id.0,
635 installation_id: wire.installation_id.0,
636 permission: wire.permission.0,
637 source: wire.source.0,
638 status: wire.status.0,
639 status_changed_at: wire.status_changed_at.0,
640 status_changed_by: wire.status_changed_by.0,
641 target: wire.target.0,
642 })
643 }
644}
645
646#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
648pub struct ReviewRequest {
649 #[serde(rename = "decisions")]
651 pub decisions: BTreeMap<String, MountDecision>,
652}
653impl<'de> DeserializeStrict<'de> for ReviewRequest {
654 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
655 #[derive(Deserialize)]
656 #[serde(deny_unknown_fields)]
657 struct __Wire {
658 #[serde(rename = "decisions")]
659 decisions: Strict<BTreeMap<String, MountDecision>>,
660 }
661 let wire = __Wire::deserialize(deserializer)?;
662 Ok(Self {
663 decisions: wire.decisions.0,
664 })
665 }
666}
667
668#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
670pub struct ReviewResponse {
671 #[serde(rename = "resourceMounts")]
673 pub resource_mounts: Vec<ResourceMount>,
674}
675impl<'de> DeserializeStrict<'de> for ReviewResponse {
676 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
677 #[derive(Deserialize)]
678 #[serde(deny_unknown_fields)]
679 struct __Wire {
680 #[serde(rename = "resourceMounts")]
681 resource_mounts: Strict<Vec<ResourceMount>>,
682 }
683 let wire = __Wire::deserialize(deserializer)?;
684 Ok(Self {
685 resource_mounts: wire.resource_mounts.0,
686 })
687 }
688}
689
690#[derive(Clone, Debug, PartialEq, Eq)]
692pub enum Role {
693 Admin,
695 Editor,
697 Viewer,
699 Unknown(String),
701}
702impl Serialize for Role {
703 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
704 serializer.serialize_str(match self {
705 Self::Admin => "admin",
706 Self::Editor => "editor",
707 Self::Viewer => "viewer",
708 Self::Unknown(value) => value,
709 })
710 }
711}
712impl<'de> Deserialize<'de> for Role {
713 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
714 Ok(match String::deserialize(deserializer)?.as_str() {
715 "admin" => Self::Admin,
716 "editor" => Self::Editor,
717 "viewer" => Self::Viewer,
718 value => Self::Unknown(value.to_owned()),
719 })
720 }
721}
722impl<'de> DeserializeStrict<'de> for Role {
723 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
724 #[derive(Deserialize)]
725 enum __Known {
726 #[serde(rename = "admin")]
727 Admin,
728 #[serde(rename = "editor")]
729 Editor,
730 #[serde(rename = "viewer")]
731 Viewer,
732 }
733 Ok(match __Known::deserialize(deserializer)? {
734 __Known::Admin => Self::Admin,
735 __Known::Editor => Self::Editor,
736 __Known::Viewer => Self::Viewer,
737 })
738 }
739}
740
741#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
743pub struct WorkloadPrincipal {
744 #[serde(rename = "workloadId")]
746 pub workload_id: String,
747}
748impl<'de> DeserializeStrict<'de> for WorkloadPrincipal {
749 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
750 #[derive(Deserialize)]
751 #[serde(deny_unknown_fields)]
752 struct __Wire {
753 #[serde(rename = "workloadId")]
754 workload_id: Strict<String>,
755 }
756 let wire = __Wire::deserialize(deserializer)?;
757 Ok(Self {
758 workload_id: wire.workload_id.0,
759 })
760 }
761}
762
763#[derive(Clone, Debug, PartialEq, Eq)]
765pub enum AuthorizationError {
766 Conflict { reason: String },
768 InvalidArgument { reason: String },
770 LimitReached { reason: String },
772 NotFound { resource: String },
774}
775impl AuthorizationError {
776 pub fn status(&self) -> u16 {
778 match self {
779 Self::Conflict { .. } => 409,
780 Self::InvalidArgument { .. } => 400,
781 Self::LimitReached { .. } => 412,
782 Self::NotFound { .. } => 404,
783 }
784 }
785 pub fn envelope(&self, instance: String) -> ErrorEnvelope {
787 match self {
788 Self::Conflict { reason } => {
789 let mut envelope =
790 ErrorEnvelope::new("CONFLICT", "Authorization:Conflict", instance);
791 envelope
792 .parameters
793 .insert("reason".into(), reason.to_string());
794 envelope
795 }
796 Self::InvalidArgument { reason } => {
797 let mut envelope = ErrorEnvelope::new(
798 "INVALID_ARGUMENT",
799 "Authorization:InvalidArgument",
800 instance,
801 );
802 envelope
803 .parameters
804 .insert("reason".into(), reason.to_string());
805 envelope
806 }
807 Self::LimitReached { reason } => {
808 let mut envelope = ErrorEnvelope::new(
809 "FAILED_PRECONDITION",
810 "Authorization:LimitReached",
811 instance,
812 );
813 envelope
814 .parameters
815 .insert("reason".into(), reason.to_string());
816 envelope
817 }
818 Self::NotFound { resource } => {
819 let mut envelope =
820 ErrorEnvelope::new("NOT_FOUND", "Authorization:NotFound", instance);
821 envelope
822 .parameters
823 .insert("resource".into(), resource.to_string());
824 envelope
825 }
826 }
827 }
828 pub fn decode_envelope(envelope: &ErrorEnvelope) -> Option<Self> {
830 if envelope.error_instance_id.len() != 36
831 || Uuid::parse_str(&envelope.error_instance_id).is_err()
832 {
833 return None;
834 }
835 match envelope.error_name.as_str() {
836 "Authorization:Conflict" => {
837 if envelope.error_code != "CONFLICT" {
838 return None;
839 }
840 let reason = envelope.parameters.get("reason")?.clone();
841 Some(Self::Conflict { reason })
842 }
843 "Authorization:InvalidArgument" => {
844 if envelope.error_code != "INVALID_ARGUMENT" {
845 return None;
846 }
847 let reason = envelope.parameters.get("reason")?.clone();
848 Some(Self::InvalidArgument { reason })
849 }
850 "Authorization:LimitReached" => {
851 if envelope.error_code != "FAILED_PRECONDITION" {
852 return None;
853 }
854 let reason = envelope.parameters.get("reason")?.clone();
855 Some(Self::LimitReached { reason })
856 }
857 "Authorization:NotFound" => {
858 if envelope.error_code != "NOT_FOUND" {
859 return None;
860 }
861 let resource = envelope.parameters.get("resource")?.clone();
862 Some(Self::NotFound { resource })
863 }
864 _ => None,
865 }
866 }
867}
868impl Display for AuthorizationError {
869 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
870 match self {
871 Self::Conflict { reason } => {
872 write!(formatter, "Authorization:Conflict (reason: {})", reason)
873 }
874 Self::InvalidArgument { reason } => write!(
875 formatter,
876 "Authorization:InvalidArgument (reason: {})",
877 reason
878 ),
879 Self::LimitReached { reason } => {
880 write!(formatter, "Authorization:LimitReached (reason: {})", reason)
881 }
882 Self::NotFound { resource } => {
883 write!(formatter, "Authorization:NotFound (resource: {})", resource)
884 }
885 }
886 }
887}
888impl StdError for AuthorizationError {}
889impl ServiceError for AuthorizationError {
890 fn to_envelope(&self, instance: String) -> ErrorEnvelope {
891 Self::envelope(self, instance)
892 }
893 fn from_envelope(envelope: &ErrorEnvelope) -> Option<Self> {
894 Self::decode_envelope(envelope)
895 }
896}
897#[automatically_derived]
898impl Default for ListGrantsRequest {
899 fn default() -> Self {
900 Self {
901 page_size: None,
902 page_token: None,
903 principal: None,
904 }
905 }
906}