1#![doc = "Generated transport-independent contract objects."]
3
4use std::error::Error as StdError;
5use std::fmt::{self, Display, Formatter};
6
7use serde::{Deserialize, Deserializer, Serialize, Serializer};
8use serde_json::Value;
9use spiral_contract::error::{ErrorEnvelope, ServiceError};
10use spiral_contract::safelong::{SafeLong, SafeUnsignedLong};
11use spiral_contract::strict::{DeserializeStrict, Strict};
12use uuid::Uuid;
13
14#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
17#[serde(transparent)]
18pub struct ActorId(pub String);
19impl std::fmt::Display for ActorId {
20 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 self.0.fmt(formatter)
22 }
23}
24impl<'de> DeserializeStrict<'de> for ActorId {
25 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
27 }
28}
29
30#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
33pub struct AdvanceResourceChange {
34 #[serde(rename = "expected")]
36 pub expected: VersionId,
37 #[serde(rename = "replacement")]
39 pub replacement: VersionId,
40 #[serde(rename = "resourceId")]
42 pub resource_id: ResourceId,
43}
44impl<'de> DeserializeStrict<'de> for AdvanceResourceChange {
45 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
46 #[derive(Deserialize)]
47 #[serde(deny_unknown_fields)]
48 struct __Wire {
49 #[serde(rename = "expected")]
50 expected: Strict<VersionId>,
51 #[serde(rename = "replacement")]
52 replacement: Strict<VersionId>,
53 #[serde(rename = "resourceId")]
54 resource_id: Strict<ResourceId>,
55 }
56 let wire = __Wire::deserialize(deserializer)?;
57 Ok(Self {
58 expected: wire.expected.0,
59 replacement: wire.replacement.0,
60 resource_id: wire.resource_id.0,
61 })
62 }
63}
64
65#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
67pub struct AlreadyUpToDate {
68 #[serde(rename = "sourceCommitId")]
70 pub source_commit_id: CommitId,
71 #[serde(rename = "targetCommitId")]
73 pub target_commit_id: CommitId,
74}
75impl<'de> DeserializeStrict<'de> for AlreadyUpToDate {
76 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
77 #[derive(Deserialize)]
78 #[serde(deny_unknown_fields)]
79 struct __Wire {
80 #[serde(rename = "sourceCommitId")]
81 source_commit_id: Strict<CommitId>,
82 #[serde(rename = "targetCommitId")]
83 target_commit_id: Strict<CommitId>,
84 }
85 let wire = __Wire::deserialize(deserializer)?;
86 Ok(Self {
87 source_commit_id: wire.source_commit_id.0,
88 target_commit_id: wire.target_commit_id.0,
89 })
90 }
91}
92
93#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
95pub struct AssertNamespaceChange {
96 #[serde(rename = "expected")]
98 #[serde(default, skip_serializing_if = "Option::is_none")]
99 pub expected: Option<ResourceId>,
100 #[serde(rename = "name")]
102 pub name: NamespaceSegment,
103 #[serde(rename = "parent")]
105 pub parent: NamespaceParent,
106}
107impl<'de> DeserializeStrict<'de> for AssertNamespaceChange {
108 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
109 #[derive(Deserialize)]
110 #[serde(deny_unknown_fields)]
111 struct __Wire {
112 #[serde(rename = "expected")]
113 #[serde(default)]
114 expected: Strict<Option<ResourceId>>,
115 #[serde(rename = "name")]
116 name: Strict<NamespaceSegment>,
117 #[serde(rename = "parent")]
118 parent: Strict<NamespaceParent>,
119 }
120 let wire = __Wire::deserialize(deserializer)?;
121 Ok(Self {
122 expected: wire.expected.0,
123 name: wire.name.0,
124 parent: wire.parent.0,
125 })
126 }
127}
128
129#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
133pub struct AssertResourceChange {
134 #[serde(rename = "expected")]
136 #[serde(default, skip_serializing_if = "Option::is_none")]
137 pub expected: Option<VersionId>,
138 #[serde(rename = "resourceId")]
140 pub resource_id: ResourceId,
141}
142impl<'de> DeserializeStrict<'de> for AssertResourceChange {
143 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
144 #[derive(Deserialize)]
145 #[serde(deny_unknown_fields)]
146 struct __Wire {
147 #[serde(rename = "expected")]
148 #[serde(default)]
149 expected: Strict<Option<VersionId>>,
150 #[serde(rename = "resourceId")]
151 resource_id: Strict<ResourceId>,
152 }
153 let wire = __Wire::deserialize(deserializer)?;
154 Ok(Self {
155 expected: wire.expected.0,
156 resource_id: wire.resource_id.0,
157 })
158 }
159}
160
161#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
164pub struct BindNamespaceChange {
165 #[serde(rename = "expected")]
167 #[serde(default, skip_serializing_if = "Option::is_none")]
168 pub expected: Option<ResourceId>,
169 #[serde(rename = "name")]
171 pub name: NamespaceSegment,
172 #[serde(rename = "parent")]
174 pub parent: NamespaceParent,
175 #[serde(rename = "replacement")]
177 pub replacement: ResourceId,
178}
179impl<'de> DeserializeStrict<'de> for BindNamespaceChange {
180 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
181 #[derive(Deserialize)]
182 #[serde(deny_unknown_fields)]
183 struct __Wire {
184 #[serde(rename = "expected")]
185 #[serde(default)]
186 expected: Strict<Option<ResourceId>>,
187 #[serde(rename = "name")]
188 name: Strict<NamespaceSegment>,
189 #[serde(rename = "parent")]
190 parent: Strict<NamespaceParent>,
191 #[serde(rename = "replacement")]
192 replacement: Strict<ResourceId>,
193 }
194 let wire = __Wire::deserialize(deserializer)?;
195 Ok(Self {
196 expected: wire.expected.0,
197 name: wire.name.0,
198 parent: wire.parent.0,
199 replacement: wire.replacement.0,
200 })
201 }
202}
203
204#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
206pub struct BindingConstraint {
207 #[serde(rename = "name")]
209 pub name: NamespaceSegment,
210 #[serde(rename = "parent")]
212 pub parent: NamespaceParent,
213}
214impl<'de> DeserializeStrict<'de> for BindingConstraint {
215 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
216 #[derive(Deserialize)]
217 #[serde(deny_unknown_fields)]
218 struct __Wire {
219 #[serde(rename = "name")]
220 name: Strict<NamespaceSegment>,
221 #[serde(rename = "parent")]
222 parent: Strict<NamespaceParent>,
223 }
224 let wire = __Wire::deserialize(deserializer)?;
225 Ok(Self {
226 name: wire.name.0,
227 parent: wire.parent.0,
228 })
229 }
230}
231
232#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
234pub struct Branch {
235 #[serde(rename = "branchId")]
237 pub branch_id: BranchId,
238 #[serde(rename = "createdAtMicros")]
240 pub created_at_micros: SafeLong,
241 #[serde(rename = "deletedAtMicros")]
243 #[serde(default, skip_serializing_if = "Option::is_none")]
244 pub deleted_at_micros: Option<SafeLong>,
245 #[serde(rename = "headCommitId")]
247 pub head_commit_id: CommitId,
248 #[serde(rename = "lastBranchEventId")]
250 pub last_branch_event_id: BranchEventId,
251 #[serde(rename = "name")]
253 pub name: BranchName,
254}
255impl<'de> DeserializeStrict<'de> for Branch {
256 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
257 #[derive(Deserialize)]
258 #[serde(deny_unknown_fields)]
259 struct __Wire {
260 #[serde(rename = "branchId")]
261 branch_id: Strict<BranchId>,
262 #[serde(rename = "createdAtMicros")]
263 created_at_micros: Strict<SafeLong>,
264 #[serde(rename = "deletedAtMicros")]
265 #[serde(default)]
266 deleted_at_micros: Strict<Option<SafeLong>>,
267 #[serde(rename = "headCommitId")]
268 head_commit_id: Strict<CommitId>,
269 #[serde(rename = "lastBranchEventId")]
270 last_branch_event_id: Strict<BranchEventId>,
271 #[serde(rename = "name")]
272 name: Strict<BranchName>,
273 }
274 let wire = __Wire::deserialize(deserializer)?;
275 Ok(Self {
276 branch_id: wire.branch_id.0,
277 created_at_micros: wire.created_at_micros.0,
278 deleted_at_micros: wire.deleted_at_micros.0,
279 head_commit_id: wire.head_commit_id.0,
280 last_branch_event_id: wire.last_branch_event_id.0,
281 name: wire.name.0,
282 })
283 }
284}
285
286#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
289pub struct BranchEvent {
290 #[serde(rename = "actor")]
292 pub actor: ActorId,
293 #[serde(rename = "branchEventId")]
295 pub branch_event_id: BranchEventId,
296 #[serde(rename = "branchId")]
298 pub branch_id: BranchId,
299 #[serde(rename = "message")]
301 #[serde(default, skip_serializing_if = "Option::is_none")]
302 pub message: Option<String>,
303 #[serde(rename = "newCommitId")]
305 #[serde(default, skip_serializing_if = "Option::is_none")]
306 pub new_commit_id: Option<CommitId>,
307 #[serde(rename = "newName")]
309 #[serde(default, skip_serializing_if = "Option::is_none")]
310 pub new_name: Option<BranchName>,
311 #[serde(rename = "occurredAtMicros")]
313 pub occurred_at_micros: SafeLong,
314 #[serde(rename = "oldCommitId")]
316 #[serde(default, skip_serializing_if = "Option::is_none")]
317 pub old_commit_id: Option<CommitId>,
318 #[serde(rename = "oldName")]
320 #[serde(default, skip_serializing_if = "Option::is_none")]
321 pub old_name: Option<BranchName>,
322 #[serde(rename = "operation")]
324 pub operation: BranchEventOperation,
325 #[serde(rename = "previousBranchEventId")]
327 #[serde(default, skip_serializing_if = "Option::is_none")]
328 pub previous_branch_event_id: Option<BranchEventId>,
329 #[serde(rename = "transactionId")]
331 #[serde(default, skip_serializing_if = "Option::is_none")]
332 pub transaction_id: Option<TransactionId>,
333}
334impl<'de> DeserializeStrict<'de> for BranchEvent {
335 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
336 #[derive(Deserialize)]
337 #[serde(deny_unknown_fields)]
338 struct __Wire {
339 #[serde(rename = "actor")]
340 actor: Strict<ActorId>,
341 #[serde(rename = "branchEventId")]
342 branch_event_id: Strict<BranchEventId>,
343 #[serde(rename = "branchId")]
344 branch_id: Strict<BranchId>,
345 #[serde(rename = "message")]
346 #[serde(default)]
347 message: Strict<Option<String>>,
348 #[serde(rename = "newCommitId")]
349 #[serde(default)]
350 new_commit_id: Strict<Option<CommitId>>,
351 #[serde(rename = "newName")]
352 #[serde(default)]
353 new_name: Strict<Option<BranchName>>,
354 #[serde(rename = "occurredAtMicros")]
355 occurred_at_micros: Strict<SafeLong>,
356 #[serde(rename = "oldCommitId")]
357 #[serde(default)]
358 old_commit_id: Strict<Option<CommitId>>,
359 #[serde(rename = "oldName")]
360 #[serde(default)]
361 old_name: Strict<Option<BranchName>>,
362 #[serde(rename = "operation")]
363 operation: Strict<BranchEventOperation>,
364 #[serde(rename = "previousBranchEventId")]
365 #[serde(default)]
366 previous_branch_event_id: Strict<Option<BranchEventId>>,
367 #[serde(rename = "transactionId")]
368 #[serde(default)]
369 transaction_id: Strict<Option<TransactionId>>,
370 }
371 let wire = __Wire::deserialize(deserializer)?;
372 Ok(Self {
373 actor: wire.actor.0,
374 branch_event_id: wire.branch_event_id.0,
375 branch_id: wire.branch_id.0,
376 message: wire.message.0,
377 new_commit_id: wire.new_commit_id.0,
378 new_name: wire.new_name.0,
379 occurred_at_micros: wire.occurred_at_micros.0,
380 old_commit_id: wire.old_commit_id.0,
381 old_name: wire.old_name.0,
382 operation: wire.operation.0,
383 previous_branch_event_id: wire.previous_branch_event_id.0,
384 transaction_id: wire.transaction_id.0,
385 })
386 }
387}
388
389#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
391#[serde(transparent)]
392pub struct BranchEventId(pub Uuid);
393impl std::fmt::Display for BranchEventId {
394 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
395 self.0.fmt(formatter)
396 }
397}
398impl<'de> DeserializeStrict<'de> for BranchEventId {
399 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
400 Ok(Self(Strict::<Uuid>::deserialize(deserializer)?.0))
401 }
402}
403
404#[derive(Clone, Debug, PartialEq, Eq)]
407pub enum BranchEventOperation {
408 Create,
410 Advance,
412 Merge,
414 Rename,
416 Delete,
418 Unknown(String),
420}
421impl Serialize for BranchEventOperation {
422 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
423 serializer.serialize_str(match self {
424 Self::Create => "create",
425 Self::Advance => "advance",
426 Self::Merge => "merge",
427 Self::Rename => "rename",
428 Self::Delete => "delete",
429 Self::Unknown(value) => value,
430 })
431 }
432}
433impl<'de> Deserialize<'de> for BranchEventOperation {
434 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
435 Ok(match String::deserialize(deserializer)?.as_str() {
436 "create" => Self::Create,
437 "advance" => Self::Advance,
438 "merge" => Self::Merge,
439 "rename" => Self::Rename,
440 "delete" => Self::Delete,
441 value => Self::Unknown(value.to_owned()),
442 })
443 }
444}
445impl<'de> DeserializeStrict<'de> for BranchEventOperation {
446 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
447 #[derive(Deserialize)]
448 enum __Known {
449 #[serde(rename = "create")]
450 Create,
451 #[serde(rename = "advance")]
452 Advance,
453 #[serde(rename = "merge")]
454 Merge,
455 #[serde(rename = "rename")]
456 Rename,
457 #[serde(rename = "delete")]
458 Delete,
459 }
460 Ok(match __Known::deserialize(deserializer)? {
461 __Known::Create => Self::Create,
462 __Known::Advance => Self::Advance,
463 __Known::Merge => Self::Merge,
464 __Known::Rename => Self::Rename,
465 __Known::Delete => Self::Delete,
466 })
467 }
468}
469
470#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
473pub struct BranchEventPage {
474 #[serde(rename = "branchId")]
476 pub branch_id: BranchId,
477 #[serde(rename = "currentName")]
479 #[serde(default, skip_serializing_if = "Option::is_none")]
480 pub current_name: Option<BranchName>,
481 #[serde(rename = "deletedAtMicros")]
483 #[serde(default, skip_serializing_if = "Option::is_none")]
484 pub deleted_at_micros: Option<SafeLong>,
485 #[serde(rename = "events")]
487 pub events: Vec<BranchEvent>,
488 #[serde(rename = "nextPageToken")]
490 #[serde(default, skip_serializing_if = "Option::is_none")]
491 pub next_page_token: Option<PageToken>,
492}
493impl<'de> DeserializeStrict<'de> for BranchEventPage {
494 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
495 #[derive(Deserialize)]
496 #[serde(deny_unknown_fields)]
497 struct __Wire {
498 #[serde(rename = "branchId")]
499 branch_id: Strict<BranchId>,
500 #[serde(rename = "currentName")]
501 #[serde(default)]
502 current_name: Strict<Option<BranchName>>,
503 #[serde(rename = "deletedAtMicros")]
504 #[serde(default)]
505 deleted_at_micros: Strict<Option<SafeLong>>,
506 #[serde(rename = "events")]
507 events: Strict<Vec<BranchEvent>>,
508 #[serde(rename = "nextPageToken")]
509 #[serde(default)]
510 next_page_token: Strict<Option<PageToken>>,
511 }
512 let wire = __Wire::deserialize(deserializer)?;
513 Ok(Self {
514 branch_id: wire.branch_id.0,
515 current_name: wire.current_name.0,
516 deleted_at_micros: wire.deleted_at_micros.0,
517 events: wire.events.0,
518 next_page_token: wire.next_page_token.0,
519 })
520 }
521}
522
523#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
525#[serde(transparent)]
526pub struct BranchId(pub Uuid);
527impl std::fmt::Display for BranchId {
528 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
529 self.0.fmt(formatter)
530 }
531}
532impl<'de> DeserializeStrict<'de> for BranchId {
533 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
534 Ok(Self(Strict::<Uuid>::deserialize(deserializer)?.0))
535 }
536}
537
538#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
541#[serde(transparent)]
542pub struct BranchName(pub String);
543impl std::fmt::Display for BranchName {
544 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
545 self.0.fmt(formatter)
546 }
547}
548impl<'de> DeserializeStrict<'de> for BranchName {
549 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
550 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
551 }
552}
553
554#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
556pub struct BranchTarget {
557 #[serde(rename = "branch")]
559 pub branch: BranchName,
560}
561impl<'de> DeserializeStrict<'de> for BranchTarget {
562 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
563 #[derive(Deserialize)]
564 #[serde(deny_unknown_fields)]
565 struct __Wire {
566 #[serde(rename = "branch")]
567 branch: Strict<BranchName>,
568 }
569 let wire = __Wire::deserialize(deserializer)?;
570 Ok(Self {
571 branch: wire.branch.0,
572 })
573 }
574}
575
576#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
581pub struct Commit {
582 #[serde(rename = "actor")]
584 pub actor: ActorId,
585 #[serde(rename = "commitId")]
587 pub commit_id: CommitId,
588 #[serde(rename = "committedAtMicros")]
590 pub committed_at_micros: SafeLong,
591 #[serde(rename = "message")]
593 #[serde(default, skip_serializing_if = "Option::is_none")]
594 pub message: Option<String>,
595 #[serde(rename = "namespace")]
597 pub namespace: Vec<NamespaceChange>,
598 #[serde(rename = "parentCommitIds")]
600 pub parent_commit_ids: Vec<CommitId>,
601 #[serde(rename = "resources")]
603 pub resources: Vec<ResourceChange>,
604 #[serde(rename = "transactionId")]
606 #[serde(default, skip_serializing_if = "Option::is_none")]
607 pub transaction_id: Option<TransactionId>,
608}
609impl<'de> DeserializeStrict<'de> for Commit {
610 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
611 #[derive(Deserialize)]
612 #[serde(deny_unknown_fields)]
613 struct __Wire {
614 #[serde(rename = "actor")]
615 actor: Strict<ActorId>,
616 #[serde(rename = "commitId")]
617 commit_id: Strict<CommitId>,
618 #[serde(rename = "committedAtMicros")]
619 committed_at_micros: Strict<SafeLong>,
620 #[serde(rename = "message")]
621 #[serde(default)]
622 message: Strict<Option<String>>,
623 #[serde(rename = "namespace")]
624 namespace: Strict<Vec<NamespaceChange>>,
625 #[serde(rename = "parentCommitIds")]
626 parent_commit_ids: Strict<Vec<CommitId>>,
627 #[serde(rename = "resources")]
628 resources: Strict<Vec<ResourceChange>>,
629 #[serde(rename = "transactionId")]
630 #[serde(default)]
631 transaction_id: Strict<Option<TransactionId>>,
632 }
633 let wire = __Wire::deserialize(deserializer)?;
634 Ok(Self {
635 actor: wire.actor.0,
636 commit_id: wire.commit_id.0,
637 committed_at_micros: wire.committed_at_micros.0,
638 message: wire.message.0,
639 namespace: wire.namespace.0,
640 parent_commit_ids: wire.parent_commit_ids.0,
641 resources: wire.resources.0,
642 transaction_id: wire.transaction_id.0,
643 })
644 }
645}
646
647#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
649#[serde(transparent)]
650pub struct CommitId(pub Uuid);
651impl std::fmt::Display for CommitId {
652 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
653 self.0.fmt(formatter)
654 }
655}
656impl<'de> DeserializeStrict<'de> for CommitId {
657 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
658 Ok(Self(Strict::<Uuid>::deserialize(deserializer)?.0))
659 }
660}
661
662#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
669pub struct CommitLog {
670 #[serde(rename = "commits")]
672 pub commits: Vec<CommitNode>,
673 #[serde(rename = "continuationCommitIds")]
675 pub continuation_commit_ids: Vec<CommitId>,
676 #[serde(rename = "resolvedExcludeAncestorsOf")]
678 pub resolved_exclude_ancestors_of: Vec<ResolvedCommitSelector>,
679 #[serde(rename = "resolvedStarts")]
681 pub resolved_starts: Vec<ResolvedCommitSelector>,
682 #[serde(rename = "truncated")]
684 pub truncated: bool,
685}
686impl<'de> DeserializeStrict<'de> for CommitLog {
687 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
688 #[derive(Deserialize)]
689 #[serde(deny_unknown_fields)]
690 struct __Wire {
691 #[serde(rename = "commits")]
692 commits: Strict<Vec<CommitNode>>,
693 #[serde(rename = "continuationCommitIds")]
694 continuation_commit_ids: Strict<Vec<CommitId>>,
695 #[serde(rename = "resolvedExcludeAncestorsOf")]
696 resolved_exclude_ancestors_of: Strict<Vec<ResolvedCommitSelector>>,
697 #[serde(rename = "resolvedStarts")]
698 resolved_starts: Strict<Vec<ResolvedCommitSelector>>,
699 #[serde(rename = "truncated")]
700 truncated: Strict<bool>,
701 }
702 let wire = __Wire::deserialize(deserializer)?;
703 Ok(Self {
704 commits: wire.commits.0,
705 continuation_commit_ids: wire.continuation_commit_ids.0,
706 resolved_exclude_ancestors_of: wire.resolved_exclude_ancestors_of.0,
707 resolved_starts: wire.resolved_starts.0,
708 truncated: wire.truncated.0,
709 })
710 }
711}
712
713#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
715#[serde(transparent)]
716pub struct CommitLogLimit(pub u32);
717impl std::fmt::Display for CommitLogLimit {
718 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
719 self.0.fmt(formatter)
720 }
721}
722impl<'de> DeserializeStrict<'de> for CommitLogLimit {
723 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
724 Ok(Self(Strict::<u32>::deserialize(deserializer)?.0))
725 }
726}
727
728#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
730pub struct CommitNode {
731 #[serde(rename = "actor")]
733 pub actor: ActorId,
734 #[serde(rename = "commitId")]
736 pub commit_id: CommitId,
737 #[serde(rename = "committedAtMicros")]
739 pub committed_at_micros: SafeLong,
740 #[serde(rename = "message")]
742 #[serde(default, skip_serializing_if = "Option::is_none")]
743 pub message: Option<String>,
744 #[serde(rename = "namespaceChangeCount")]
746 pub namespace_change_count: u32,
747 #[serde(rename = "parentCommitIds")]
749 pub parent_commit_ids: Vec<CommitId>,
750 #[serde(rename = "resourceChangeCount")]
752 pub resource_change_count: u32,
753 #[serde(rename = "transactionId")]
755 #[serde(default, skip_serializing_if = "Option::is_none")]
756 pub transaction_id: Option<TransactionId>,
757}
758impl<'de> DeserializeStrict<'de> for CommitNode {
759 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
760 #[derive(Deserialize)]
761 #[serde(deny_unknown_fields)]
762 struct __Wire {
763 #[serde(rename = "actor")]
764 actor: Strict<ActorId>,
765 #[serde(rename = "commitId")]
766 commit_id: Strict<CommitId>,
767 #[serde(rename = "committedAtMicros")]
768 committed_at_micros: Strict<SafeLong>,
769 #[serde(rename = "message")]
770 #[serde(default)]
771 message: Strict<Option<String>>,
772 #[serde(rename = "namespaceChangeCount")]
773 namespace_change_count: Strict<u32>,
774 #[serde(rename = "parentCommitIds")]
775 parent_commit_ids: Strict<Vec<CommitId>>,
776 #[serde(rename = "resourceChangeCount")]
777 resource_change_count: Strict<u32>,
778 #[serde(rename = "transactionId")]
779 #[serde(default)]
780 transaction_id: Strict<Option<TransactionId>>,
781 }
782 let wire = __Wire::deserialize(deserializer)?;
783 Ok(Self {
784 actor: wire.actor.0,
785 commit_id: wire.commit_id.0,
786 committed_at_micros: wire.committed_at_micros.0,
787 message: wire.message.0,
788 namespace_change_count: wire.namespace_change_count.0,
789 parent_commit_ids: wire.parent_commit_ids.0,
790 resource_change_count: wire.resource_change_count.0,
791 transaction_id: wire.transaction_id.0,
792 })
793 }
794}
795
796#[derive(Clone, Debug, PartialEq, Eq)]
799pub enum CommitSelector {
800 Branch(BranchTarget),
802 Commit(CommitTarget),
804 Tag(TagTarget),
806 Unknown { tag: String, value: Value },
808}
809impl Serialize for CommitSelector {
810 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
811 match self {
812 Self::Branch(value) => {
813 let mut object = serde_json::Map::new();
814 object.insert("type".into(), Value::String("branch".into()));
815 object.insert(
816 "branch".into(),
817 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
818 );
819 Value::Object(object).serialize(serializer)
820 }
821 Self::Commit(value) => {
822 let mut object = serde_json::Map::new();
823 object.insert("type".into(), Value::String("commit".into()));
824 object.insert(
825 "commit".into(),
826 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
827 );
828 Value::Object(object).serialize(serializer)
829 }
830 Self::Tag(value) => {
831 let mut object = serde_json::Map::new();
832 object.insert("type".into(), Value::String("tag".into()));
833 object.insert(
834 "tag".into(),
835 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
836 );
837 Value::Object(object).serialize(serializer)
838 }
839 Self::Unknown { tag, value } => {
840 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
841 return Err(serde::ser::Error::custom(
842 "unknown union discriminator mismatch",
843 ));
844 }
845 value.serialize(serializer)
846 }
847 }
848 }
849}
850impl<'de> Deserialize<'de> for CommitSelector {
851 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
852 let value = Value::deserialize(deserializer)?;
853 let tag = value
854 .get("type")
855 .and_then(Value::as_str)
856 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
857 match tag {
858 "branch" => Ok(Self::Branch(
859 serde_json::from_value(
860 value
861 .get("branch")
862 .cloned()
863 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
864 )
865 .map_err(serde::de::Error::custom)?,
866 )),
867 "commit" => Ok(Self::Commit(
868 serde_json::from_value(
869 value
870 .get("commit")
871 .cloned()
872 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
873 )
874 .map_err(serde::de::Error::custom)?,
875 )),
876 "tag" => Ok(Self::Tag(
877 serde_json::from_value(
878 value
879 .get("tag")
880 .cloned()
881 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
882 )
883 .map_err(serde::de::Error::custom)?,
884 )),
885 tag => Ok(Self::Unknown {
886 tag: tag.to_owned(),
887 value,
888 }),
889 }
890 }
891}
892impl<'de> DeserializeStrict<'de> for CommitSelector {
893 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
894 #[derive(Deserialize)]
895 enum __Tag0 {
896 #[serde(rename = "branch")]
897 Value,
898 }
899 #[derive(Deserialize)]
900 #[serde(deny_unknown_fields)]
901 struct __Arm0 {
902 #[serde(rename = "type")]
903 _tag: __Tag0,
904 #[serde(rename = "branch")]
905 value: Strict<BranchTarget>,
906 }
907 #[derive(Deserialize)]
908 enum __Tag1 {
909 #[serde(rename = "commit")]
910 Value,
911 }
912 #[derive(Deserialize)]
913 #[serde(deny_unknown_fields)]
914 struct __Arm1 {
915 #[serde(rename = "type")]
916 _tag: __Tag1,
917 #[serde(rename = "commit")]
918 value: Strict<CommitTarget>,
919 }
920 #[derive(Deserialize)]
921 enum __Tag2 {
922 #[serde(rename = "tag")]
923 Value,
924 }
925 #[derive(Deserialize)]
926 #[serde(deny_unknown_fields)]
927 struct __Arm2 {
928 #[serde(rename = "type")]
929 _tag: __Tag2,
930 #[serde(rename = "tag")]
931 value: Strict<TagTarget>,
932 }
933 #[derive(Deserialize)]
934 #[serde(untagged)]
935 enum __Known {
936 Branch(Box<__Arm0>),
937 Commit(Box<__Arm1>),
938 Tag(Box<__Arm2>),
939 }
940 Ok(match __Known::deserialize(deserializer)? {
941 __Known::Branch(arm) => Self::Branch(arm.value.0),
942 __Known::Commit(arm) => Self::Commit(arm.value.0),
943 __Known::Tag(arm) => Self::Tag(arm.value.0),
944 })
945 }
946}
947
948#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
950pub struct CommitTarget {
951 #[serde(rename = "commitId")]
953 pub commit_id: CommitId,
954}
955impl<'de> DeserializeStrict<'de> for CommitTarget {
956 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
957 #[derive(Deserialize)]
958 #[serde(deny_unknown_fields)]
959 struct __Wire {
960 #[serde(rename = "commitId")]
961 commit_id: Strict<CommitId>,
962 }
963 let wire = __Wire::deserialize(deserializer)?;
964 Ok(Self {
965 commit_id: wire.commit_id.0,
966 })
967 }
968}
969
970#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
972pub struct CompareCommitsRequest {
973 #[serde(rename = "base")]
975 pub base: CommitSelector,
976 #[serde(rename = "head")]
978 pub head: CommitSelector,
979 #[serde(rename = "maxCommits")]
981 #[serde(default, skip_serializing_if = "Option::is_none")]
982 pub max_commits: Option<CommitLogLimit>,
983}
984impl<'de> DeserializeStrict<'de> for CompareCommitsRequest {
985 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
986 #[derive(Deserialize)]
987 #[serde(deny_unknown_fields)]
988 struct __Wire {
989 #[serde(rename = "base")]
990 base: Strict<CommitSelector>,
991 #[serde(rename = "head")]
992 head: Strict<CommitSelector>,
993 #[serde(rename = "maxCommits")]
994 #[serde(default)]
995 max_commits: Strict<Option<CommitLogLimit>>,
996 }
997 let wire = __Wire::deserialize(deserializer)?;
998 Ok(Self {
999 base: wire.base.0,
1000 head: wire.head.0,
1001 max_commits: wire.max_commits.0,
1002 })
1003 }
1004}
1005
1006#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1011pub struct CompareCommitsResponse {
1012 #[serde(rename = "aheadCount")]
1014 pub ahead_count: SafeUnsignedLong,
1015 #[serde(rename = "baseCommitId")]
1017 pub base_commit_id: CommitId,
1018 #[serde(rename = "behindCount")]
1020 pub behind_count: SafeUnsignedLong,
1021 #[serde(rename = "commits")]
1023 pub commits: Vec<CommitNode>,
1024 #[serde(rename = "continuationCommitIds")]
1026 pub continuation_commit_ids: Vec<CommitId>,
1027 #[serde(rename = "headCommitId")]
1029 pub head_commit_id: CommitId,
1030 #[serde(rename = "mergeBaseCommitIds")]
1032 pub merge_base_commit_ids: Vec<CommitId>,
1033 #[serde(rename = "truncated")]
1035 pub truncated: bool,
1036}
1037impl<'de> DeserializeStrict<'de> for CompareCommitsResponse {
1038 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1039 #[derive(Deserialize)]
1040 #[serde(deny_unknown_fields)]
1041 struct __Wire {
1042 #[serde(rename = "aheadCount")]
1043 ahead_count: Strict<SafeUnsignedLong>,
1044 #[serde(rename = "baseCommitId")]
1045 base_commit_id: Strict<CommitId>,
1046 #[serde(rename = "behindCount")]
1047 behind_count: Strict<SafeUnsignedLong>,
1048 #[serde(rename = "commits")]
1049 commits: Strict<Vec<CommitNode>>,
1050 #[serde(rename = "continuationCommitIds")]
1051 continuation_commit_ids: Strict<Vec<CommitId>>,
1052 #[serde(rename = "headCommitId")]
1053 head_commit_id: Strict<CommitId>,
1054 #[serde(rename = "mergeBaseCommitIds")]
1055 merge_base_commit_ids: Strict<Vec<CommitId>>,
1056 #[serde(rename = "truncated")]
1057 truncated: Strict<bool>,
1058 }
1059 let wire = __Wire::deserialize(deserializer)?;
1060 Ok(Self {
1061 ahead_count: wire.ahead_count.0,
1062 base_commit_id: wire.base_commit_id.0,
1063 behind_count: wire.behind_count.0,
1064 commits: wire.commits.0,
1065 continuation_commit_ids: wire.continuation_commit_ids.0,
1066 head_commit_id: wire.head_commit_id.0,
1067 merge_base_commit_ids: wire.merge_base_commit_ids.0,
1068 truncated: wire.truncated.0,
1069 })
1070 }
1071}
1072
1073#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1075pub struct CreateBranchRequest {
1076 #[serde(rename = "idempotencyKey")]
1078 pub idempotency_key: IdempotencyKey,
1079 #[serde(rename = "name")]
1081 pub name: BranchName,
1082 #[serde(rename = "target")]
1084 pub target: CommitSelector,
1085}
1086impl<'de> DeserializeStrict<'de> for CreateBranchRequest {
1087 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1088 #[derive(Deserialize)]
1089 #[serde(deny_unknown_fields)]
1090 struct __Wire {
1091 #[serde(rename = "idempotencyKey")]
1092 idempotency_key: Strict<IdempotencyKey>,
1093 #[serde(rename = "name")]
1094 name: Strict<BranchName>,
1095 #[serde(rename = "target")]
1096 target: Strict<CommitSelector>,
1097 }
1098 let wire = __Wire::deserialize(deserializer)?;
1099 Ok(Self {
1100 idempotency_key: wire.idempotency_key.0,
1101 name: wire.name.0,
1102 target: wire.target.0,
1103 })
1104 }
1105}
1106
1107#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1111pub struct CreateResourceChange {
1112 #[serde(rename = "descriptor")]
1114 pub descriptor: ResourceDescriptor,
1115 #[serde(rename = "versionId")]
1117 pub version_id: VersionId,
1118}
1119impl<'de> DeserializeStrict<'de> for CreateResourceChange {
1120 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1121 #[derive(Deserialize)]
1122 #[serde(deny_unknown_fields)]
1123 struct __Wire {
1124 #[serde(rename = "descriptor")]
1125 descriptor: Strict<ResourceDescriptor>,
1126 #[serde(rename = "versionId")]
1127 version_id: Strict<VersionId>,
1128 }
1129 let wire = __Wire::deserialize(deserializer)?;
1130 Ok(Self {
1131 descriptor: wire.descriptor.0,
1132 version_id: wire.version_id.0,
1133 })
1134 }
1135}
1136
1137#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1139pub struct CreateTagRequest {
1140 #[serde(rename = "idempotencyKey")]
1142 pub idempotency_key: IdempotencyKey,
1143 #[serde(rename = "name")]
1145 pub name: TagName,
1146 #[serde(rename = "target")]
1148 pub target: CommitSelector,
1149}
1150impl<'de> DeserializeStrict<'de> for CreateTagRequest {
1151 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1152 #[derive(Deserialize)]
1153 #[serde(deny_unknown_fields)]
1154 struct __Wire {
1155 #[serde(rename = "idempotencyKey")]
1156 idempotency_key: Strict<IdempotencyKey>,
1157 #[serde(rename = "name")]
1158 name: Strict<TagName>,
1159 #[serde(rename = "target")]
1160 target: Strict<CommitSelector>,
1161 }
1162 let wire = __Wire::deserialize(deserializer)?;
1163 Ok(Self {
1164 idempotency_key: wire.idempotency_key.0,
1165 name: wire.name.0,
1166 target: wire.target.0,
1167 })
1168 }
1169}
1170
1171#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1173pub struct DeleteBranchRequest {
1174 #[serde(rename = "idempotencyKey")]
1176 pub idempotency_key: IdempotencyKey,
1177}
1178impl<'de> DeserializeStrict<'de> for DeleteBranchRequest {
1179 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1180 #[derive(Deserialize)]
1181 #[serde(deny_unknown_fields)]
1182 struct __Wire {
1183 #[serde(rename = "idempotencyKey")]
1184 idempotency_key: Strict<IdempotencyKey>,
1185 }
1186 let wire = __Wire::deserialize(deserializer)?;
1187 Ok(Self {
1188 idempotency_key: wire.idempotency_key.0,
1189 })
1190 }
1191}
1192
1193#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1195pub struct DiffStateRequest {
1196 #[serde(rename = "base")]
1198 pub base: CommitSelector,
1199 #[serde(rename = "head")]
1201 pub head: CommitSelector,
1202}
1203impl<'de> DeserializeStrict<'de> for DiffStateRequest {
1204 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1205 #[derive(Deserialize)]
1206 #[serde(deny_unknown_fields)]
1207 struct __Wire {
1208 #[serde(rename = "base")]
1209 base: Strict<CommitSelector>,
1210 #[serde(rename = "head")]
1211 head: Strict<CommitSelector>,
1212 }
1213 let wire = __Wire::deserialize(deserializer)?;
1214 Ok(Self {
1215 base: wire.base.0,
1216 head: wire.head.0,
1217 })
1218 }
1219}
1220
1221#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1224pub struct DiffStateResponse {
1225 #[serde(rename = "baseCommitId")]
1227 pub base_commit_id: CommitId,
1228 #[serde(rename = "headCommitId")]
1230 pub head_commit_id: CommitId,
1231 #[serde(rename = "namespace")]
1233 pub namespace: Vec<NamespaceChange>,
1234 #[serde(rename = "resources")]
1236 pub resources: Vec<ResourceChange>,
1237}
1238impl<'de> DeserializeStrict<'de> for DiffStateResponse {
1239 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1240 #[derive(Deserialize)]
1241 #[serde(deny_unknown_fields)]
1242 struct __Wire {
1243 #[serde(rename = "baseCommitId")]
1244 base_commit_id: Strict<CommitId>,
1245 #[serde(rename = "headCommitId")]
1246 head_commit_id: Strict<CommitId>,
1247 #[serde(rename = "namespace")]
1248 namespace: Strict<Vec<NamespaceChange>>,
1249 #[serde(rename = "resources")]
1250 resources: Strict<Vec<ResourceChange>>,
1251 }
1252 let wire = __Wire::deserialize(deserializer)?;
1253 Ok(Self {
1254 base_commit_id: wire.base_commit_id.0,
1255 head_commit_id: wire.head_commit_id.0,
1256 namespace: wire.namespace.0,
1257 resources: wire.resources.0,
1258 })
1259 }
1260}
1261
1262#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1264pub struct Empty {}
1265impl<'de> DeserializeStrict<'de> for Empty {
1266 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1267 #[derive(Deserialize)]
1268 #[serde(deny_unknown_fields)]
1269 struct __Wire {}
1270 __Wire::deserialize(deserializer)?;
1271 Ok(Self {})
1272 }
1273}
1274
1275#[derive(Clone, Debug, PartialEq, Eq)]
1277pub enum GraphTraversal {
1278 AllParents,
1280 FirstParent,
1282 Unknown(String),
1284}
1285impl Serialize for GraphTraversal {
1286 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1287 serializer.serialize_str(match self {
1288 Self::AllParents => "all_parents",
1289 Self::FirstParent => "first_parent",
1290 Self::Unknown(value) => value,
1291 })
1292 }
1293}
1294impl<'de> Deserialize<'de> for GraphTraversal {
1295 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1296 Ok(match String::deserialize(deserializer)?.as_str() {
1297 "all_parents" => Self::AllParents,
1298 "first_parent" => Self::FirstParent,
1299 value => Self::Unknown(value.to_owned()),
1300 })
1301 }
1302}
1303impl<'de> DeserializeStrict<'de> for GraphTraversal {
1304 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1305 #[derive(Deserialize)]
1306 enum __Known {
1307 #[serde(rename = "all_parents")]
1308 AllParents,
1309 #[serde(rename = "first_parent")]
1310 FirstParent,
1311 }
1312 Ok(match __Known::deserialize(deserializer)? {
1313 __Known::AllParents => Self::AllParents,
1314 __Known::FirstParent => Self::FirstParent,
1315 })
1316 }
1317}
1318
1319#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1323#[serde(transparent)]
1324pub struct IdempotencyKey(pub String);
1325impl std::fmt::Display for IdempotencyKey {
1326 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1327 self.0.fmt(formatter)
1328 }
1329}
1330impl<'de> DeserializeStrict<'de> for IdempotencyKey {
1331 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1332 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
1333 }
1334}
1335
1336#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1339pub struct ListBranchesRequest {
1340 #[serde(rename = "includeDeleted")]
1342 #[serde(default, skip_serializing_if = "Option::is_none")]
1343 pub include_deleted: Option<bool>,
1344 #[serde(rename = "pageSize")]
1346 #[serde(default, skip_serializing_if = "Option::is_none")]
1347 pub page_size: Option<PageSize>,
1348 #[serde(rename = "pageToken")]
1350 #[serde(default, skip_serializing_if = "Option::is_none")]
1351 pub page_token: Option<PageToken>,
1352}
1353impl<'de> DeserializeStrict<'de> for ListBranchesRequest {
1354 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1355 #[derive(Deserialize)]
1356 #[serde(deny_unknown_fields)]
1357 struct __Wire {
1358 #[serde(rename = "includeDeleted")]
1359 #[serde(default)]
1360 include_deleted: Strict<Option<bool>>,
1361 #[serde(rename = "pageSize")]
1362 #[serde(default)]
1363 page_size: Strict<Option<PageSize>>,
1364 #[serde(rename = "pageToken")]
1365 #[serde(default)]
1366 page_token: Strict<Option<PageToken>>,
1367 }
1368 let wire = __Wire::deserialize(deserializer)?;
1369 Ok(Self {
1370 include_deleted: wire.include_deleted.0,
1371 page_size: wire.page_size.0,
1372 page_token: wire.page_token.0,
1373 })
1374 }
1375}
1376
1377#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1381pub struct ListBranchesResponse {
1382 #[serde(rename = "branches")]
1384 pub branches: Vec<Branch>,
1385 #[serde(rename = "nextPageToken")]
1387 #[serde(default, skip_serializing_if = "Option::is_none")]
1388 pub next_page_token: Option<PageToken>,
1389}
1390impl<'de> DeserializeStrict<'de> for ListBranchesResponse {
1391 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1392 #[derive(Deserialize)]
1393 #[serde(deny_unknown_fields)]
1394 struct __Wire {
1395 #[serde(rename = "branches")]
1396 branches: Strict<Vec<Branch>>,
1397 #[serde(rename = "nextPageToken")]
1398 #[serde(default)]
1399 next_page_token: Strict<Option<PageToken>>,
1400 }
1401 let wire = __Wire::deserialize(deserializer)?;
1402 Ok(Self {
1403 branches: wire.branches.0,
1404 next_page_token: wire.next_page_token.0,
1405 })
1406 }
1407}
1408
1409#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1417pub struct ListNamespaceRequest {
1418 #[serde(rename = "pageSize")]
1420 #[serde(default, skip_serializing_if = "Option::is_none")]
1421 pub page_size: Option<PageSize>,
1422 #[serde(rename = "pageToken")]
1424 #[serde(default, skip_serializing_if = "Option::is_none")]
1425 pub page_token: Option<PageToken>,
1426 #[serde(rename = "parent")]
1428 pub parent: NamespaceParent,
1429}
1430impl<'de> DeserializeStrict<'de> for ListNamespaceRequest {
1431 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1432 #[derive(Deserialize)]
1433 #[serde(deny_unknown_fields)]
1434 struct __Wire {
1435 #[serde(rename = "pageSize")]
1436 #[serde(default)]
1437 page_size: Strict<Option<PageSize>>,
1438 #[serde(rename = "pageToken")]
1439 #[serde(default)]
1440 page_token: Strict<Option<PageToken>>,
1441 #[serde(rename = "parent")]
1442 parent: Strict<NamespaceParent>,
1443 }
1444 let wire = __Wire::deserialize(deserializer)?;
1445 Ok(Self {
1446 page_size: wire.page_size.0,
1447 page_token: wire.page_token.0,
1448 parent: wire.parent.0,
1449 })
1450 }
1451}
1452
1453#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1456pub struct ListTagsRequest {
1457 #[serde(rename = "pageSize")]
1459 #[serde(default, skip_serializing_if = "Option::is_none")]
1460 pub page_size: Option<PageSize>,
1461 #[serde(rename = "pageToken")]
1463 #[serde(default, skip_serializing_if = "Option::is_none")]
1464 pub page_token: Option<PageToken>,
1465}
1466impl<'de> DeserializeStrict<'de> for ListTagsRequest {
1467 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1468 #[derive(Deserialize)]
1469 #[serde(deny_unknown_fields)]
1470 struct __Wire {
1471 #[serde(rename = "pageSize")]
1472 #[serde(default)]
1473 page_size: Strict<Option<PageSize>>,
1474 #[serde(rename = "pageToken")]
1475 #[serde(default)]
1476 page_token: Strict<Option<PageToken>>,
1477 }
1478 let wire = __Wire::deserialize(deserializer)?;
1479 Ok(Self {
1480 page_size: wire.page_size.0,
1481 page_token: wire.page_token.0,
1482 })
1483 }
1484}
1485
1486#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1489pub struct ListTagsResponse {
1490 #[serde(rename = "nextPageToken")]
1492 #[serde(default, skip_serializing_if = "Option::is_none")]
1493 pub next_page_token: Option<PageToken>,
1494 #[serde(rename = "tags")]
1496 pub tags: Vec<Tag>,
1497}
1498impl<'de> DeserializeStrict<'de> for ListTagsResponse {
1499 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1500 #[derive(Deserialize)]
1501 #[serde(deny_unknown_fields)]
1502 struct __Wire {
1503 #[serde(rename = "nextPageToken")]
1504 #[serde(default)]
1505 next_page_token: Strict<Option<PageToken>>,
1506 #[serde(rename = "tags")]
1507 tags: Strict<Vec<Tag>>,
1508 }
1509 let wire = __Wire::deserialize(deserializer)?;
1510 Ok(Self {
1511 next_page_token: wire.next_page_token.0,
1512 tags: wire.tags.0,
1513 })
1514 }
1515}
1516
1517#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1519pub struct MergeBasesRequest {
1520 #[serde(rename = "left")]
1522 pub left: CommitSelector,
1523 #[serde(rename = "right")]
1525 pub right: CommitSelector,
1526}
1527impl<'de> DeserializeStrict<'de> for MergeBasesRequest {
1528 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1529 #[derive(Deserialize)]
1530 #[serde(deny_unknown_fields)]
1531 struct __Wire {
1532 #[serde(rename = "left")]
1533 left: Strict<CommitSelector>,
1534 #[serde(rename = "right")]
1535 right: Strict<CommitSelector>,
1536 }
1537 let wire = __Wire::deserialize(deserializer)?;
1538 Ok(Self {
1539 left: wire.left.0,
1540 right: wire.right.0,
1541 })
1542 }
1543}
1544
1545#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1548pub struct MergeBasesResponse {
1549 #[serde(rename = "leftCommitId")]
1551 pub left_commit_id: CommitId,
1552 #[serde(rename = "mergeBaseCommitIds")]
1554 pub merge_base_commit_ids: Vec<CommitId>,
1555 #[serde(rename = "rightCommitId")]
1557 pub right_commit_id: CommitId,
1558}
1559impl<'de> DeserializeStrict<'de> for MergeBasesResponse {
1560 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1561 #[derive(Deserialize)]
1562 #[serde(deny_unknown_fields)]
1563 struct __Wire {
1564 #[serde(rename = "leftCommitId")]
1565 left_commit_id: Strict<CommitId>,
1566 #[serde(rename = "mergeBaseCommitIds")]
1567 merge_base_commit_ids: Strict<Vec<CommitId>>,
1568 #[serde(rename = "rightCommitId")]
1569 right_commit_id: Strict<CommitId>,
1570 }
1571 let wire = __Wire::deserialize(deserializer)?;
1572 Ok(Self {
1573 left_commit_id: wire.left_commit_id.0,
1574 merge_base_commit_ids: wire.merge_base_commit_ids.0,
1575 right_commit_id: wire.right_commit_id.0,
1576 })
1577 }
1578}
1579
1580#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1582pub struct MergeConflict {
1583 #[serde(rename = "constraints")]
1585 pub constraints: Vec<NamespaceConstraintConflict>,
1586 #[serde(rename = "mergeBaseCommitId")]
1588 pub merge_base_commit_id: CommitId,
1589 #[serde(rename = "namespace")]
1591 pub namespace: Vec<NamespaceMergeConflict>,
1592 #[serde(rename = "resources")]
1594 pub resources: Vec<ResourceMergeConflict>,
1595 #[serde(rename = "sourceCommitId")]
1597 pub source_commit_id: CommitId,
1598 #[serde(rename = "targetCommitId")]
1600 pub target_commit_id: CommitId,
1601}
1602impl<'de> DeserializeStrict<'de> for MergeConflict {
1603 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1604 #[derive(Deserialize)]
1605 #[serde(deny_unknown_fields)]
1606 struct __Wire {
1607 #[serde(rename = "constraints")]
1608 constraints: Strict<Vec<NamespaceConstraintConflict>>,
1609 #[serde(rename = "mergeBaseCommitId")]
1610 merge_base_commit_id: Strict<CommitId>,
1611 #[serde(rename = "namespace")]
1612 namespace: Strict<Vec<NamespaceMergeConflict>>,
1613 #[serde(rename = "resources")]
1614 resources: Strict<Vec<ResourceMergeConflict>>,
1615 #[serde(rename = "sourceCommitId")]
1616 source_commit_id: Strict<CommitId>,
1617 #[serde(rename = "targetCommitId")]
1618 target_commit_id: Strict<CommitId>,
1619 }
1620 let wire = __Wire::deserialize(deserializer)?;
1621 Ok(Self {
1622 constraints: wire.constraints.0,
1623 merge_base_commit_id: wire.merge_base_commit_id.0,
1624 namespace: wire.namespace.0,
1625 resources: wire.resources.0,
1626 source_commit_id: wire.source_commit_id.0,
1627 target_commit_id: wire.target_commit_id.0,
1628 })
1629 }
1630}
1631
1632#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1639pub struct MergeRequest {
1640 #[serde(rename = "dryRun")]
1642 #[serde(default, skip_serializing_if = "Option::is_none")]
1643 pub dry_run: Option<bool>,
1644 #[serde(rename = "expectedSourceCommitId")]
1646 #[serde(default, skip_serializing_if = "Option::is_none")]
1647 pub expected_source_commit_id: Option<CommitId>,
1648 #[serde(rename = "expectedTargetCommitId")]
1650 #[serde(default, skip_serializing_if = "Option::is_none")]
1651 pub expected_target_commit_id: Option<CommitId>,
1652 #[serde(rename = "idempotencyKey")]
1654 pub idempotency_key: IdempotencyKey,
1655 #[serde(rename = "message")]
1657 #[serde(default, skip_serializing_if = "Option::is_none")]
1658 pub message: Option<String>,
1659 #[serde(rename = "resourceResolutions")]
1661 pub resource_resolutions: Vec<ResourceMergeResolution>,
1662 #[serde(rename = "source")]
1664 pub source: CommitSelector,
1665 #[serde(rename = "targetBranchId")]
1667 pub target_branch_id: BranchId,
1668 #[serde(rename = "transactionId")]
1670 pub transaction_id: TransactionId,
1671}
1672impl<'de> DeserializeStrict<'de> for MergeRequest {
1673 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1674 #[derive(Deserialize)]
1675 #[serde(deny_unknown_fields)]
1676 struct __Wire {
1677 #[serde(rename = "dryRun")]
1678 #[serde(default)]
1679 dry_run: Strict<Option<bool>>,
1680 #[serde(rename = "expectedSourceCommitId")]
1681 #[serde(default)]
1682 expected_source_commit_id: Strict<Option<CommitId>>,
1683 #[serde(rename = "expectedTargetCommitId")]
1684 #[serde(default)]
1685 expected_target_commit_id: Strict<Option<CommitId>>,
1686 #[serde(rename = "idempotencyKey")]
1687 idempotency_key: Strict<IdempotencyKey>,
1688 #[serde(rename = "message")]
1689 #[serde(default)]
1690 message: Strict<Option<String>>,
1691 #[serde(rename = "resourceResolutions")]
1692 resource_resolutions: Strict<Vec<ResourceMergeResolution>>,
1693 #[serde(rename = "source")]
1694 source: Strict<CommitSelector>,
1695 #[serde(rename = "targetBranchId")]
1696 target_branch_id: Strict<BranchId>,
1697 #[serde(rename = "transactionId")]
1698 transaction_id: Strict<TransactionId>,
1699 }
1700 let wire = __Wire::deserialize(deserializer)?;
1701 Ok(Self {
1702 dry_run: wire.dry_run.0,
1703 expected_source_commit_id: wire.expected_source_commit_id.0,
1704 expected_target_commit_id: wire.expected_target_commit_id.0,
1705 idempotency_key: wire.idempotency_key.0,
1706 message: wire.message.0,
1707 resource_resolutions: wire.resource_resolutions.0,
1708 source: wire.source.0,
1709 target_branch_id: wire.target_branch_id.0,
1710 transaction_id: wire.transaction_id.0,
1711 })
1712 }
1713}
1714
1715#[derive(Clone, Debug, PartialEq, Eq)]
1718pub enum MergeResponse {
1719 AlreadyUpToDate(AlreadyUpToDate),
1721 Conflict(MergeConflict),
1723 Mergeable(Mergeable),
1725 Published(Merged),
1727 Unknown { tag: String, value: Value },
1729}
1730impl Serialize for MergeResponse {
1731 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1732 match self {
1733 Self::AlreadyUpToDate(value) => {
1734 let mut object = serde_json::Map::new();
1735 object.insert("type".into(), Value::String("alreadyUpToDate".into()));
1736 object.insert(
1737 "alreadyUpToDate".into(),
1738 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1739 );
1740 Value::Object(object).serialize(serializer)
1741 }
1742 Self::Conflict(value) => {
1743 let mut object = serde_json::Map::new();
1744 object.insert("type".into(), Value::String("conflict".into()));
1745 object.insert(
1746 "conflict".into(),
1747 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1748 );
1749 Value::Object(object).serialize(serializer)
1750 }
1751 Self::Mergeable(value) => {
1752 let mut object = serde_json::Map::new();
1753 object.insert("type".into(), Value::String("mergeable".into()));
1754 object.insert(
1755 "mergeable".into(),
1756 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1757 );
1758 Value::Object(object).serialize(serializer)
1759 }
1760 Self::Published(value) => {
1761 let mut object = serde_json::Map::new();
1762 object.insert("type".into(), Value::String("published".into()));
1763 object.insert(
1764 "published".into(),
1765 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1766 );
1767 Value::Object(object).serialize(serializer)
1768 }
1769 Self::Unknown { tag, value } => {
1770 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
1771 return Err(serde::ser::Error::custom(
1772 "unknown union discriminator mismatch",
1773 ));
1774 }
1775 value.serialize(serializer)
1776 }
1777 }
1778 }
1779}
1780impl<'de> Deserialize<'de> for MergeResponse {
1781 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1782 let value = Value::deserialize(deserializer)?;
1783 let tag = value
1784 .get("type")
1785 .and_then(Value::as_str)
1786 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
1787 match tag {
1788 "alreadyUpToDate" => Ok(Self::AlreadyUpToDate(
1789 serde_json::from_value(
1790 value
1791 .get("alreadyUpToDate")
1792 .cloned()
1793 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1794 )
1795 .map_err(serde::de::Error::custom)?,
1796 )),
1797 "conflict" => Ok(Self::Conflict(
1798 serde_json::from_value(
1799 value
1800 .get("conflict")
1801 .cloned()
1802 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1803 )
1804 .map_err(serde::de::Error::custom)?,
1805 )),
1806 "mergeable" => Ok(Self::Mergeable(
1807 serde_json::from_value(
1808 value
1809 .get("mergeable")
1810 .cloned()
1811 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1812 )
1813 .map_err(serde::de::Error::custom)?,
1814 )),
1815 "published" => Ok(Self::Published(
1816 serde_json::from_value(
1817 value
1818 .get("published")
1819 .cloned()
1820 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1821 )
1822 .map_err(serde::de::Error::custom)?,
1823 )),
1824 tag => Ok(Self::Unknown {
1825 tag: tag.to_owned(),
1826 value,
1827 }),
1828 }
1829 }
1830}
1831impl<'de> DeserializeStrict<'de> for MergeResponse {
1832 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1833 #[derive(Deserialize)]
1834 enum __Tag0 {
1835 #[serde(rename = "alreadyUpToDate")]
1836 Value,
1837 }
1838 #[derive(Deserialize)]
1839 #[serde(deny_unknown_fields)]
1840 struct __Arm0 {
1841 #[serde(rename = "type")]
1842 _tag: __Tag0,
1843 #[serde(rename = "alreadyUpToDate")]
1844 value: Strict<AlreadyUpToDate>,
1845 }
1846 #[derive(Deserialize)]
1847 enum __Tag1 {
1848 #[serde(rename = "conflict")]
1849 Value,
1850 }
1851 #[derive(Deserialize)]
1852 #[serde(deny_unknown_fields)]
1853 struct __Arm1 {
1854 #[serde(rename = "type")]
1855 _tag: __Tag1,
1856 #[serde(rename = "conflict")]
1857 value: Strict<MergeConflict>,
1858 }
1859 #[derive(Deserialize)]
1860 enum __Tag2 {
1861 #[serde(rename = "mergeable")]
1862 Value,
1863 }
1864 #[derive(Deserialize)]
1865 #[serde(deny_unknown_fields)]
1866 struct __Arm2 {
1867 #[serde(rename = "type")]
1868 _tag: __Tag2,
1869 #[serde(rename = "mergeable")]
1870 value: Strict<Mergeable>,
1871 }
1872 #[derive(Deserialize)]
1873 enum __Tag3 {
1874 #[serde(rename = "published")]
1875 Value,
1876 }
1877 #[derive(Deserialize)]
1878 #[serde(deny_unknown_fields)]
1879 struct __Arm3 {
1880 #[serde(rename = "type")]
1881 _tag: __Tag3,
1882 #[serde(rename = "published")]
1883 value: Strict<Merged>,
1884 }
1885 #[derive(Deserialize)]
1886 #[serde(untagged)]
1887 enum __Known {
1888 AlreadyUpToDate(Box<__Arm0>),
1889 Conflict(Box<__Arm1>),
1890 Mergeable(Box<__Arm2>),
1891 Published(Box<__Arm3>),
1892 }
1893 Ok(match __Known::deserialize(deserializer)? {
1894 __Known::AlreadyUpToDate(arm) => Self::AlreadyUpToDate(arm.value.0),
1895 __Known::Conflict(arm) => Self::Conflict(arm.value.0),
1896 __Known::Mergeable(arm) => Self::Mergeable(arm.value.0),
1897 __Known::Published(arm) => Self::Published(arm.value.0),
1898 })
1899 }
1900}
1901
1902#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1904pub struct Mergeable {
1905 #[serde(rename = "mergeBaseCommitId")]
1907 pub merge_base_commit_id: CommitId,
1908 #[serde(rename = "namespaceChangeCount")]
1910 pub namespace_change_count: u32,
1911 #[serde(rename = "resourceChangeCount")]
1913 pub resource_change_count: u32,
1914 #[serde(rename = "sourceCommitId")]
1916 pub source_commit_id: CommitId,
1917 #[serde(rename = "targetCommitId")]
1919 pub target_commit_id: CommitId,
1920}
1921impl<'de> DeserializeStrict<'de> for Mergeable {
1922 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1923 #[derive(Deserialize)]
1924 #[serde(deny_unknown_fields)]
1925 struct __Wire {
1926 #[serde(rename = "mergeBaseCommitId")]
1927 merge_base_commit_id: Strict<CommitId>,
1928 #[serde(rename = "namespaceChangeCount")]
1929 namespace_change_count: Strict<u32>,
1930 #[serde(rename = "resourceChangeCount")]
1931 resource_change_count: Strict<u32>,
1932 #[serde(rename = "sourceCommitId")]
1933 source_commit_id: Strict<CommitId>,
1934 #[serde(rename = "targetCommitId")]
1935 target_commit_id: Strict<CommitId>,
1936 }
1937 let wire = __Wire::deserialize(deserializer)?;
1938 Ok(Self {
1939 merge_base_commit_id: wire.merge_base_commit_id.0,
1940 namespace_change_count: wire.namespace_change_count.0,
1941 resource_change_count: wire.resource_change_count.0,
1942 source_commit_id: wire.source_commit_id.0,
1943 target_commit_id: wire.target_commit_id.0,
1944 })
1945 }
1946}
1947
1948#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1950pub struct Merged {
1951 #[serde(rename = "commitId")]
1953 pub commit_id: CommitId,
1954 #[serde(rename = "mergeBaseCommitId")]
1956 pub merge_base_commit_id: CommitId,
1957 #[serde(rename = "sourceCommitId")]
1959 pub source_commit_id: CommitId,
1960 #[serde(rename = "targetCommitId")]
1962 pub target_commit_id: CommitId,
1963}
1964impl<'de> DeserializeStrict<'de> for Merged {
1965 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1966 #[derive(Deserialize)]
1967 #[serde(deny_unknown_fields)]
1968 struct __Wire {
1969 #[serde(rename = "commitId")]
1970 commit_id: Strict<CommitId>,
1971 #[serde(rename = "mergeBaseCommitId")]
1972 merge_base_commit_id: Strict<CommitId>,
1973 #[serde(rename = "sourceCommitId")]
1974 source_commit_id: Strict<CommitId>,
1975 #[serde(rename = "targetCommitId")]
1976 target_commit_id: Strict<CommitId>,
1977 }
1978 let wire = __Wire::deserialize(deserializer)?;
1979 Ok(Self {
1980 commit_id: wire.commit_id.0,
1981 merge_base_commit_id: wire.merge_base_commit_id.0,
1982 source_commit_id: wire.source_commit_id.0,
1983 target_commit_id: wire.target_commit_id.0,
1984 })
1985 }
1986}
1987
1988#[derive(Clone, Debug, PartialEq, Eq)]
1991pub enum NamespaceChange {
1992 Assert(AssertNamespaceChange),
1994 Bind(BindNamespaceChange),
1996 Unbind(UnbindNamespaceChange),
1998 Unknown { tag: String, value: Value },
2000}
2001impl Serialize for NamespaceChange {
2002 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2003 match self {
2004 Self::Assert(value) => {
2005 let mut object = serde_json::Map::new();
2006 object.insert("type".into(), Value::String("assert".into()));
2007 object.insert(
2008 "assert".into(),
2009 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2010 );
2011 Value::Object(object).serialize(serializer)
2012 }
2013 Self::Bind(value) => {
2014 let mut object = serde_json::Map::new();
2015 object.insert("type".into(), Value::String("bind".into()));
2016 object.insert(
2017 "bind".into(),
2018 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2019 );
2020 Value::Object(object).serialize(serializer)
2021 }
2022 Self::Unbind(value) => {
2023 let mut object = serde_json::Map::new();
2024 object.insert("type".into(), Value::String("unbind".into()));
2025 object.insert(
2026 "unbind".into(),
2027 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2028 );
2029 Value::Object(object).serialize(serializer)
2030 }
2031 Self::Unknown { tag, value } => {
2032 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
2033 return Err(serde::ser::Error::custom(
2034 "unknown union discriminator mismatch",
2035 ));
2036 }
2037 value.serialize(serializer)
2038 }
2039 }
2040 }
2041}
2042impl<'de> Deserialize<'de> for NamespaceChange {
2043 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2044 let value = Value::deserialize(deserializer)?;
2045 let tag = value
2046 .get("type")
2047 .and_then(Value::as_str)
2048 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
2049 match tag {
2050 "assert" => Ok(Self::Assert(
2051 serde_json::from_value(
2052 value
2053 .get("assert")
2054 .cloned()
2055 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2056 )
2057 .map_err(serde::de::Error::custom)?,
2058 )),
2059 "bind" => Ok(Self::Bind(
2060 serde_json::from_value(
2061 value
2062 .get("bind")
2063 .cloned()
2064 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2065 )
2066 .map_err(serde::de::Error::custom)?,
2067 )),
2068 "unbind" => Ok(Self::Unbind(
2069 serde_json::from_value(
2070 value
2071 .get("unbind")
2072 .cloned()
2073 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2074 )
2075 .map_err(serde::de::Error::custom)?,
2076 )),
2077 tag => Ok(Self::Unknown {
2078 tag: tag.to_owned(),
2079 value,
2080 }),
2081 }
2082 }
2083}
2084impl<'de> DeserializeStrict<'de> for NamespaceChange {
2085 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2086 #[derive(Deserialize)]
2087 enum __Tag0 {
2088 #[serde(rename = "assert")]
2089 Value,
2090 }
2091 #[derive(Deserialize)]
2092 #[serde(deny_unknown_fields)]
2093 struct __Arm0 {
2094 #[serde(rename = "type")]
2095 _tag: __Tag0,
2096 #[serde(rename = "assert")]
2097 value: Strict<AssertNamespaceChange>,
2098 }
2099 #[derive(Deserialize)]
2100 enum __Tag1 {
2101 #[serde(rename = "bind")]
2102 Value,
2103 }
2104 #[derive(Deserialize)]
2105 #[serde(deny_unknown_fields)]
2106 struct __Arm1 {
2107 #[serde(rename = "type")]
2108 _tag: __Tag1,
2109 #[serde(rename = "bind")]
2110 value: Strict<BindNamespaceChange>,
2111 }
2112 #[derive(Deserialize)]
2113 enum __Tag2 {
2114 #[serde(rename = "unbind")]
2115 Value,
2116 }
2117 #[derive(Deserialize)]
2118 #[serde(deny_unknown_fields)]
2119 struct __Arm2 {
2120 #[serde(rename = "type")]
2121 _tag: __Tag2,
2122 #[serde(rename = "unbind")]
2123 value: Strict<UnbindNamespaceChange>,
2124 }
2125 #[derive(Deserialize)]
2126 #[serde(untagged)]
2127 enum __Known {
2128 Assert(Box<__Arm0>),
2129 Bind(Box<__Arm1>),
2130 Unbind(Box<__Arm2>),
2131 }
2132 Ok(match __Known::deserialize(deserializer)? {
2133 __Known::Assert(arm) => Self::Assert(arm.value.0),
2134 __Known::Bind(arm) => Self::Bind(arm.value.0),
2135 __Known::Unbind(arm) => Self::Unbind(arm.value.0),
2136 })
2137 }
2138}
2139
2140#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2142pub struct NamespaceConflict {
2143 #[serde(rename = "current")]
2145 #[serde(default, skip_serializing_if = "Option::is_none")]
2146 pub current: Option<ResourceId>,
2147 #[serde(rename = "expected")]
2149 #[serde(default, skip_serializing_if = "Option::is_none")]
2150 pub expected: Option<ResourceId>,
2151 #[serde(rename = "name")]
2153 pub name: NamespaceSegment,
2154 #[serde(rename = "parent")]
2156 pub parent: NamespaceParent,
2157}
2158impl<'de> DeserializeStrict<'de> for NamespaceConflict {
2159 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2160 #[derive(Deserialize)]
2161 #[serde(deny_unknown_fields)]
2162 struct __Wire {
2163 #[serde(rename = "current")]
2164 #[serde(default)]
2165 current: Strict<Option<ResourceId>>,
2166 #[serde(rename = "expected")]
2167 #[serde(default)]
2168 expected: Strict<Option<ResourceId>>,
2169 #[serde(rename = "name")]
2170 name: Strict<NamespaceSegment>,
2171 #[serde(rename = "parent")]
2172 parent: Strict<NamespaceParent>,
2173 }
2174 let wire = __Wire::deserialize(deserializer)?;
2175 Ok(Self {
2176 current: wire.current.0,
2177 expected: wire.expected.0,
2178 name: wire.name.0,
2179 parent: wire.parent.0,
2180 })
2181 }
2182}
2183
2184#[derive(Clone, Debug, PartialEq, Eq)]
2187pub enum NamespaceConstraintConflict {
2188 AmbiguousBinding(BindingConstraint),
2190 BindingTargetsRetiredResource(RetiredTargetConstraint),
2192 ManagedBinding(ResourceConstraint),
2194 NamespaceCycle(ResourceConstraint),
2196 NamespaceRootNotLive(RootConstraint),
2198 OutsideNamespaceRoot(RootConstraint),
2200 ParentNotLive(ParentConstraint),
2202 ResourceHasChildren(ResourceConstraint),
2204 Unknown { tag: String, value: Value },
2206}
2207impl Serialize for NamespaceConstraintConflict {
2208 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2209 match self {
2210 Self::AmbiguousBinding(value) => {
2211 let mut object = serde_json::Map::new();
2212 object.insert("type".into(), Value::String("ambiguousBinding".into()));
2213 object.insert(
2214 "ambiguousBinding".into(),
2215 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2216 );
2217 Value::Object(object).serialize(serializer)
2218 }
2219 Self::BindingTargetsRetiredResource(value) => {
2220 let mut object = serde_json::Map::new();
2221 object.insert(
2222 "type".into(),
2223 Value::String("bindingTargetsRetiredResource".into()),
2224 );
2225 object.insert(
2226 "bindingTargetsRetiredResource".into(),
2227 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2228 );
2229 Value::Object(object).serialize(serializer)
2230 }
2231 Self::ManagedBinding(value) => {
2232 let mut object = serde_json::Map::new();
2233 object.insert("type".into(), Value::String("managedBinding".into()));
2234 object.insert(
2235 "managedBinding".into(),
2236 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2237 );
2238 Value::Object(object).serialize(serializer)
2239 }
2240 Self::NamespaceCycle(value) => {
2241 let mut object = serde_json::Map::new();
2242 object.insert("type".into(), Value::String("namespaceCycle".into()));
2243 object.insert(
2244 "namespaceCycle".into(),
2245 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2246 );
2247 Value::Object(object).serialize(serializer)
2248 }
2249 Self::NamespaceRootNotLive(value) => {
2250 let mut object = serde_json::Map::new();
2251 object.insert("type".into(), Value::String("namespaceRootNotLive".into()));
2252 object.insert(
2253 "namespaceRootNotLive".into(),
2254 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2255 );
2256 Value::Object(object).serialize(serializer)
2257 }
2258 Self::OutsideNamespaceRoot(value) => {
2259 let mut object = serde_json::Map::new();
2260 object.insert("type".into(), Value::String("outsideNamespaceRoot".into()));
2261 object.insert(
2262 "outsideNamespaceRoot".into(),
2263 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2264 );
2265 Value::Object(object).serialize(serializer)
2266 }
2267 Self::ParentNotLive(value) => {
2268 let mut object = serde_json::Map::new();
2269 object.insert("type".into(), Value::String("parentNotLive".into()));
2270 object.insert(
2271 "parentNotLive".into(),
2272 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2273 );
2274 Value::Object(object).serialize(serializer)
2275 }
2276 Self::ResourceHasChildren(value) => {
2277 let mut object = serde_json::Map::new();
2278 object.insert("type".into(), Value::String("resourceHasChildren".into()));
2279 object.insert(
2280 "resourceHasChildren".into(),
2281 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2282 );
2283 Value::Object(object).serialize(serializer)
2284 }
2285 Self::Unknown { tag, value } => {
2286 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
2287 return Err(serde::ser::Error::custom(
2288 "unknown union discriminator mismatch",
2289 ));
2290 }
2291 value.serialize(serializer)
2292 }
2293 }
2294 }
2295}
2296impl<'de> Deserialize<'de> for NamespaceConstraintConflict {
2297 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2298 let value = Value::deserialize(deserializer)?;
2299 let tag = value
2300 .get("type")
2301 .and_then(Value::as_str)
2302 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
2303 match tag {
2304 "ambiguousBinding" => Ok(Self::AmbiguousBinding(
2305 serde_json::from_value(
2306 value
2307 .get("ambiguousBinding")
2308 .cloned()
2309 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2310 )
2311 .map_err(serde::de::Error::custom)?,
2312 )),
2313 "bindingTargetsRetiredResource" => Ok(Self::BindingTargetsRetiredResource(
2314 serde_json::from_value(
2315 value
2316 .get("bindingTargetsRetiredResource")
2317 .cloned()
2318 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2319 )
2320 .map_err(serde::de::Error::custom)?,
2321 )),
2322 "managedBinding" => Ok(Self::ManagedBinding(
2323 serde_json::from_value(
2324 value
2325 .get("managedBinding")
2326 .cloned()
2327 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2328 )
2329 .map_err(serde::de::Error::custom)?,
2330 )),
2331 "namespaceCycle" => Ok(Self::NamespaceCycle(
2332 serde_json::from_value(
2333 value
2334 .get("namespaceCycle")
2335 .cloned()
2336 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2337 )
2338 .map_err(serde::de::Error::custom)?,
2339 )),
2340 "namespaceRootNotLive" => Ok(Self::NamespaceRootNotLive(
2341 serde_json::from_value(
2342 value
2343 .get("namespaceRootNotLive")
2344 .cloned()
2345 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2346 )
2347 .map_err(serde::de::Error::custom)?,
2348 )),
2349 "outsideNamespaceRoot" => Ok(Self::OutsideNamespaceRoot(
2350 serde_json::from_value(
2351 value
2352 .get("outsideNamespaceRoot")
2353 .cloned()
2354 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2355 )
2356 .map_err(serde::de::Error::custom)?,
2357 )),
2358 "parentNotLive" => Ok(Self::ParentNotLive(
2359 serde_json::from_value(
2360 value
2361 .get("parentNotLive")
2362 .cloned()
2363 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2364 )
2365 .map_err(serde::de::Error::custom)?,
2366 )),
2367 "resourceHasChildren" => Ok(Self::ResourceHasChildren(
2368 serde_json::from_value(
2369 value
2370 .get("resourceHasChildren")
2371 .cloned()
2372 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2373 )
2374 .map_err(serde::de::Error::custom)?,
2375 )),
2376 tag => Ok(Self::Unknown {
2377 tag: tag.to_owned(),
2378 value,
2379 }),
2380 }
2381 }
2382}
2383impl<'de> DeserializeStrict<'de> for NamespaceConstraintConflict {
2384 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2385 #[derive(Deserialize)]
2386 enum __Tag0 {
2387 #[serde(rename = "ambiguousBinding")]
2388 Value,
2389 }
2390 #[derive(Deserialize)]
2391 #[serde(deny_unknown_fields)]
2392 struct __Arm0 {
2393 #[serde(rename = "type")]
2394 _tag: __Tag0,
2395 #[serde(rename = "ambiguousBinding")]
2396 value: Strict<BindingConstraint>,
2397 }
2398 #[derive(Deserialize)]
2399 enum __Tag1 {
2400 #[serde(rename = "bindingTargetsRetiredResource")]
2401 Value,
2402 }
2403 #[derive(Deserialize)]
2404 #[serde(deny_unknown_fields)]
2405 struct __Arm1 {
2406 #[serde(rename = "type")]
2407 _tag: __Tag1,
2408 #[serde(rename = "bindingTargetsRetiredResource")]
2409 value: Strict<RetiredTargetConstraint>,
2410 }
2411 #[derive(Deserialize)]
2412 enum __Tag2 {
2413 #[serde(rename = "managedBinding")]
2414 Value,
2415 }
2416 #[derive(Deserialize)]
2417 #[serde(deny_unknown_fields)]
2418 struct __Arm2 {
2419 #[serde(rename = "type")]
2420 _tag: __Tag2,
2421 #[serde(rename = "managedBinding")]
2422 value: Strict<ResourceConstraint>,
2423 }
2424 #[derive(Deserialize)]
2425 enum __Tag3 {
2426 #[serde(rename = "namespaceCycle")]
2427 Value,
2428 }
2429 #[derive(Deserialize)]
2430 #[serde(deny_unknown_fields)]
2431 struct __Arm3 {
2432 #[serde(rename = "type")]
2433 _tag: __Tag3,
2434 #[serde(rename = "namespaceCycle")]
2435 value: Strict<ResourceConstraint>,
2436 }
2437 #[derive(Deserialize)]
2438 enum __Tag4 {
2439 #[serde(rename = "namespaceRootNotLive")]
2440 Value,
2441 }
2442 #[derive(Deserialize)]
2443 #[serde(deny_unknown_fields)]
2444 struct __Arm4 {
2445 #[serde(rename = "type")]
2446 _tag: __Tag4,
2447 #[serde(rename = "namespaceRootNotLive")]
2448 value: Strict<RootConstraint>,
2449 }
2450 #[derive(Deserialize)]
2451 enum __Tag5 {
2452 #[serde(rename = "outsideNamespaceRoot")]
2453 Value,
2454 }
2455 #[derive(Deserialize)]
2456 #[serde(deny_unknown_fields)]
2457 struct __Arm5 {
2458 #[serde(rename = "type")]
2459 _tag: __Tag5,
2460 #[serde(rename = "outsideNamespaceRoot")]
2461 value: Strict<RootConstraint>,
2462 }
2463 #[derive(Deserialize)]
2464 enum __Tag6 {
2465 #[serde(rename = "parentNotLive")]
2466 Value,
2467 }
2468 #[derive(Deserialize)]
2469 #[serde(deny_unknown_fields)]
2470 struct __Arm6 {
2471 #[serde(rename = "type")]
2472 _tag: __Tag6,
2473 #[serde(rename = "parentNotLive")]
2474 value: Strict<ParentConstraint>,
2475 }
2476 #[derive(Deserialize)]
2477 enum __Tag7 {
2478 #[serde(rename = "resourceHasChildren")]
2479 Value,
2480 }
2481 #[derive(Deserialize)]
2482 #[serde(deny_unknown_fields)]
2483 struct __Arm7 {
2484 #[serde(rename = "type")]
2485 _tag: __Tag7,
2486 #[serde(rename = "resourceHasChildren")]
2487 value: Strict<ResourceConstraint>,
2488 }
2489 #[derive(Deserialize)]
2490 #[serde(untagged)]
2491 enum __Known {
2492 AmbiguousBinding(Box<__Arm0>),
2493 BindingTargetsRetiredResource(Box<__Arm1>),
2494 ManagedBinding(Box<__Arm2>),
2495 NamespaceCycle(Box<__Arm3>),
2496 NamespaceRootNotLive(Box<__Arm4>),
2497 OutsideNamespaceRoot(Box<__Arm5>),
2498 ParentNotLive(Box<__Arm6>),
2499 ResourceHasChildren(Box<__Arm7>),
2500 }
2501 Ok(match __Known::deserialize(deserializer)? {
2502 __Known::AmbiguousBinding(arm) => Self::AmbiguousBinding(arm.value.0),
2503 __Known::BindingTargetsRetiredResource(arm) => {
2504 Self::BindingTargetsRetiredResource(arm.value.0)
2505 }
2506 __Known::ManagedBinding(arm) => Self::ManagedBinding(arm.value.0),
2507 __Known::NamespaceCycle(arm) => Self::NamespaceCycle(arm.value.0),
2508 __Known::NamespaceRootNotLive(arm) => Self::NamespaceRootNotLive(arm.value.0),
2509 __Known::OutsideNamespaceRoot(arm) => Self::OutsideNamespaceRoot(arm.value.0),
2510 __Known::ParentNotLive(arm) => Self::ParentNotLive(arm.value.0),
2511 __Known::ResourceHasChildren(arm) => Self::ResourceHasChildren(arm.value.0),
2512 })
2513 }
2514}
2515
2516#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2521pub struct NamespaceEntry {
2522 #[serde(rename = "hasChildren")]
2524 pub has_children: bool,
2525 #[serde(rename = "name")]
2527 pub name: NamespaceSegment,
2528 #[serde(rename = "parent")]
2530 pub parent: NamespaceParent,
2531 #[serde(rename = "relativePath")]
2533 pub relative_path: NamespacePath,
2534 #[serde(rename = "resource")]
2536 pub resource: ResourceState,
2537}
2538impl<'de> DeserializeStrict<'de> for NamespaceEntry {
2539 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2540 #[derive(Deserialize)]
2541 #[serde(deny_unknown_fields)]
2542 struct __Wire {
2543 #[serde(rename = "hasChildren")]
2544 has_children: Strict<bool>,
2545 #[serde(rename = "name")]
2546 name: Strict<NamespaceSegment>,
2547 #[serde(rename = "parent")]
2548 parent: Strict<NamespaceParent>,
2549 #[serde(rename = "relativePath")]
2550 relative_path: Strict<NamespacePath>,
2551 #[serde(rename = "resource")]
2552 resource: Strict<ResourceState>,
2553 }
2554 let wire = __Wire::deserialize(deserializer)?;
2555 Ok(Self {
2556 has_children: wire.has_children.0,
2557 name: wire.name.0,
2558 parent: wire.parent.0,
2559 relative_path: wire.relative_path.0,
2560 resource: wire.resource.0,
2561 })
2562 }
2563}
2564
2565#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2567pub struct NamespaceMergeConflict {
2568 #[serde(rename = "base")]
2570 #[serde(default, skip_serializing_if = "Option::is_none")]
2571 pub base: Option<ResourceId>,
2572 #[serde(rename = "name")]
2574 pub name: NamespaceSegment,
2575 #[serde(rename = "ours")]
2577 #[serde(default, skip_serializing_if = "Option::is_none")]
2578 pub ours: Option<ResourceId>,
2579 #[serde(rename = "parent")]
2581 pub parent: NamespaceParent,
2582 #[serde(rename = "theirs")]
2584 #[serde(default, skip_serializing_if = "Option::is_none")]
2585 pub theirs: Option<ResourceId>,
2586}
2587impl<'de> DeserializeStrict<'de> for NamespaceMergeConflict {
2588 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2589 #[derive(Deserialize)]
2590 #[serde(deny_unknown_fields)]
2591 struct __Wire {
2592 #[serde(rename = "base")]
2593 #[serde(default)]
2594 base: Strict<Option<ResourceId>>,
2595 #[serde(rename = "name")]
2596 name: Strict<NamespaceSegment>,
2597 #[serde(rename = "ours")]
2598 #[serde(default)]
2599 ours: Strict<Option<ResourceId>>,
2600 #[serde(rename = "parent")]
2601 parent: Strict<NamespaceParent>,
2602 #[serde(rename = "theirs")]
2603 #[serde(default)]
2604 theirs: Strict<Option<ResourceId>>,
2605 }
2606 let wire = __Wire::deserialize(deserializer)?;
2607 Ok(Self {
2608 base: wire.base.0,
2609 name: wire.name.0,
2610 ours: wire.ours.0,
2611 parent: wire.parent.0,
2612 theirs: wire.theirs.0,
2613 })
2614 }
2615}
2616
2617#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2619pub struct NamespacePage {
2620 #[serde(rename = "commitId")]
2622 pub commit_id: CommitId,
2623 #[serde(rename = "entries")]
2625 pub entries: Vec<NamespaceEntry>,
2626 #[serde(rename = "nextPageToken")]
2628 #[serde(default, skip_serializing_if = "Option::is_none")]
2629 pub next_page_token: Option<PageToken>,
2630}
2631impl<'de> DeserializeStrict<'de> for NamespacePage {
2632 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2633 #[derive(Deserialize)]
2634 #[serde(deny_unknown_fields)]
2635 struct __Wire {
2636 #[serde(rename = "commitId")]
2637 commit_id: Strict<CommitId>,
2638 #[serde(rename = "entries")]
2639 entries: Strict<Vec<NamespaceEntry>>,
2640 #[serde(rename = "nextPageToken")]
2641 #[serde(default)]
2642 next_page_token: Strict<Option<PageToken>>,
2643 }
2644 let wire = __Wire::deserialize(deserializer)?;
2645 Ok(Self {
2646 commit_id: wire.commit_id.0,
2647 entries: wire.entries.0,
2648 next_page_token: wire.next_page_token.0,
2649 })
2650 }
2651}
2652
2653#[derive(Clone, Debug, PartialEq, Eq)]
2656pub enum NamespaceParent {
2657 Prefix(PrefixParent),
2659 ProjectRoot(Empty),
2661 Resource(ResourceParent),
2663 Unknown { tag: String, value: Value },
2665}
2666impl Serialize for NamespaceParent {
2667 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2668 match self {
2669 Self::Prefix(value) => {
2670 let mut object = serde_json::Map::new();
2671 object.insert("type".into(), Value::String("prefix".into()));
2672 object.insert(
2673 "prefix".into(),
2674 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2675 );
2676 Value::Object(object).serialize(serializer)
2677 }
2678 Self::ProjectRoot(value) => {
2679 let mut object = serde_json::Map::new();
2680 object.insert("type".into(), Value::String("projectRoot".into()));
2681 object.insert(
2682 "projectRoot".into(),
2683 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2684 );
2685 Value::Object(object).serialize(serializer)
2686 }
2687 Self::Resource(value) => {
2688 let mut object = serde_json::Map::new();
2689 object.insert("type".into(), Value::String("resource".into()));
2690 object.insert(
2691 "resource".into(),
2692 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2693 );
2694 Value::Object(object).serialize(serializer)
2695 }
2696 Self::Unknown { tag, value } => {
2697 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
2698 return Err(serde::ser::Error::custom(
2699 "unknown union discriminator mismatch",
2700 ));
2701 }
2702 value.serialize(serializer)
2703 }
2704 }
2705 }
2706}
2707impl<'de> Deserialize<'de> for NamespaceParent {
2708 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2709 let value = Value::deserialize(deserializer)?;
2710 let tag = value
2711 .get("type")
2712 .and_then(Value::as_str)
2713 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
2714 match tag {
2715 "prefix" => Ok(Self::Prefix(
2716 serde_json::from_value(
2717 value
2718 .get("prefix")
2719 .cloned()
2720 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2721 )
2722 .map_err(serde::de::Error::custom)?,
2723 )),
2724 "projectRoot" => Ok(Self::ProjectRoot(
2725 serde_json::from_value(
2726 value
2727 .get("projectRoot")
2728 .cloned()
2729 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2730 )
2731 .map_err(serde::de::Error::custom)?,
2732 )),
2733 "resource" => Ok(Self::Resource(
2734 serde_json::from_value(
2735 value
2736 .get("resource")
2737 .cloned()
2738 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2739 )
2740 .map_err(serde::de::Error::custom)?,
2741 )),
2742 tag => Ok(Self::Unknown {
2743 tag: tag.to_owned(),
2744 value,
2745 }),
2746 }
2747 }
2748}
2749impl<'de> DeserializeStrict<'de> for NamespaceParent {
2750 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2751 #[derive(Deserialize)]
2752 enum __Tag0 {
2753 #[serde(rename = "prefix")]
2754 Value,
2755 }
2756 #[derive(Deserialize)]
2757 #[serde(deny_unknown_fields)]
2758 struct __Arm0 {
2759 #[serde(rename = "type")]
2760 _tag: __Tag0,
2761 #[serde(rename = "prefix")]
2762 value: Strict<PrefixParent>,
2763 }
2764 #[derive(Deserialize)]
2765 enum __Tag1 {
2766 #[serde(rename = "projectRoot")]
2767 Value,
2768 }
2769 #[derive(Deserialize)]
2770 #[serde(deny_unknown_fields)]
2771 struct __Arm1 {
2772 #[serde(rename = "type")]
2773 _tag: __Tag1,
2774 #[serde(rename = "projectRoot")]
2775 value: Strict<Empty>,
2776 }
2777 #[derive(Deserialize)]
2778 enum __Tag2 {
2779 #[serde(rename = "resource")]
2780 Value,
2781 }
2782 #[derive(Deserialize)]
2783 #[serde(deny_unknown_fields)]
2784 struct __Arm2 {
2785 #[serde(rename = "type")]
2786 _tag: __Tag2,
2787 #[serde(rename = "resource")]
2788 value: Strict<ResourceParent>,
2789 }
2790 #[derive(Deserialize)]
2791 #[serde(untagged)]
2792 enum __Known {
2793 Prefix(Box<__Arm0>),
2794 ProjectRoot(Box<__Arm1>),
2795 Resource(Box<__Arm2>),
2796 }
2797 Ok(match __Known::deserialize(deserializer)? {
2798 __Known::Prefix(arm) => Self::Prefix(arm.value.0),
2799 __Known::ProjectRoot(arm) => Self::ProjectRoot(arm.value.0),
2800 __Known::Resource(arm) => Self::Resource(arm.value.0),
2801 })
2802 }
2803}
2804
2805#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2808#[serde(transparent)]
2809pub struct NamespacePath(pub Vec<NamespaceSegment>);
2810impl<'de> DeserializeStrict<'de> for NamespacePath {
2811 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2812 Ok(Self(
2813 Strict::<Vec<NamespaceSegment>>::deserialize(deserializer)?.0,
2814 ))
2815 }
2816}
2817
2818#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2822#[serde(transparent)]
2823pub struct NamespaceSegment(pub String);
2824impl std::fmt::Display for NamespaceSegment {
2825 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2826 self.0.fmt(formatter)
2827 }
2828}
2829impl<'de> DeserializeStrict<'de> for NamespaceSegment {
2830 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2831 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
2832 }
2833}
2834
2835#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2837#[serde(transparent)]
2838pub struct OperationId(pub Uuid);
2839impl std::fmt::Display for OperationId {
2840 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2841 self.0.fmt(formatter)
2842 }
2843}
2844impl<'de> DeserializeStrict<'de> for OperationId {
2845 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2846 Ok(Self(Strict::<Uuid>::deserialize(deserializer)?.0))
2847 }
2848}
2849
2850#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2853pub struct OperationReceipt {
2854 #[serde(rename = "operation")]
2856 pub operation: ProjectOperation,
2857 #[serde(rename = "publication")]
2859 pub publication: Publication,
2860}
2861impl<'de> DeserializeStrict<'de> for OperationReceipt {
2862 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2863 #[derive(Deserialize)]
2864 #[serde(deny_unknown_fields)]
2865 struct __Wire {
2866 #[serde(rename = "operation")]
2867 operation: Strict<ProjectOperation>,
2868 #[serde(rename = "publication")]
2869 publication: Strict<Publication>,
2870 }
2871 let wire = __Wire::deserialize(deserializer)?;
2872 Ok(Self {
2873 operation: wire.operation.0,
2874 publication: wire.publication.0,
2875 })
2876 }
2877}
2878
2879#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2882#[serde(transparent)]
2883pub struct PageSize(pub u32);
2884impl std::fmt::Display for PageSize {
2885 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2886 self.0.fmt(formatter)
2887 }
2888}
2889impl<'de> DeserializeStrict<'de> for PageSize {
2890 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2891 Ok(Self(Strict::<u32>::deserialize(deserializer)?.0))
2892 }
2893}
2894
2895#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2900#[serde(transparent)]
2901pub struct PageToken(pub String);
2902impl std::fmt::Display for PageToken {
2903 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2904 self.0.fmt(formatter)
2905 }
2906}
2907impl<'de> DeserializeStrict<'de> for PageToken {
2908 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2909 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
2910 }
2911}
2912
2913#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2915pub struct ParentConstraint {
2916 #[serde(rename = "parent")]
2918 pub parent: ResourceId,
2919}
2920impl<'de> DeserializeStrict<'de> for ParentConstraint {
2921 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2922 #[derive(Deserialize)]
2923 #[serde(deny_unknown_fields)]
2924 struct __Wire {
2925 #[serde(rename = "parent")]
2926 parent: Strict<ResourceId>,
2927 }
2928 let wire = __Wire::deserialize(deserializer)?;
2929 Ok(Self {
2930 parent: wire.parent.0,
2931 })
2932 }
2933}
2934
2935#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2938pub struct PrefixParent {
2939 #[serde(rename = "path")]
2941 pub path: NamespacePath,
2942 #[serde(rename = "resourceId")]
2944 #[serde(default, skip_serializing_if = "Option::is_none")]
2945 pub resource_id: Option<ResourceId>,
2946}
2947impl<'de> DeserializeStrict<'de> for PrefixParent {
2948 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2949 #[derive(Deserialize)]
2950 #[serde(deny_unknown_fields)]
2951 struct __Wire {
2952 #[serde(rename = "path")]
2953 path: Strict<NamespacePath>,
2954 #[serde(rename = "resourceId")]
2955 #[serde(default)]
2956 resource_id: Strict<Option<ResourceId>>,
2957 }
2958 let wire = __Wire::deserialize(deserializer)?;
2959 Ok(Self {
2960 path: wire.path.0,
2961 resource_id: wire.resource_id.0,
2962 })
2963 }
2964}
2965
2966#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2969#[serde(transparent)]
2970pub struct ProjectId(pub String);
2971impl std::fmt::Display for ProjectId {
2972 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2973 self.0.fmt(formatter)
2974 }
2975}
2976impl<'de> DeserializeStrict<'de> for ProjectId {
2977 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2978 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
2979 }
2980}
2981
2982#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2987pub struct ProjectOperation {
2988 #[serde(rename = "input")]
2990 pub input: Value,
2991 #[serde(rename = "operationId")]
2993 pub operation_id: OperationId,
2994 #[serde(rename = "result")]
2996 pub result: Value,
2997}
2998impl<'de> DeserializeStrict<'de> for ProjectOperation {
2999 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3000 #[derive(Deserialize)]
3001 #[serde(deny_unknown_fields)]
3002 struct __Wire {
3003 #[serde(rename = "input")]
3004 input: Strict<Value>,
3005 #[serde(rename = "operationId")]
3006 operation_id: Strict<OperationId>,
3007 #[serde(rename = "result")]
3008 result: Strict<Value>,
3009 }
3010 let wire = __Wire::deserialize(deserializer)?;
3011 Ok(Self {
3012 input: wire.input.0,
3013 operation_id: wire.operation_id.0,
3014 result: wire.result.0,
3015 })
3016 }
3017}
3018
3019#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3022pub struct Publication {
3023 #[serde(rename = "commitId")]
3025 pub commit_id: CommitId,
3026 #[serde(rename = "parentCommitId")]
3028 pub parent_commit_id: CommitId,
3029}
3030impl<'de> DeserializeStrict<'de> for Publication {
3031 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3032 #[derive(Deserialize)]
3033 #[serde(deny_unknown_fields)]
3034 struct __Wire {
3035 #[serde(rename = "commitId")]
3036 commit_id: Strict<CommitId>,
3037 #[serde(rename = "parentCommitId")]
3038 parent_commit_id: Strict<CommitId>,
3039 }
3040 let wire = __Wire::deserialize(deserializer)?;
3041 Ok(Self {
3042 commit_id: wire.commit_id.0,
3043 parent_commit_id: wire.parent_commit_id.0,
3044 })
3045 }
3046}
3047
3048#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3050pub struct PublicationConflict {
3051 #[serde(rename = "constraints")]
3053 pub constraints: Vec<NamespaceConstraintConflict>,
3054 #[serde(rename = "currentCommitId")]
3056 pub current_commit_id: CommitId,
3057 #[serde(rename = "namespace")]
3059 pub namespace: Vec<NamespaceConflict>,
3060 #[serde(rename = "resources")]
3062 pub resources: Vec<ResourceConflict>,
3063}
3064impl<'de> DeserializeStrict<'de> for PublicationConflict {
3065 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3066 #[derive(Deserialize)]
3067 #[serde(deny_unknown_fields)]
3068 struct __Wire {
3069 #[serde(rename = "constraints")]
3070 constraints: Strict<Vec<NamespaceConstraintConflict>>,
3071 #[serde(rename = "currentCommitId")]
3072 current_commit_id: Strict<CommitId>,
3073 #[serde(rename = "namespace")]
3074 namespace: Strict<Vec<NamespaceConflict>>,
3075 #[serde(rename = "resources")]
3076 resources: Strict<Vec<ResourceConflict>>,
3077 }
3078 let wire = __Wire::deserialize(deserializer)?;
3079 Ok(Self {
3080 constraints: wire.constraints.0,
3081 current_commit_id: wire.current_commit_id.0,
3082 namespace: wire.namespace.0,
3083 resources: wire.resources.0,
3084 })
3085 }
3086}
3087
3088#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3094pub struct PublishOperationRequest {
3095 #[serde(rename = "operation")]
3097 pub operation: ProjectOperation,
3098 #[serde(rename = "publication")]
3100 pub publication: PublishRequest,
3101}
3102impl<'de> DeserializeStrict<'de> for PublishOperationRequest {
3103 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3104 #[derive(Deserialize)]
3105 #[serde(deny_unknown_fields)]
3106 struct __Wire {
3107 #[serde(rename = "operation")]
3108 operation: Strict<ProjectOperation>,
3109 #[serde(rename = "publication")]
3110 publication: Strict<PublishRequest>,
3111 }
3112 let wire = __Wire::deserialize(deserializer)?;
3113 Ok(Self {
3114 operation: wire.operation.0,
3115 publication: wire.publication.0,
3116 })
3117 }
3118}
3119
3120#[derive(Clone, Debug, PartialEq, Eq)]
3124pub enum PublishOperationResponse {
3125 Conflict(PublicationConflict),
3127 Published(OperationReceipt),
3129 Unknown { tag: String, value: Value },
3131}
3132impl Serialize for PublishOperationResponse {
3133 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3134 match self {
3135 Self::Conflict(value) => {
3136 let mut object = serde_json::Map::new();
3137 object.insert("type".into(), Value::String("conflict".into()));
3138 object.insert(
3139 "conflict".into(),
3140 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
3141 );
3142 Value::Object(object).serialize(serializer)
3143 }
3144 Self::Published(value) => {
3145 let mut object = serde_json::Map::new();
3146 object.insert("type".into(), Value::String("published".into()));
3147 object.insert(
3148 "published".into(),
3149 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
3150 );
3151 Value::Object(object).serialize(serializer)
3152 }
3153 Self::Unknown { tag, value } => {
3154 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
3155 return Err(serde::ser::Error::custom(
3156 "unknown union discriminator mismatch",
3157 ));
3158 }
3159 value.serialize(serializer)
3160 }
3161 }
3162 }
3163}
3164impl<'de> Deserialize<'de> for PublishOperationResponse {
3165 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3166 let value = Value::deserialize(deserializer)?;
3167 let tag = value
3168 .get("type")
3169 .and_then(Value::as_str)
3170 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
3171 match tag {
3172 "conflict" => Ok(Self::Conflict(
3173 serde_json::from_value(
3174 value
3175 .get("conflict")
3176 .cloned()
3177 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
3178 )
3179 .map_err(serde::de::Error::custom)?,
3180 )),
3181 "published" => Ok(Self::Published(
3182 serde_json::from_value(
3183 value
3184 .get("published")
3185 .cloned()
3186 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
3187 )
3188 .map_err(serde::de::Error::custom)?,
3189 )),
3190 tag => Ok(Self::Unknown {
3191 tag: tag.to_owned(),
3192 value,
3193 }),
3194 }
3195 }
3196}
3197impl<'de> DeserializeStrict<'de> for PublishOperationResponse {
3198 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3199 #[derive(Deserialize)]
3200 enum __Tag0 {
3201 #[serde(rename = "conflict")]
3202 Value,
3203 }
3204 #[derive(Deserialize)]
3205 #[serde(deny_unknown_fields)]
3206 struct __Arm0 {
3207 #[serde(rename = "type")]
3208 _tag: __Tag0,
3209 #[serde(rename = "conflict")]
3210 value: Strict<PublicationConflict>,
3211 }
3212 #[derive(Deserialize)]
3213 enum __Tag1 {
3214 #[serde(rename = "published")]
3215 Value,
3216 }
3217 #[derive(Deserialize)]
3218 #[serde(deny_unknown_fields)]
3219 struct __Arm1 {
3220 #[serde(rename = "type")]
3221 _tag: __Tag1,
3222 #[serde(rename = "published")]
3223 value: Strict<OperationReceipt>,
3224 }
3225 #[derive(Deserialize)]
3226 #[serde(untagged)]
3227 enum __Known {
3228 Conflict(Box<__Arm0>),
3229 Published(Box<__Arm1>),
3230 }
3231 Ok(match __Known::deserialize(deserializer)? {
3232 __Known::Conflict(arm) => Self::Conflict(arm.value.0),
3233 __Known::Published(arm) => Self::Published(arm.value.0),
3234 })
3235 }
3236}
3237
3238#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3247pub struct PublishRequest {
3248 #[serde(rename = "baseCommitId")]
3250 pub base_commit_id: CommitId,
3251 #[serde(rename = "branchId")]
3253 pub branch_id: BranchId,
3254 #[serde(rename = "expectedHeadCommitId")]
3256 #[serde(default, skip_serializing_if = "Option::is_none")]
3257 pub expected_head_commit_id: Option<CommitId>,
3258 #[serde(rename = "idempotencyKey")]
3260 pub idempotency_key: IdempotencyKey,
3261 #[serde(rename = "message")]
3263 #[serde(default, skip_serializing_if = "Option::is_none")]
3264 pub message: Option<String>,
3265 #[serde(rename = "namespace")]
3267 pub namespace: Vec<NamespaceChange>,
3268 #[serde(rename = "resources")]
3270 pub resources: Vec<ResourceChange>,
3271 #[serde(rename = "transactionId")]
3273 pub transaction_id: TransactionId,
3274}
3275impl<'de> DeserializeStrict<'de> for PublishRequest {
3276 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3277 #[derive(Deserialize)]
3278 #[serde(deny_unknown_fields)]
3279 struct __Wire {
3280 #[serde(rename = "baseCommitId")]
3281 base_commit_id: Strict<CommitId>,
3282 #[serde(rename = "branchId")]
3283 branch_id: Strict<BranchId>,
3284 #[serde(rename = "expectedHeadCommitId")]
3285 #[serde(default)]
3286 expected_head_commit_id: Strict<Option<CommitId>>,
3287 #[serde(rename = "idempotencyKey")]
3288 idempotency_key: Strict<IdempotencyKey>,
3289 #[serde(rename = "message")]
3290 #[serde(default)]
3291 message: Strict<Option<String>>,
3292 #[serde(rename = "namespace")]
3293 namespace: Strict<Vec<NamespaceChange>>,
3294 #[serde(rename = "resources")]
3295 resources: Strict<Vec<ResourceChange>>,
3296 #[serde(rename = "transactionId")]
3297 transaction_id: Strict<TransactionId>,
3298 }
3299 let wire = __Wire::deserialize(deserializer)?;
3300 Ok(Self {
3301 base_commit_id: wire.base_commit_id.0,
3302 branch_id: wire.branch_id.0,
3303 expected_head_commit_id: wire.expected_head_commit_id.0,
3304 idempotency_key: wire.idempotency_key.0,
3305 message: wire.message.0,
3306 namespace: wire.namespace.0,
3307 resources: wire.resources.0,
3308 transaction_id: wire.transaction_id.0,
3309 })
3310 }
3311}
3312
3313#[derive(Clone, Debug, PartialEq, Eq)]
3316pub enum PublishResponse {
3317 Conflict(PublicationConflict),
3319 Published(Publication),
3321 Unknown { tag: String, value: Value },
3323}
3324impl Serialize for PublishResponse {
3325 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3326 match self {
3327 Self::Conflict(value) => {
3328 let mut object = serde_json::Map::new();
3329 object.insert("type".into(), Value::String("conflict".into()));
3330 object.insert(
3331 "conflict".into(),
3332 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
3333 );
3334 Value::Object(object).serialize(serializer)
3335 }
3336 Self::Published(value) => {
3337 let mut object = serde_json::Map::new();
3338 object.insert("type".into(), Value::String("published".into()));
3339 object.insert(
3340 "published".into(),
3341 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
3342 );
3343 Value::Object(object).serialize(serializer)
3344 }
3345 Self::Unknown { tag, value } => {
3346 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
3347 return Err(serde::ser::Error::custom(
3348 "unknown union discriminator mismatch",
3349 ));
3350 }
3351 value.serialize(serializer)
3352 }
3353 }
3354 }
3355}
3356impl<'de> Deserialize<'de> for PublishResponse {
3357 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3358 let value = Value::deserialize(deserializer)?;
3359 let tag = value
3360 .get("type")
3361 .and_then(Value::as_str)
3362 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
3363 match tag {
3364 "conflict" => Ok(Self::Conflict(
3365 serde_json::from_value(
3366 value
3367 .get("conflict")
3368 .cloned()
3369 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
3370 )
3371 .map_err(serde::de::Error::custom)?,
3372 )),
3373 "published" => Ok(Self::Published(
3374 serde_json::from_value(
3375 value
3376 .get("published")
3377 .cloned()
3378 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
3379 )
3380 .map_err(serde::de::Error::custom)?,
3381 )),
3382 tag => Ok(Self::Unknown {
3383 tag: tag.to_owned(),
3384 value,
3385 }),
3386 }
3387 }
3388}
3389impl<'de> DeserializeStrict<'de> for PublishResponse {
3390 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3391 #[derive(Deserialize)]
3392 enum __Tag0 {
3393 #[serde(rename = "conflict")]
3394 Value,
3395 }
3396 #[derive(Deserialize)]
3397 #[serde(deny_unknown_fields)]
3398 struct __Arm0 {
3399 #[serde(rename = "type")]
3400 _tag: __Tag0,
3401 #[serde(rename = "conflict")]
3402 value: Strict<PublicationConflict>,
3403 }
3404 #[derive(Deserialize)]
3405 enum __Tag1 {
3406 #[serde(rename = "published")]
3407 Value,
3408 }
3409 #[derive(Deserialize)]
3410 #[serde(deny_unknown_fields)]
3411 struct __Arm1 {
3412 #[serde(rename = "type")]
3413 _tag: __Tag1,
3414 #[serde(rename = "published")]
3415 value: Strict<Publication>,
3416 }
3417 #[derive(Deserialize)]
3418 #[serde(untagged)]
3419 enum __Known {
3420 Conflict(Box<__Arm0>),
3421 Published(Box<__Arm1>),
3422 }
3423 Ok(match __Known::deserialize(deserializer)? {
3424 __Known::Conflict(arm) => Self::Conflict(arm.value.0),
3425 __Known::Published(arm) => Self::Published(arm.value.0),
3426 })
3427 }
3428}
3429
3430#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3433pub struct ReadBranchRequest {
3434 #[serde(rename = "name")]
3436 pub name: BranchName,
3437}
3438impl<'de> DeserializeStrict<'de> for ReadBranchRequest {
3439 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3440 #[derive(Deserialize)]
3441 #[serde(deny_unknown_fields)]
3442 struct __Wire {
3443 #[serde(rename = "name")]
3444 name: Strict<BranchName>,
3445 }
3446 let wire = __Wire::deserialize(deserializer)?;
3447 Ok(Self { name: wire.name.0 })
3448 }
3449}
3450
3451#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3458pub struct ReadCommitLogRequest {
3459 #[serde(rename = "excludeAncestorsOf")]
3461 #[serde(default, skip_serializing_if = "Option::is_none")]
3462 pub exclude_ancestors_of: Option<Vec<CommitSelector>>,
3463 #[serde(rename = "maxCommits")]
3465 #[serde(default, skip_serializing_if = "Option::is_none")]
3466 pub max_commits: Option<CommitLogLimit>,
3467 #[serde(rename = "starts")]
3469 pub starts: Vec<CommitSelector>,
3470 #[serde(rename = "traversal")]
3472 #[serde(default, skip_serializing_if = "Option::is_none")]
3473 pub traversal: Option<GraphTraversal>,
3474}
3475impl<'de> DeserializeStrict<'de> for ReadCommitLogRequest {
3476 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3477 #[derive(Deserialize)]
3478 #[serde(deny_unknown_fields)]
3479 struct __Wire {
3480 #[serde(rename = "excludeAncestorsOf")]
3481 #[serde(default)]
3482 exclude_ancestors_of: Strict<Option<Vec<CommitSelector>>>,
3483 #[serde(rename = "maxCommits")]
3484 #[serde(default)]
3485 max_commits: Strict<Option<CommitLogLimit>>,
3486 #[serde(rename = "starts")]
3487 starts: Strict<Vec<CommitSelector>>,
3488 #[serde(rename = "traversal")]
3489 #[serde(default)]
3490 traversal: Strict<Option<GraphTraversal>>,
3491 }
3492 let wire = __Wire::deserialize(deserializer)?;
3493 Ok(Self {
3494 exclude_ancestors_of: wire.exclude_ancestors_of.0,
3495 max_commits: wire.max_commits.0,
3496 starts: wire.starts.0,
3497 traversal: wire.traversal.0,
3498 })
3499 }
3500}
3501
3502#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3505pub struct ReadOperationResponse {
3506 #[serde(rename = "receipt")]
3508 #[serde(default, skip_serializing_if = "Option::is_none")]
3509 pub receipt: Option<OperationReceipt>,
3510}
3511impl<'de> DeserializeStrict<'de> for ReadOperationResponse {
3512 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3513 #[derive(Deserialize)]
3514 #[serde(deny_unknown_fields)]
3515 struct __Wire {
3516 #[serde(rename = "receipt")]
3517 #[serde(default)]
3518 receipt: Strict<Option<OperationReceipt>>,
3519 }
3520 let wire = __Wire::deserialize(deserializer)?;
3521 Ok(Self {
3522 receipt: wire.receipt.0,
3523 })
3524 }
3525}
3526
3527#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3530pub struct ReadRefEventsRequest {
3531 #[serde(rename = "pageSize")]
3533 #[serde(default, skip_serializing_if = "Option::is_none")]
3534 pub page_size: Option<PageSize>,
3535 #[serde(rename = "pageToken")]
3537 #[serde(default, skip_serializing_if = "Option::is_none")]
3538 pub page_token: Option<PageToken>,
3539}
3540impl<'de> DeserializeStrict<'de> for ReadRefEventsRequest {
3541 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3542 #[derive(Deserialize)]
3543 #[serde(deny_unknown_fields)]
3544 struct __Wire {
3545 #[serde(rename = "pageSize")]
3546 #[serde(default)]
3547 page_size: Strict<Option<PageSize>>,
3548 #[serde(rename = "pageToken")]
3549 #[serde(default)]
3550 page_token: Strict<Option<PageToken>>,
3551 }
3552 let wire = __Wire::deserialize(deserializer)?;
3553 Ok(Self {
3554 page_size: wire.page_size.0,
3555 page_token: wire.page_token.0,
3556 })
3557 }
3558}
3559
3560#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3562pub struct ReadStateRequest {
3563 #[serde(rename = "pageSize")]
3565 #[serde(default, skip_serializing_if = "Option::is_none")]
3566 pub page_size: Option<PageSize>,
3567 #[serde(rename = "pageToken")]
3569 #[serde(default, skip_serializing_if = "Option::is_none")]
3570 pub page_token: Option<PageToken>,
3571}
3572impl<'de> DeserializeStrict<'de> for ReadStateRequest {
3573 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3574 #[derive(Deserialize)]
3575 #[serde(deny_unknown_fields)]
3576 struct __Wire {
3577 #[serde(rename = "pageSize")]
3578 #[serde(default)]
3579 page_size: Strict<Option<PageSize>>,
3580 #[serde(rename = "pageToken")]
3581 #[serde(default)]
3582 page_token: Strict<Option<PageToken>>,
3583 }
3584 let wire = __Wire::deserialize(deserializer)?;
3585 Ok(Self {
3586 page_size: wire.page_size.0,
3587 page_token: wire.page_token.0,
3588 })
3589 }
3590}
3591
3592#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3594pub struct ReadTagRequest {
3595 #[serde(rename = "name")]
3597 pub name: TagName,
3598}
3599impl<'de> DeserializeStrict<'de> for ReadTagRequest {
3600 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3601 #[derive(Deserialize)]
3602 #[serde(deny_unknown_fields)]
3603 struct __Wire {
3604 #[serde(rename = "name")]
3605 name: Strict<TagName>,
3606 }
3607 let wire = __Wire::deserialize(deserializer)?;
3608 Ok(Self { name: wire.name.0 })
3609 }
3610}
3611
3612#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3614pub struct RecoverPublicationRequest {
3615 #[serde(rename = "transactionId")]
3617 pub transaction_id: TransactionId,
3618}
3619impl<'de> DeserializeStrict<'de> for RecoverPublicationRequest {
3620 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3621 #[derive(Deserialize)]
3622 #[serde(deny_unknown_fields)]
3623 struct __Wire {
3624 #[serde(rename = "transactionId")]
3625 transaction_id: Strict<TransactionId>,
3626 }
3627 let wire = __Wire::deserialize(deserializer)?;
3628 Ok(Self {
3629 transaction_id: wire.transaction_id.0,
3630 })
3631 }
3632}
3633
3634#[derive(Clone, Debug, PartialEq, Eq)]
3637pub enum RecoverPublicationResponse {
3638 NotPublished(Empty),
3640 Published(RecoveredPublication),
3642 Unknown { tag: String, value: Value },
3644}
3645impl Serialize for RecoverPublicationResponse {
3646 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3647 match self {
3648 Self::NotPublished(value) => {
3649 let mut object = serde_json::Map::new();
3650 object.insert("type".into(), Value::String("notPublished".into()));
3651 object.insert(
3652 "notPublished".into(),
3653 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
3654 );
3655 Value::Object(object).serialize(serializer)
3656 }
3657 Self::Published(value) => {
3658 let mut object = serde_json::Map::new();
3659 object.insert("type".into(), Value::String("published".into()));
3660 object.insert(
3661 "published".into(),
3662 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
3663 );
3664 Value::Object(object).serialize(serializer)
3665 }
3666 Self::Unknown { tag, value } => {
3667 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
3668 return Err(serde::ser::Error::custom(
3669 "unknown union discriminator mismatch",
3670 ));
3671 }
3672 value.serialize(serializer)
3673 }
3674 }
3675 }
3676}
3677impl<'de> Deserialize<'de> for RecoverPublicationResponse {
3678 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3679 let value = Value::deserialize(deserializer)?;
3680 let tag = value
3681 .get("type")
3682 .and_then(Value::as_str)
3683 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
3684 match tag {
3685 "notPublished" => Ok(Self::NotPublished(
3686 serde_json::from_value(
3687 value
3688 .get("notPublished")
3689 .cloned()
3690 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
3691 )
3692 .map_err(serde::de::Error::custom)?,
3693 )),
3694 "published" => Ok(Self::Published(
3695 serde_json::from_value(
3696 value
3697 .get("published")
3698 .cloned()
3699 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
3700 )
3701 .map_err(serde::de::Error::custom)?,
3702 )),
3703 tag => Ok(Self::Unknown {
3704 tag: tag.to_owned(),
3705 value,
3706 }),
3707 }
3708 }
3709}
3710impl<'de> DeserializeStrict<'de> for RecoverPublicationResponse {
3711 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3712 #[derive(Deserialize)]
3713 enum __Tag0 {
3714 #[serde(rename = "notPublished")]
3715 Value,
3716 }
3717 #[derive(Deserialize)]
3718 #[serde(deny_unknown_fields)]
3719 struct __Arm0 {
3720 #[serde(rename = "type")]
3721 _tag: __Tag0,
3722 #[serde(rename = "notPublished")]
3723 value: Strict<Empty>,
3724 }
3725 #[derive(Deserialize)]
3726 enum __Tag1 {
3727 #[serde(rename = "published")]
3728 Value,
3729 }
3730 #[derive(Deserialize)]
3731 #[serde(deny_unknown_fields)]
3732 struct __Arm1 {
3733 #[serde(rename = "type")]
3734 _tag: __Tag1,
3735 #[serde(rename = "published")]
3736 value: Strict<RecoveredPublication>,
3737 }
3738 #[derive(Deserialize)]
3739 #[serde(untagged)]
3740 enum __Known {
3741 NotPublished(Box<__Arm0>),
3742 Published(Box<__Arm1>),
3743 }
3744 Ok(match __Known::deserialize(deserializer)? {
3745 __Known::NotPublished(arm) => Self::NotPublished(arm.value.0),
3746 __Known::Published(arm) => Self::Published(arm.value.0),
3747 })
3748 }
3749}
3750
3751#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3753pub struct RecoveredPublication {
3754 #[serde(rename = "commitId")]
3756 pub commit_id: CommitId,
3757 #[serde(rename = "parentCommitIds")]
3759 pub parent_commit_ids: Vec<CommitId>,
3760}
3761impl<'de> DeserializeStrict<'de> for RecoveredPublication {
3762 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3763 #[derive(Deserialize)]
3764 #[serde(deny_unknown_fields)]
3765 struct __Wire {
3766 #[serde(rename = "commitId")]
3767 commit_id: Strict<CommitId>,
3768 #[serde(rename = "parentCommitIds")]
3769 parent_commit_ids: Strict<Vec<CommitId>>,
3770 }
3771 let wire = __Wire::deserialize(deserializer)?;
3772 Ok(Self {
3773 commit_id: wire.commit_id.0,
3774 parent_commit_ids: wire.parent_commit_ids.0,
3775 })
3776 }
3777}
3778
3779#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3783pub struct RefEventPage {
3784 #[serde(rename = "events")]
3786 pub events: Vec<BranchEvent>,
3787 #[serde(rename = "nextPageToken")]
3789 #[serde(default, skip_serializing_if = "Option::is_none")]
3790 pub next_page_token: Option<PageToken>,
3791}
3792impl<'de> DeserializeStrict<'de> for RefEventPage {
3793 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3794 #[derive(Deserialize)]
3795 #[serde(deny_unknown_fields)]
3796 struct __Wire {
3797 #[serde(rename = "events")]
3798 events: Strict<Vec<BranchEvent>>,
3799 #[serde(rename = "nextPageToken")]
3800 #[serde(default)]
3801 next_page_token: Strict<Option<PageToken>>,
3802 }
3803 let wire = __Wire::deserialize(deserializer)?;
3804 Ok(Self {
3805 events: wire.events.0,
3806 next_page_token: wire.next_page_token.0,
3807 })
3808 }
3809}
3810
3811#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3813pub struct RenameBranchRequest {
3814 #[serde(rename = "idempotencyKey")]
3816 pub idempotency_key: IdempotencyKey,
3817 #[serde(rename = "newName")]
3819 pub new_name: BranchName,
3820}
3821impl<'de> DeserializeStrict<'de> for RenameBranchRequest {
3822 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3823 #[derive(Deserialize)]
3824 #[serde(deny_unknown_fields)]
3825 struct __Wire {
3826 #[serde(rename = "idempotencyKey")]
3827 idempotency_key: Strict<IdempotencyKey>,
3828 #[serde(rename = "newName")]
3829 new_name: Strict<BranchName>,
3830 }
3831 let wire = __Wire::deserialize(deserializer)?;
3832 Ok(Self {
3833 idempotency_key: wire.idempotency_key.0,
3834 new_name: wire.new_name.0,
3835 })
3836 }
3837}
3838
3839#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3841pub struct ResolveCommitRequest {
3842 #[serde(rename = "selector")]
3844 pub selector: CommitSelector,
3845}
3846impl<'de> DeserializeStrict<'de> for ResolveCommitRequest {
3847 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3848 #[derive(Deserialize)]
3849 #[serde(deny_unknown_fields)]
3850 struct __Wire {
3851 #[serde(rename = "selector")]
3852 selector: Strict<CommitSelector>,
3853 }
3854 let wire = __Wire::deserialize(deserializer)?;
3855 Ok(Self {
3856 selector: wire.selector.0,
3857 })
3858 }
3859}
3860
3861#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3864pub struct ResolveCommitResponse {
3865 #[serde(rename = "commitId")]
3867 pub commit_id: CommitId,
3868 #[serde(rename = "selector")]
3870 pub selector: CommitSelector,
3871}
3872impl<'de> DeserializeStrict<'de> for ResolveCommitResponse {
3873 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3874 #[derive(Deserialize)]
3875 #[serde(deny_unknown_fields)]
3876 struct __Wire {
3877 #[serde(rename = "commitId")]
3878 commit_id: Strict<CommitId>,
3879 #[serde(rename = "selector")]
3880 selector: Strict<CommitSelector>,
3881 }
3882 let wire = __Wire::deserialize(deserializer)?;
3883 Ok(Self {
3884 commit_id: wire.commit_id.0,
3885 selector: wire.selector.0,
3886 })
3887 }
3888}
3889
3890#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3893pub struct ResolvePathRequest {
3894 #[serde(rename = "path")]
3896 pub path: NamespacePath,
3897}
3898impl<'de> DeserializeStrict<'de> for ResolvePathRequest {
3899 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3900 #[derive(Deserialize)]
3901 #[serde(deny_unknown_fields)]
3902 struct __Wire {
3903 #[serde(rename = "path")]
3904 path: Strict<NamespacePath>,
3905 }
3906 let wire = __Wire::deserialize(deserializer)?;
3907 Ok(Self { path: wire.path.0 })
3908 }
3909}
3910
3911#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3913pub struct ResolvePathResponse {
3914 #[serde(rename = "commitId")]
3916 pub commit_id: CommitId,
3917 #[serde(rename = "resource")]
3919 #[serde(default, skip_serializing_if = "Option::is_none")]
3920 pub resource: Option<ResourceState>,
3921}
3922impl<'de> DeserializeStrict<'de> for ResolvePathResponse {
3923 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3924 #[derive(Deserialize)]
3925 #[serde(deny_unknown_fields)]
3926 struct __Wire {
3927 #[serde(rename = "commitId")]
3928 commit_id: Strict<CommitId>,
3929 #[serde(rename = "resource")]
3930 #[serde(default)]
3931 resource: Strict<Option<ResourceState>>,
3932 }
3933 let wire = __Wire::deserialize(deserializer)?;
3934 Ok(Self {
3935 commit_id: wire.commit_id.0,
3936 resource: wire.resource.0,
3937 })
3938 }
3939}
3940
3941#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3944pub struct ResolvePathsRequest {
3945 #[serde(rename = "paths")]
3947 pub paths: Vec<NamespacePath>,
3948}
3949impl<'de> DeserializeStrict<'de> for ResolvePathsRequest {
3950 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3951 #[derive(Deserialize)]
3952 #[serde(deny_unknown_fields)]
3953 struct __Wire {
3954 #[serde(rename = "paths")]
3955 paths: Strict<Vec<NamespacePath>>,
3956 }
3957 let wire = __Wire::deserialize(deserializer)?;
3958 Ok(Self {
3959 paths: wire.paths.0,
3960 })
3961 }
3962}
3963
3964#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3966pub struct ResolvePathsResponse {
3967 #[serde(rename = "commitId")]
3969 pub commit_id: CommitId,
3970 #[serde(rename = "results")]
3972 pub results: Vec<ResolvedPath>,
3973}
3974impl<'de> DeserializeStrict<'de> for ResolvePathsResponse {
3975 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3976 #[derive(Deserialize)]
3977 #[serde(deny_unknown_fields)]
3978 struct __Wire {
3979 #[serde(rename = "commitId")]
3980 commit_id: Strict<CommitId>,
3981 #[serde(rename = "results")]
3982 results: Strict<Vec<ResolvedPath>>,
3983 }
3984 let wire = __Wire::deserialize(deserializer)?;
3985 Ok(Self {
3986 commit_id: wire.commit_id.0,
3987 results: wire.results.0,
3988 })
3989 }
3990}
3991
3992#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3994pub struct ResolvedCommitSelector {
3995 #[serde(rename = "commitId")]
3997 pub commit_id: CommitId,
3998 #[serde(rename = "selector")]
4000 pub selector: CommitSelector,
4001}
4002impl<'de> DeserializeStrict<'de> for ResolvedCommitSelector {
4003 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4004 #[derive(Deserialize)]
4005 #[serde(deny_unknown_fields)]
4006 struct __Wire {
4007 #[serde(rename = "commitId")]
4008 commit_id: Strict<CommitId>,
4009 #[serde(rename = "selector")]
4010 selector: Strict<CommitSelector>,
4011 }
4012 let wire = __Wire::deserialize(deserializer)?;
4013 Ok(Self {
4014 commit_id: wire.commit_id.0,
4015 selector: wire.selector.0,
4016 })
4017 }
4018}
4019
4020#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4022pub struct ResolvedPath {
4023 #[serde(rename = "path")]
4025 pub path: NamespacePath,
4026 #[serde(rename = "resource")]
4028 #[serde(default, skip_serializing_if = "Option::is_none")]
4029 pub resource: Option<ResourceState>,
4030}
4031impl<'de> DeserializeStrict<'de> for ResolvedPath {
4032 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4033 #[derive(Deserialize)]
4034 #[serde(deny_unknown_fields)]
4035 struct __Wire {
4036 #[serde(rename = "path")]
4037 path: Strict<NamespacePath>,
4038 #[serde(rename = "resource")]
4039 #[serde(default)]
4040 resource: Strict<Option<ResourceState>>,
4041 }
4042 let wire = __Wire::deserialize(deserializer)?;
4043 Ok(Self {
4044 path: wire.path.0,
4045 resource: wire.resource.0,
4046 })
4047 }
4048}
4049
4050#[derive(Clone, Debug, PartialEq, Eq)]
4054pub enum ResourceChange {
4055 Advance(AdvanceResourceChange),
4057 Assert(AssertResourceChange),
4059 Create(CreateResourceChange),
4061 Retire(RetireResourceChange),
4063 Unknown { tag: String, value: Value },
4065}
4066impl Serialize for ResourceChange {
4067 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4068 match self {
4069 Self::Advance(value) => {
4070 let mut object = serde_json::Map::new();
4071 object.insert("type".into(), Value::String("advance".into()));
4072 object.insert(
4073 "advance".into(),
4074 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
4075 );
4076 Value::Object(object).serialize(serializer)
4077 }
4078 Self::Assert(value) => {
4079 let mut object = serde_json::Map::new();
4080 object.insert("type".into(), Value::String("assert".into()));
4081 object.insert(
4082 "assert".into(),
4083 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
4084 );
4085 Value::Object(object).serialize(serializer)
4086 }
4087 Self::Create(value) => {
4088 let mut object = serde_json::Map::new();
4089 object.insert("type".into(), Value::String("create".into()));
4090 object.insert(
4091 "create".into(),
4092 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
4093 );
4094 Value::Object(object).serialize(serializer)
4095 }
4096 Self::Retire(value) => {
4097 let mut object = serde_json::Map::new();
4098 object.insert("type".into(), Value::String("retire".into()));
4099 object.insert(
4100 "retire".into(),
4101 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
4102 );
4103 Value::Object(object).serialize(serializer)
4104 }
4105 Self::Unknown { tag, value } => {
4106 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
4107 return Err(serde::ser::Error::custom(
4108 "unknown union discriminator mismatch",
4109 ));
4110 }
4111 value.serialize(serializer)
4112 }
4113 }
4114 }
4115}
4116impl<'de> Deserialize<'de> for ResourceChange {
4117 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4118 let value = Value::deserialize(deserializer)?;
4119 let tag = value
4120 .get("type")
4121 .and_then(Value::as_str)
4122 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
4123 match tag {
4124 "advance" => Ok(Self::Advance(
4125 serde_json::from_value(
4126 value
4127 .get("advance")
4128 .cloned()
4129 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
4130 )
4131 .map_err(serde::de::Error::custom)?,
4132 )),
4133 "assert" => Ok(Self::Assert(
4134 serde_json::from_value(
4135 value
4136 .get("assert")
4137 .cloned()
4138 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
4139 )
4140 .map_err(serde::de::Error::custom)?,
4141 )),
4142 "create" => Ok(Self::Create(
4143 serde_json::from_value(
4144 value
4145 .get("create")
4146 .cloned()
4147 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
4148 )
4149 .map_err(serde::de::Error::custom)?,
4150 )),
4151 "retire" => Ok(Self::Retire(
4152 serde_json::from_value(
4153 value
4154 .get("retire")
4155 .cloned()
4156 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
4157 )
4158 .map_err(serde::de::Error::custom)?,
4159 )),
4160 tag => Ok(Self::Unknown {
4161 tag: tag.to_owned(),
4162 value,
4163 }),
4164 }
4165 }
4166}
4167impl<'de> DeserializeStrict<'de> for ResourceChange {
4168 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4169 #[derive(Deserialize)]
4170 enum __Tag0 {
4171 #[serde(rename = "advance")]
4172 Value,
4173 }
4174 #[derive(Deserialize)]
4175 #[serde(deny_unknown_fields)]
4176 struct __Arm0 {
4177 #[serde(rename = "type")]
4178 _tag: __Tag0,
4179 #[serde(rename = "advance")]
4180 value: Strict<AdvanceResourceChange>,
4181 }
4182 #[derive(Deserialize)]
4183 enum __Tag1 {
4184 #[serde(rename = "assert")]
4185 Value,
4186 }
4187 #[derive(Deserialize)]
4188 #[serde(deny_unknown_fields)]
4189 struct __Arm1 {
4190 #[serde(rename = "type")]
4191 _tag: __Tag1,
4192 #[serde(rename = "assert")]
4193 value: Strict<AssertResourceChange>,
4194 }
4195 #[derive(Deserialize)]
4196 enum __Tag2 {
4197 #[serde(rename = "create")]
4198 Value,
4199 }
4200 #[derive(Deserialize)]
4201 #[serde(deny_unknown_fields)]
4202 struct __Arm2 {
4203 #[serde(rename = "type")]
4204 _tag: __Tag2,
4205 #[serde(rename = "create")]
4206 value: Strict<CreateResourceChange>,
4207 }
4208 #[derive(Deserialize)]
4209 enum __Tag3 {
4210 #[serde(rename = "retire")]
4211 Value,
4212 }
4213 #[derive(Deserialize)]
4214 #[serde(deny_unknown_fields)]
4215 struct __Arm3 {
4216 #[serde(rename = "type")]
4217 _tag: __Tag3,
4218 #[serde(rename = "retire")]
4219 value: Strict<RetireResourceChange>,
4220 }
4221 #[derive(Deserialize)]
4222 #[serde(untagged)]
4223 enum __Known {
4224 Advance(Box<__Arm0>),
4225 Assert(Box<__Arm1>),
4226 Create(Box<__Arm2>),
4227 Retire(Box<__Arm3>),
4228 }
4229 Ok(match __Known::deserialize(deserializer)? {
4230 __Known::Advance(arm) => Self::Advance(arm.value.0),
4231 __Known::Assert(arm) => Self::Assert(arm.value.0),
4232 __Known::Create(arm) => Self::Create(arm.value.0),
4233 __Known::Retire(arm) => Self::Retire(arm.value.0),
4234 })
4235 }
4236}
4237
4238#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4240pub struct ResourceConflict {
4241 #[serde(rename = "current")]
4243 #[serde(default, skip_serializing_if = "Option::is_none")]
4244 pub current: Option<VersionId>,
4245 #[serde(rename = "expected")]
4247 #[serde(default, skip_serializing_if = "Option::is_none")]
4248 pub expected: Option<VersionId>,
4249 #[serde(rename = "resourceId")]
4251 pub resource_id: ResourceId,
4252}
4253impl<'de> DeserializeStrict<'de> for ResourceConflict {
4254 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4255 #[derive(Deserialize)]
4256 #[serde(deny_unknown_fields)]
4257 struct __Wire {
4258 #[serde(rename = "current")]
4259 #[serde(default)]
4260 current: Strict<Option<VersionId>>,
4261 #[serde(rename = "expected")]
4262 #[serde(default)]
4263 expected: Strict<Option<VersionId>>,
4264 #[serde(rename = "resourceId")]
4265 resource_id: Strict<ResourceId>,
4266 }
4267 let wire = __Wire::deserialize(deserializer)?;
4268 Ok(Self {
4269 current: wire.current.0,
4270 expected: wire.expected.0,
4271 resource_id: wire.resource_id.0,
4272 })
4273 }
4274}
4275
4276#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4278pub struct ResourceConstraint {
4279 #[serde(rename = "resourceId")]
4281 pub resource_id: ResourceId,
4282}
4283impl<'de> DeserializeStrict<'de> for ResourceConstraint {
4284 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4285 #[derive(Deserialize)]
4286 #[serde(deny_unknown_fields)]
4287 struct __Wire {
4288 #[serde(rename = "resourceId")]
4289 resource_id: Strict<ResourceId>,
4290 }
4291 let wire = __Wire::deserialize(deserializer)?;
4292 Ok(Self {
4293 resource_id: wire.resource_id.0,
4294 })
4295 }
4296}
4297
4298#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4302pub struct ResourceDescriptor {
4303 #[serde(rename = "kind")]
4305 pub kind: ResourceKind,
4306 #[serde(rename = "namespaceManaged")]
4308 pub namespace_managed: bool,
4309 #[serde(rename = "namespaceRoot")]
4311 #[serde(default, skip_serializing_if = "Option::is_none")]
4312 pub namespace_root: Option<ResourceId>,
4313 #[serde(rename = "resourceId")]
4315 pub resource_id: ResourceId,
4316 #[serde(rename = "service")]
4318 pub service: ResourceServiceId,
4319}
4320impl<'de> DeserializeStrict<'de> for ResourceDescriptor {
4321 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4322 #[derive(Deserialize)]
4323 #[serde(deny_unknown_fields)]
4324 struct __Wire {
4325 #[serde(rename = "kind")]
4326 kind: Strict<ResourceKind>,
4327 #[serde(rename = "namespaceManaged")]
4328 namespace_managed: Strict<bool>,
4329 #[serde(rename = "namespaceRoot")]
4330 #[serde(default)]
4331 namespace_root: Strict<Option<ResourceId>>,
4332 #[serde(rename = "resourceId")]
4333 resource_id: Strict<ResourceId>,
4334 #[serde(rename = "service")]
4335 service: Strict<ResourceServiceId>,
4336 }
4337 let wire = __Wire::deserialize(deserializer)?;
4338 Ok(Self {
4339 kind: wire.kind.0,
4340 namespace_managed: wire.namespace_managed.0,
4341 namespace_root: wire.namespace_root.0,
4342 resource_id: wire.resource_id.0,
4343 service: wire.service.0,
4344 })
4345 }
4346}
4347
4348#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4350#[serde(transparent)]
4351pub struct ResourceId(pub Uuid);
4352impl std::fmt::Display for ResourceId {
4353 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4354 self.0.fmt(formatter)
4355 }
4356}
4357impl<'de> DeserializeStrict<'de> for ResourceId {
4358 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4359 Ok(Self(Strict::<Uuid>::deserialize(deserializer)?.0))
4360 }
4361}
4362
4363#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4366#[serde(transparent)]
4367pub struct ResourceKind(pub String);
4368impl std::fmt::Display for ResourceKind {
4369 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4370 self.0.fmt(formatter)
4371 }
4372}
4373impl<'de> DeserializeStrict<'de> for ResourceKind {
4374 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4375 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
4376 }
4377}
4378
4379#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4381pub struct ResourceMergeConflict {
4382 #[serde(rename = "base")]
4384 #[serde(default, skip_serializing_if = "Option::is_none")]
4385 pub base: Option<VersionId>,
4386 #[serde(rename = "descriptor")]
4388 pub descriptor: ResourceDescriptor,
4389 #[serde(rename = "ours")]
4391 #[serde(default, skip_serializing_if = "Option::is_none")]
4392 pub ours: Option<VersionId>,
4393 #[serde(rename = "resourceId")]
4395 pub resource_id: ResourceId,
4396 #[serde(rename = "theirs")]
4398 #[serde(default, skip_serializing_if = "Option::is_none")]
4399 pub theirs: Option<VersionId>,
4400}
4401impl<'de> DeserializeStrict<'de> for ResourceMergeConflict {
4402 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4403 #[derive(Deserialize)]
4404 #[serde(deny_unknown_fields)]
4405 struct __Wire {
4406 #[serde(rename = "base")]
4407 #[serde(default)]
4408 base: Strict<Option<VersionId>>,
4409 #[serde(rename = "descriptor")]
4410 descriptor: Strict<ResourceDescriptor>,
4411 #[serde(rename = "ours")]
4412 #[serde(default)]
4413 ours: Strict<Option<VersionId>>,
4414 #[serde(rename = "resourceId")]
4415 resource_id: Strict<ResourceId>,
4416 #[serde(rename = "theirs")]
4417 #[serde(default)]
4418 theirs: Strict<Option<VersionId>>,
4419 }
4420 let wire = __Wire::deserialize(deserializer)?;
4421 Ok(Self {
4422 base: wire.base.0,
4423 descriptor: wire.descriptor.0,
4424 ours: wire.ours.0,
4425 resource_id: wire.resource_id.0,
4426 theirs: wire.theirs.0,
4427 })
4428 }
4429}
4430
4431#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4435pub struct ResourceMergeResolution {
4436 #[serde(rename = "base")]
4438 pub base: VersionId,
4439 #[serde(rename = "ours")]
4441 pub ours: VersionId,
4442 #[serde(rename = "replacement")]
4444 pub replacement: VersionId,
4445 #[serde(rename = "resourceId")]
4447 pub resource_id: ResourceId,
4448 #[serde(rename = "theirs")]
4450 pub theirs: VersionId,
4451}
4452impl<'de> DeserializeStrict<'de> for ResourceMergeResolution {
4453 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4454 #[derive(Deserialize)]
4455 #[serde(deny_unknown_fields)]
4456 struct __Wire {
4457 #[serde(rename = "base")]
4458 base: Strict<VersionId>,
4459 #[serde(rename = "ours")]
4460 ours: Strict<VersionId>,
4461 #[serde(rename = "replacement")]
4462 replacement: Strict<VersionId>,
4463 #[serde(rename = "resourceId")]
4464 resource_id: Strict<ResourceId>,
4465 #[serde(rename = "theirs")]
4466 theirs: Strict<VersionId>,
4467 }
4468 let wire = __Wire::deserialize(deserializer)?;
4469 Ok(Self {
4470 base: wire.base.0,
4471 ours: wire.ours.0,
4472 replacement: wire.replacement.0,
4473 resource_id: wire.resource_id.0,
4474 theirs: wire.theirs.0,
4475 })
4476 }
4477}
4478
4479#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4481pub struct ResourceParent {
4482 #[serde(rename = "resourceId")]
4484 pub resource_id: ResourceId,
4485}
4486impl<'de> DeserializeStrict<'de> for ResourceParent {
4487 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4488 #[derive(Deserialize)]
4489 #[serde(deny_unknown_fields)]
4490 struct __Wire {
4491 #[serde(rename = "resourceId")]
4492 resource_id: Strict<ResourceId>,
4493 }
4494 let wire = __Wire::deserialize(deserializer)?;
4495 Ok(Self {
4496 resource_id: wire.resource_id.0,
4497 })
4498 }
4499}
4500
4501#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4503#[serde(transparent)]
4504pub struct ResourceServiceId(pub String);
4505impl std::fmt::Display for ResourceServiceId {
4506 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4507 self.0.fmt(formatter)
4508 }
4509}
4510impl<'de> DeserializeStrict<'de> for ResourceServiceId {
4511 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4512 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
4513 }
4514}
4515
4516#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4518pub struct ResourceState {
4519 #[serde(rename = "descriptor")]
4521 pub descriptor: ResourceDescriptor,
4522 #[serde(rename = "versionId")]
4524 pub version_id: VersionId,
4525}
4526impl<'de> DeserializeStrict<'de> for ResourceState {
4527 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4528 #[derive(Deserialize)]
4529 #[serde(deny_unknown_fields)]
4530 struct __Wire {
4531 #[serde(rename = "descriptor")]
4532 descriptor: Strict<ResourceDescriptor>,
4533 #[serde(rename = "versionId")]
4534 version_id: Strict<VersionId>,
4535 }
4536 let wire = __Wire::deserialize(deserializer)?;
4537 Ok(Self {
4538 descriptor: wire.descriptor.0,
4539 version_id: wire.version_id.0,
4540 })
4541 }
4542}
4543
4544#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4547pub struct RetireResourceChange {
4548 #[serde(rename = "expected")]
4550 pub expected: VersionId,
4551 #[serde(rename = "resourceId")]
4553 pub resource_id: ResourceId,
4554}
4555impl<'de> DeserializeStrict<'de> for RetireResourceChange {
4556 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4557 #[derive(Deserialize)]
4558 #[serde(deny_unknown_fields)]
4559 struct __Wire {
4560 #[serde(rename = "expected")]
4561 expected: Strict<VersionId>,
4562 #[serde(rename = "resourceId")]
4563 resource_id: Strict<ResourceId>,
4564 }
4565 let wire = __Wire::deserialize(deserializer)?;
4566 Ok(Self {
4567 expected: wire.expected.0,
4568 resource_id: wire.resource_id.0,
4569 })
4570 }
4571}
4572
4573#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4575pub struct RetiredTargetConstraint {
4576 #[serde(rename = "name")]
4578 pub name: NamespaceSegment,
4579 #[serde(rename = "parent")]
4581 pub parent: NamespaceParent,
4582 #[serde(rename = "resourceId")]
4584 pub resource_id: ResourceId,
4585}
4586impl<'de> DeserializeStrict<'de> for RetiredTargetConstraint {
4587 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4588 #[derive(Deserialize)]
4589 #[serde(deny_unknown_fields)]
4590 struct __Wire {
4591 #[serde(rename = "name")]
4592 name: Strict<NamespaceSegment>,
4593 #[serde(rename = "parent")]
4594 parent: Strict<NamespaceParent>,
4595 #[serde(rename = "resourceId")]
4596 resource_id: Strict<ResourceId>,
4597 }
4598 let wire = __Wire::deserialize(deserializer)?;
4599 Ok(Self {
4600 name: wire.name.0,
4601 parent: wire.parent.0,
4602 resource_id: wire.resource_id.0,
4603 })
4604 }
4605}
4606
4607#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4609pub struct RevertConflict {
4610 #[serde(rename = "constraints")]
4612 pub constraints: Vec<NamespaceConstraintConflict>,
4613 #[serde(rename = "currentCommitId")]
4615 pub current_commit_id: CommitId,
4616 #[serde(rename = "namespace")]
4618 pub namespace: Vec<NamespaceConflict>,
4619 #[serde(rename = "resources")]
4621 pub resources: Vec<ResourceConflict>,
4622 #[serde(rename = "revertedCommitId")]
4624 pub reverted_commit_id: CommitId,
4625}
4626impl<'de> DeserializeStrict<'de> for RevertConflict {
4627 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4628 #[derive(Deserialize)]
4629 #[serde(deny_unknown_fields)]
4630 struct __Wire {
4631 #[serde(rename = "constraints")]
4632 constraints: Strict<Vec<NamespaceConstraintConflict>>,
4633 #[serde(rename = "currentCommitId")]
4634 current_commit_id: Strict<CommitId>,
4635 #[serde(rename = "namespace")]
4636 namespace: Strict<Vec<NamespaceConflict>>,
4637 #[serde(rename = "resources")]
4638 resources: Strict<Vec<ResourceConflict>>,
4639 #[serde(rename = "revertedCommitId")]
4640 reverted_commit_id: Strict<CommitId>,
4641 }
4642 let wire = __Wire::deserialize(deserializer)?;
4643 Ok(Self {
4644 constraints: wire.constraints.0,
4645 current_commit_id: wire.current_commit_id.0,
4646 namespace: wire.namespace.0,
4647 resources: wire.resources.0,
4648 reverted_commit_id: wire.reverted_commit_id.0,
4649 })
4650 }
4651}
4652
4653#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4658pub struct RevertRequest {
4659 #[serde(rename = "commitId")]
4661 pub commit_id: CommitId,
4662 #[serde(rename = "dryRun")]
4664 #[serde(default, skip_serializing_if = "Option::is_none")]
4665 pub dry_run: Option<bool>,
4666 #[serde(rename = "expectedTargetCommitId")]
4668 #[serde(default, skip_serializing_if = "Option::is_none")]
4669 pub expected_target_commit_id: Option<CommitId>,
4670 #[serde(rename = "idempotencyKey")]
4672 pub idempotency_key: IdempotencyKey,
4673 #[serde(rename = "mainlineParent")]
4675 #[serde(default, skip_serializing_if = "Option::is_none")]
4676 pub mainline_parent: Option<u32>,
4677 #[serde(rename = "message")]
4679 #[serde(default, skip_serializing_if = "Option::is_none")]
4680 pub message: Option<String>,
4681 #[serde(rename = "targetBranchId")]
4683 pub target_branch_id: BranchId,
4684 #[serde(rename = "transactionId")]
4686 pub transaction_id: TransactionId,
4687}
4688impl<'de> DeserializeStrict<'de> for RevertRequest {
4689 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4690 #[derive(Deserialize)]
4691 #[serde(deny_unknown_fields)]
4692 struct __Wire {
4693 #[serde(rename = "commitId")]
4694 commit_id: Strict<CommitId>,
4695 #[serde(rename = "dryRun")]
4696 #[serde(default)]
4697 dry_run: Strict<Option<bool>>,
4698 #[serde(rename = "expectedTargetCommitId")]
4699 #[serde(default)]
4700 expected_target_commit_id: Strict<Option<CommitId>>,
4701 #[serde(rename = "idempotencyKey")]
4702 idempotency_key: Strict<IdempotencyKey>,
4703 #[serde(rename = "mainlineParent")]
4704 #[serde(default)]
4705 mainline_parent: Strict<Option<u32>>,
4706 #[serde(rename = "message")]
4707 #[serde(default)]
4708 message: Strict<Option<String>>,
4709 #[serde(rename = "targetBranchId")]
4710 target_branch_id: Strict<BranchId>,
4711 #[serde(rename = "transactionId")]
4712 transaction_id: Strict<TransactionId>,
4713 }
4714 let wire = __Wire::deserialize(deserializer)?;
4715 Ok(Self {
4716 commit_id: wire.commit_id.0,
4717 dry_run: wire.dry_run.0,
4718 expected_target_commit_id: wire.expected_target_commit_id.0,
4719 idempotency_key: wire.idempotency_key.0,
4720 mainline_parent: wire.mainline_parent.0,
4721 message: wire.message.0,
4722 target_branch_id: wire.target_branch_id.0,
4723 transaction_id: wire.transaction_id.0,
4724 })
4725 }
4726}
4727
4728#[derive(Clone, Debug, PartialEq, Eq)]
4730pub enum RevertResponse {
4731 Conflict(RevertConflict),
4733 Published(Reverted),
4735 Revertible(Revertible),
4737 Unknown { tag: String, value: Value },
4739}
4740impl Serialize for RevertResponse {
4741 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4742 match self {
4743 Self::Conflict(value) => {
4744 let mut object = serde_json::Map::new();
4745 object.insert("type".into(), Value::String("conflict".into()));
4746 object.insert(
4747 "conflict".into(),
4748 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
4749 );
4750 Value::Object(object).serialize(serializer)
4751 }
4752 Self::Published(value) => {
4753 let mut object = serde_json::Map::new();
4754 object.insert("type".into(), Value::String("published".into()));
4755 object.insert(
4756 "published".into(),
4757 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
4758 );
4759 Value::Object(object).serialize(serializer)
4760 }
4761 Self::Revertible(value) => {
4762 let mut object = serde_json::Map::new();
4763 object.insert("type".into(), Value::String("revertible".into()));
4764 object.insert(
4765 "revertible".into(),
4766 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
4767 );
4768 Value::Object(object).serialize(serializer)
4769 }
4770 Self::Unknown { tag, value } => {
4771 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
4772 return Err(serde::ser::Error::custom(
4773 "unknown union discriminator mismatch",
4774 ));
4775 }
4776 value.serialize(serializer)
4777 }
4778 }
4779 }
4780}
4781impl<'de> Deserialize<'de> for RevertResponse {
4782 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4783 let value = Value::deserialize(deserializer)?;
4784 let tag = value
4785 .get("type")
4786 .and_then(Value::as_str)
4787 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
4788 match tag {
4789 "conflict" => Ok(Self::Conflict(
4790 serde_json::from_value(
4791 value
4792 .get("conflict")
4793 .cloned()
4794 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
4795 )
4796 .map_err(serde::de::Error::custom)?,
4797 )),
4798 "published" => Ok(Self::Published(
4799 serde_json::from_value(
4800 value
4801 .get("published")
4802 .cloned()
4803 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
4804 )
4805 .map_err(serde::de::Error::custom)?,
4806 )),
4807 "revertible" => Ok(Self::Revertible(
4808 serde_json::from_value(
4809 value
4810 .get("revertible")
4811 .cloned()
4812 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
4813 )
4814 .map_err(serde::de::Error::custom)?,
4815 )),
4816 tag => Ok(Self::Unknown {
4817 tag: tag.to_owned(),
4818 value,
4819 }),
4820 }
4821 }
4822}
4823impl<'de> DeserializeStrict<'de> for RevertResponse {
4824 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4825 #[derive(Deserialize)]
4826 enum __Tag0 {
4827 #[serde(rename = "conflict")]
4828 Value,
4829 }
4830 #[derive(Deserialize)]
4831 #[serde(deny_unknown_fields)]
4832 struct __Arm0 {
4833 #[serde(rename = "type")]
4834 _tag: __Tag0,
4835 #[serde(rename = "conflict")]
4836 value: Strict<RevertConflict>,
4837 }
4838 #[derive(Deserialize)]
4839 enum __Tag1 {
4840 #[serde(rename = "published")]
4841 Value,
4842 }
4843 #[derive(Deserialize)]
4844 #[serde(deny_unknown_fields)]
4845 struct __Arm1 {
4846 #[serde(rename = "type")]
4847 _tag: __Tag1,
4848 #[serde(rename = "published")]
4849 value: Strict<Reverted>,
4850 }
4851 #[derive(Deserialize)]
4852 enum __Tag2 {
4853 #[serde(rename = "revertible")]
4854 Value,
4855 }
4856 #[derive(Deserialize)]
4857 #[serde(deny_unknown_fields)]
4858 struct __Arm2 {
4859 #[serde(rename = "type")]
4860 _tag: __Tag2,
4861 #[serde(rename = "revertible")]
4862 value: Strict<Revertible>,
4863 }
4864 #[derive(Deserialize)]
4865 #[serde(untagged)]
4866 enum __Known {
4867 Conflict(Box<__Arm0>),
4868 Published(Box<__Arm1>),
4869 Revertible(Box<__Arm2>),
4870 }
4871 Ok(match __Known::deserialize(deserializer)? {
4872 __Known::Conflict(arm) => Self::Conflict(arm.value.0),
4873 __Known::Published(arm) => Self::Published(arm.value.0),
4874 __Known::Revertible(arm) => Self::Revertible(arm.value.0),
4875 })
4876 }
4877}
4878
4879#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4881pub struct Reverted {
4882 #[serde(rename = "commitId")]
4884 pub commit_id: CommitId,
4885 #[serde(rename = "parentCommitId")]
4887 pub parent_commit_id: CommitId,
4888 #[serde(rename = "revertedCommitId")]
4890 pub reverted_commit_id: CommitId,
4891 #[serde(rename = "targetCommitId")]
4893 pub target_commit_id: CommitId,
4894}
4895impl<'de> DeserializeStrict<'de> for Reverted {
4896 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4897 #[derive(Deserialize)]
4898 #[serde(deny_unknown_fields)]
4899 struct __Wire {
4900 #[serde(rename = "commitId")]
4901 commit_id: Strict<CommitId>,
4902 #[serde(rename = "parentCommitId")]
4903 parent_commit_id: Strict<CommitId>,
4904 #[serde(rename = "revertedCommitId")]
4905 reverted_commit_id: Strict<CommitId>,
4906 #[serde(rename = "targetCommitId")]
4907 target_commit_id: Strict<CommitId>,
4908 }
4909 let wire = __Wire::deserialize(deserializer)?;
4910 Ok(Self {
4911 commit_id: wire.commit_id.0,
4912 parent_commit_id: wire.parent_commit_id.0,
4913 reverted_commit_id: wire.reverted_commit_id.0,
4914 target_commit_id: wire.target_commit_id.0,
4915 })
4916 }
4917}
4918
4919#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4921pub struct Revertible {
4922 #[serde(rename = "namespaceChangeCount")]
4924 pub namespace_change_count: u32,
4925 #[serde(rename = "parentCommitId")]
4927 pub parent_commit_id: CommitId,
4928 #[serde(rename = "resourceChangeCount")]
4930 pub resource_change_count: u32,
4931 #[serde(rename = "revertedCommitId")]
4933 pub reverted_commit_id: CommitId,
4934 #[serde(rename = "targetCommitId")]
4936 pub target_commit_id: CommitId,
4937}
4938impl<'de> DeserializeStrict<'de> for Revertible {
4939 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4940 #[derive(Deserialize)]
4941 #[serde(deny_unknown_fields)]
4942 struct __Wire {
4943 #[serde(rename = "namespaceChangeCount")]
4944 namespace_change_count: Strict<u32>,
4945 #[serde(rename = "parentCommitId")]
4946 parent_commit_id: Strict<CommitId>,
4947 #[serde(rename = "resourceChangeCount")]
4948 resource_change_count: Strict<u32>,
4949 #[serde(rename = "revertedCommitId")]
4950 reverted_commit_id: Strict<CommitId>,
4951 #[serde(rename = "targetCommitId")]
4952 target_commit_id: Strict<CommitId>,
4953 }
4954 let wire = __Wire::deserialize(deserializer)?;
4955 Ok(Self {
4956 namespace_change_count: wire.namespace_change_count.0,
4957 parent_commit_id: wire.parent_commit_id.0,
4958 resource_change_count: wire.resource_change_count.0,
4959 reverted_commit_id: wire.reverted_commit_id.0,
4960 target_commit_id: wire.target_commit_id.0,
4961 })
4962 }
4963}
4964
4965#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4967pub struct RootConstraint {
4968 #[serde(rename = "namespaceRoot")]
4970 pub namespace_root: ResourceId,
4971 #[serde(rename = "resourceId")]
4973 pub resource_id: ResourceId,
4974}
4975impl<'de> DeserializeStrict<'de> for RootConstraint {
4976 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4977 #[derive(Deserialize)]
4978 #[serde(deny_unknown_fields)]
4979 struct __Wire {
4980 #[serde(rename = "namespaceRoot")]
4981 namespace_root: Strict<ResourceId>,
4982 #[serde(rename = "resourceId")]
4983 resource_id: Strict<ResourceId>,
4984 }
4985 let wire = __Wire::deserialize(deserializer)?;
4986 Ok(Self {
4987 namespace_root: wire.namespace_root.0,
4988 resource_id: wire.resource_id.0,
4989 })
4990 }
4991}
4992
4993#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4995pub struct StateNamespaceEntry {
4996 #[serde(rename = "name")]
4998 pub name: NamespaceSegment,
4999 #[serde(rename = "parent")]
5001 pub parent: NamespaceParent,
5002 #[serde(rename = "resource")]
5004 pub resource: ResourceState,
5005}
5006impl<'de> DeserializeStrict<'de> for StateNamespaceEntry {
5007 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5008 #[derive(Deserialize)]
5009 #[serde(deny_unknown_fields)]
5010 struct __Wire {
5011 #[serde(rename = "name")]
5012 name: Strict<NamespaceSegment>,
5013 #[serde(rename = "parent")]
5014 parent: Strict<NamespaceParent>,
5015 #[serde(rename = "resource")]
5016 resource: Strict<ResourceState>,
5017 }
5018 let wire = __Wire::deserialize(deserializer)?;
5019 Ok(Self {
5020 name: wire.name.0,
5021 parent: wire.parent.0,
5022 resource: wire.resource.0,
5023 })
5024 }
5025}
5026
5027#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5033pub struct StatePage {
5034 #[serde(rename = "commitId")]
5036 pub commit_id: CommitId,
5037 #[serde(rename = "namespace")]
5039 pub namespace: Vec<StateNamespaceEntry>,
5040 #[serde(rename = "nextPageToken")]
5042 #[serde(default, skip_serializing_if = "Option::is_none")]
5043 pub next_page_token: Option<PageToken>,
5044 #[serde(rename = "resources")]
5046 pub resources: Vec<ResourceState>,
5047}
5048impl<'de> DeserializeStrict<'de> for StatePage {
5049 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5050 #[derive(Deserialize)]
5051 #[serde(deny_unknown_fields)]
5052 struct __Wire {
5053 #[serde(rename = "commitId")]
5054 commit_id: Strict<CommitId>,
5055 #[serde(rename = "namespace")]
5056 namespace: Strict<Vec<StateNamespaceEntry>>,
5057 #[serde(rename = "nextPageToken")]
5058 #[serde(default)]
5059 next_page_token: Strict<Option<PageToken>>,
5060 #[serde(rename = "resources")]
5061 resources: Strict<Vec<ResourceState>>,
5062 }
5063 let wire = __Wire::deserialize(deserializer)?;
5064 Ok(Self {
5065 commit_id: wire.commit_id.0,
5066 namespace: wire.namespace.0,
5067 next_page_token: wire.next_page_token.0,
5068 resources: wire.resources.0,
5069 })
5070 }
5071}
5072
5073#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5075pub struct Tag {
5076 #[serde(rename = "actor")]
5078 pub actor: ActorId,
5079 #[serde(rename = "commitId")]
5081 pub commit_id: CommitId,
5082 #[serde(rename = "createdAtMicros")]
5084 pub created_at_micros: SafeLong,
5085 #[serde(rename = "name")]
5087 pub name: TagName,
5088}
5089impl<'de> DeserializeStrict<'de> for Tag {
5090 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5091 #[derive(Deserialize)]
5092 #[serde(deny_unknown_fields)]
5093 struct __Wire {
5094 #[serde(rename = "actor")]
5095 actor: Strict<ActorId>,
5096 #[serde(rename = "commitId")]
5097 commit_id: Strict<CommitId>,
5098 #[serde(rename = "createdAtMicros")]
5099 created_at_micros: Strict<SafeLong>,
5100 #[serde(rename = "name")]
5101 name: Strict<TagName>,
5102 }
5103 let wire = __Wire::deserialize(deserializer)?;
5104 Ok(Self {
5105 actor: wire.actor.0,
5106 commit_id: wire.commit_id.0,
5107 created_at_micros: wire.created_at_micros.0,
5108 name: wire.name.0,
5109 })
5110 }
5111}
5112
5113#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5115#[serde(transparent)]
5116pub struct TagName(pub String);
5117impl std::fmt::Display for TagName {
5118 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5119 self.0.fmt(formatter)
5120 }
5121}
5122impl<'de> DeserializeStrict<'de> for TagName {
5123 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5124 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
5125 }
5126}
5127
5128#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5130pub struct TagTarget {
5131 #[serde(rename = "tag")]
5133 pub tag: TagName,
5134}
5135impl<'de> DeserializeStrict<'de> for TagTarget {
5136 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5137 #[derive(Deserialize)]
5138 #[serde(deny_unknown_fields)]
5139 struct __Wire {
5140 #[serde(rename = "tag")]
5141 tag: Strict<TagName>,
5142 }
5143 let wire = __Wire::deserialize(deserializer)?;
5144 Ok(Self { tag: wire.tag.0 })
5145 }
5146}
5147
5148#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5151#[serde(transparent)]
5152pub struct TransactionId(pub Uuid);
5153impl std::fmt::Display for TransactionId {
5154 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5155 self.0.fmt(formatter)
5156 }
5157}
5158impl<'de> DeserializeStrict<'de> for TransactionId {
5159 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5160 Ok(Self(Strict::<Uuid>::deserialize(deserializer)?.0))
5161 }
5162}
5163
5164#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5166pub struct UnbindNamespaceChange {
5167 #[serde(rename = "expected")]
5169 pub expected: ResourceId,
5170 #[serde(rename = "name")]
5172 pub name: NamespaceSegment,
5173 #[serde(rename = "parent")]
5175 pub parent: NamespaceParent,
5176}
5177impl<'de> DeserializeStrict<'de> for UnbindNamespaceChange {
5178 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5179 #[derive(Deserialize)]
5180 #[serde(deny_unknown_fields)]
5181 struct __Wire {
5182 #[serde(rename = "expected")]
5183 expected: Strict<ResourceId>,
5184 #[serde(rename = "name")]
5185 name: Strict<NamespaceSegment>,
5186 #[serde(rename = "parent")]
5187 parent: Strict<NamespaceParent>,
5188 }
5189 let wire = __Wire::deserialize(deserializer)?;
5190 Ok(Self {
5191 expected: wire.expected.0,
5192 name: wire.name.0,
5193 parent: wire.parent.0,
5194 })
5195 }
5196}
5197
5198#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5200#[serde(transparent)]
5201pub struct VersionId(pub Uuid);
5202impl std::fmt::Display for VersionId {
5203 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5204 self.0.fmt(formatter)
5205 }
5206}
5207impl<'de> DeserializeStrict<'de> for VersionId {
5208 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5209 Ok(Self(Strict::<Uuid>::deserialize(deserializer)?.0))
5210 }
5211}
5212
5213#[derive(Clone, Debug, PartialEq, Eq)]
5215pub enum CatalogError {
5216 AmbiguousMergeBase { count: u32 },
5218 BranchNotFound { branch: String },
5220 CatalogLimitExceeded {
5222 maximum_entries: SafeUnsignedLong,
5223 namespace_count: SafeUnsignedLong,
5224 resource_count: SafeUnsignedLong,
5225 },
5226 CommitNotFound { commit_id: String },
5228 CommitTraversalLimitExceeded { maximum_commits: SafeUnsignedLong },
5230 IdempotencyKeyReused {},
5232 InvalidArgument { reason: String },
5234 InvalidPageToken { reason: String },
5236 NameConflict { name: String },
5238 NotFound { resource: String },
5240 OperationInputMismatch { operation_id: String },
5242 ResourceNotFound { resource_id: String },
5244 StaleHead { current: String, expected: String },
5246 TagNotFound { tag: String },
5248 TransactionBaseNotAncestor { base: String, head: String },
5250}
5251impl CatalogError {
5252 pub fn status(&self) -> u16 {
5254 match self {
5255 Self::AmbiguousMergeBase { .. } => 412,
5256 Self::BranchNotFound { .. } => 404,
5257 Self::CatalogLimitExceeded { .. } => 412,
5258 Self::CommitNotFound { .. } => 404,
5259 Self::CommitTraversalLimitExceeded { .. } => 412,
5260 Self::IdempotencyKeyReused { .. } => 409,
5261 Self::InvalidArgument { .. } => 400,
5262 Self::InvalidPageToken { .. } => 400,
5263 Self::NameConflict { .. } => 409,
5264 Self::NotFound { .. } => 404,
5265 Self::OperationInputMismatch { .. } => 409,
5266 Self::ResourceNotFound { .. } => 404,
5267 Self::StaleHead { .. } => 409,
5268 Self::TagNotFound { .. } => 404,
5269 Self::TransactionBaseNotAncestor { .. } => 412,
5270 }
5271 }
5272 pub fn envelope(&self, instance: String) -> ErrorEnvelope {
5274 match self {
5275 Self::AmbiguousMergeBase { count } => {
5276 let mut envelope = ErrorEnvelope::new(
5277 "FAILED_PRECONDITION",
5278 "Catalog:AmbiguousMergeBase",
5279 instance,
5280 );
5281 envelope
5282 .parameters
5283 .insert("count".into(), count.to_string());
5284 envelope
5285 }
5286 Self::BranchNotFound { branch } => {
5287 let mut envelope =
5288 ErrorEnvelope::new("NOT_FOUND", "Catalog:BranchNotFound", instance);
5289 envelope
5290 .parameters
5291 .insert("branch".into(), branch.to_string());
5292 envelope
5293 }
5294 Self::CatalogLimitExceeded {
5295 maximum_entries,
5296 namespace_count,
5297 resource_count,
5298 } => {
5299 let mut envelope = ErrorEnvelope::new(
5300 "FAILED_PRECONDITION",
5301 "Catalog:CatalogLimitExceeded",
5302 instance,
5303 );
5304 envelope
5305 .parameters
5306 .insert("maximumEntries".into(), maximum_entries.to_string());
5307 envelope
5308 .parameters
5309 .insert("namespaceCount".into(), namespace_count.to_string());
5310 envelope
5311 .parameters
5312 .insert("resourceCount".into(), resource_count.to_string());
5313 envelope
5314 }
5315 Self::CommitNotFound { commit_id } => {
5316 let mut envelope =
5317 ErrorEnvelope::new("NOT_FOUND", "Catalog:CommitNotFound", instance);
5318 envelope
5319 .parameters
5320 .insert("commitId".into(), commit_id.to_string());
5321 envelope
5322 }
5323 Self::CommitTraversalLimitExceeded { maximum_commits } => {
5324 let mut envelope = ErrorEnvelope::new(
5325 "FAILED_PRECONDITION",
5326 "Catalog:CommitTraversalLimitExceeded",
5327 instance,
5328 );
5329 envelope
5330 .parameters
5331 .insert("maximumCommits".into(), maximum_commits.to_string());
5332 envelope
5333 }
5334 Self::IdempotencyKeyReused {} => {
5335 ErrorEnvelope::new("CONFLICT", "Catalog:IdempotencyKeyReused", instance)
5336 }
5337 Self::InvalidArgument { reason } => {
5338 let mut envelope =
5339 ErrorEnvelope::new("INVALID_ARGUMENT", "Catalog:InvalidArgument", instance);
5340 envelope
5341 .parameters
5342 .insert("reason".into(), reason.to_string());
5343 envelope
5344 }
5345 Self::InvalidPageToken { reason } => {
5346 let mut envelope =
5347 ErrorEnvelope::new("INVALID_ARGUMENT", "Catalog:InvalidPageToken", instance);
5348 envelope
5349 .parameters
5350 .insert("reason".into(), reason.to_string());
5351 envelope
5352 }
5353 Self::NameConflict { name } => {
5354 let mut envelope = ErrorEnvelope::new("CONFLICT", "Catalog:NameConflict", instance);
5355 envelope.parameters.insert("name".into(), name.to_string());
5356 envelope
5357 }
5358 Self::NotFound { resource } => {
5359 let mut envelope = ErrorEnvelope::new("NOT_FOUND", "Catalog:NotFound", instance);
5360 envelope
5361 .parameters
5362 .insert("resource".into(), resource.to_string());
5363 envelope
5364 }
5365 Self::OperationInputMismatch { operation_id } => {
5366 let mut envelope =
5367 ErrorEnvelope::new("CONFLICT", "Catalog:OperationInputMismatch", instance);
5368 envelope
5369 .parameters
5370 .insert("operationId".into(), operation_id.to_string());
5371 envelope
5372 }
5373 Self::ResourceNotFound { resource_id } => {
5374 let mut envelope =
5375 ErrorEnvelope::new("NOT_FOUND", "Catalog:ResourceNotFound", instance);
5376 envelope
5377 .parameters
5378 .insert("resourceId".into(), resource_id.to_string());
5379 envelope
5380 }
5381 Self::StaleHead { current, expected } => {
5382 let mut envelope = ErrorEnvelope::new("CONFLICT", "Catalog:StaleHead", instance);
5383 envelope
5384 .parameters
5385 .insert("current".into(), current.to_string());
5386 envelope
5387 .parameters
5388 .insert("expected".into(), expected.to_string());
5389 envelope
5390 }
5391 Self::TagNotFound { tag } => {
5392 let mut envelope = ErrorEnvelope::new("NOT_FOUND", "Catalog:TagNotFound", instance);
5393 envelope.parameters.insert("tag".into(), tag.to_string());
5394 envelope
5395 }
5396 Self::TransactionBaseNotAncestor { base, head } => {
5397 let mut envelope = ErrorEnvelope::new(
5398 "FAILED_PRECONDITION",
5399 "Catalog:TransactionBaseNotAncestor",
5400 instance,
5401 );
5402 envelope.parameters.insert("base".into(), base.to_string());
5403 envelope.parameters.insert("head".into(), head.to_string());
5404 envelope
5405 }
5406 }
5407 }
5408 pub fn decode_envelope(envelope: &ErrorEnvelope) -> Option<Self> {
5410 if envelope.error_instance_id.len() != 36
5411 || Uuid::parse_str(&envelope.error_instance_id).is_err()
5412 {
5413 return None;
5414 }
5415 match envelope.error_name.as_str() {
5416 "Catalog:AmbiguousMergeBase" => {
5417 if envelope.error_code != "FAILED_PRECONDITION" {
5418 return None;
5419 }
5420 let count = envelope.parameters.get("count")?.parse::<u32>().ok()?;
5421 Some(Self::AmbiguousMergeBase { count })
5422 }
5423 "Catalog:BranchNotFound" => {
5424 if envelope.error_code != "NOT_FOUND" {
5425 return None;
5426 }
5427 let branch = envelope.parameters.get("branch")?.clone();
5428 Some(Self::BranchNotFound { branch })
5429 }
5430 "Catalog:CatalogLimitExceeded" => {
5431 if envelope.error_code != "FAILED_PRECONDITION" {
5432 return None;
5433 }
5434 let maximum_entries = envelope
5435 .parameters
5436 .get("maximumEntries")?
5437 .parse::<SafeUnsignedLong>()
5438 .ok()?;
5439 let namespace_count = envelope
5440 .parameters
5441 .get("namespaceCount")?
5442 .parse::<SafeUnsignedLong>()
5443 .ok()?;
5444 let resource_count = envelope
5445 .parameters
5446 .get("resourceCount")?
5447 .parse::<SafeUnsignedLong>()
5448 .ok()?;
5449 Some(Self::CatalogLimitExceeded {
5450 maximum_entries,
5451 namespace_count,
5452 resource_count,
5453 })
5454 }
5455 "Catalog:CommitNotFound" => {
5456 if envelope.error_code != "NOT_FOUND" {
5457 return None;
5458 }
5459 let commit_id = envelope.parameters.get("commitId")?.clone();
5460 Some(Self::CommitNotFound { commit_id })
5461 }
5462 "Catalog:CommitTraversalLimitExceeded" => {
5463 if envelope.error_code != "FAILED_PRECONDITION" {
5464 return None;
5465 }
5466 let maximum_commits = envelope
5467 .parameters
5468 .get("maximumCommits")?
5469 .parse::<SafeUnsignedLong>()
5470 .ok()?;
5471 Some(Self::CommitTraversalLimitExceeded { maximum_commits })
5472 }
5473 "Catalog:IdempotencyKeyReused" => {
5474 if envelope.error_code != "CONFLICT" {
5475 return None;
5476 }
5477 Some(Self::IdempotencyKeyReused {})
5478 }
5479 "Catalog:InvalidArgument" => {
5480 if envelope.error_code != "INVALID_ARGUMENT" {
5481 return None;
5482 }
5483 let reason = envelope.parameters.get("reason")?.clone();
5484 Some(Self::InvalidArgument { reason })
5485 }
5486 "Catalog:InvalidPageToken" => {
5487 if envelope.error_code != "INVALID_ARGUMENT" {
5488 return None;
5489 }
5490 let reason = envelope.parameters.get("reason")?.clone();
5491 Some(Self::InvalidPageToken { reason })
5492 }
5493 "Catalog:NameConflict" => {
5494 if envelope.error_code != "CONFLICT" {
5495 return None;
5496 }
5497 let name = envelope.parameters.get("name")?.clone();
5498 Some(Self::NameConflict { name })
5499 }
5500 "Catalog:NotFound" => {
5501 if envelope.error_code != "NOT_FOUND" {
5502 return None;
5503 }
5504 let resource = envelope.parameters.get("resource")?.clone();
5505 Some(Self::NotFound { resource })
5506 }
5507 "Catalog:OperationInputMismatch" => {
5508 if envelope.error_code != "CONFLICT" {
5509 return None;
5510 }
5511 let operation_id = envelope.parameters.get("operationId")?.clone();
5512 Some(Self::OperationInputMismatch { operation_id })
5513 }
5514 "Catalog:ResourceNotFound" => {
5515 if envelope.error_code != "NOT_FOUND" {
5516 return None;
5517 }
5518 let resource_id = envelope.parameters.get("resourceId")?.clone();
5519 Some(Self::ResourceNotFound { resource_id })
5520 }
5521 "Catalog:StaleHead" => {
5522 if envelope.error_code != "CONFLICT" {
5523 return None;
5524 }
5525 let current = envelope.parameters.get("current")?.clone();
5526 let expected = envelope.parameters.get("expected")?.clone();
5527 Some(Self::StaleHead { current, expected })
5528 }
5529 "Catalog:TagNotFound" => {
5530 if envelope.error_code != "NOT_FOUND" {
5531 return None;
5532 }
5533 let tag = envelope.parameters.get("tag")?.clone();
5534 Some(Self::TagNotFound { tag })
5535 }
5536 "Catalog:TransactionBaseNotAncestor" => {
5537 if envelope.error_code != "FAILED_PRECONDITION" {
5538 return None;
5539 }
5540 let base = envelope.parameters.get("base")?.clone();
5541 let head = envelope.parameters.get("head")?.clone();
5542 Some(Self::TransactionBaseNotAncestor { base, head })
5543 }
5544 _ => None,
5545 }
5546 }
5547}
5548impl Display for CatalogError {
5549 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
5550 match self {
5551 Self::AmbiguousMergeBase { count } => {
5552 write!(formatter, "Catalog:AmbiguousMergeBase (count: {})", count)
5553 }
5554 Self::BranchNotFound { branch } => {
5555 write!(formatter, "Catalog:BranchNotFound (branch: {})", branch)
5556 }
5557 Self::CatalogLimitExceeded {
5558 maximum_entries,
5559 namespace_count,
5560 resource_count,
5561 } => write!(
5562 formatter,
5563 "Catalog:CatalogLimitExceeded (maximumEntries: {}, namespaceCount: {}, resourceCount: {})",
5564 maximum_entries, namespace_count, resource_count
5565 ),
5566 Self::CommitNotFound { commit_id } => write!(
5567 formatter,
5568 "Catalog:CommitNotFound (commitId: {})",
5569 commit_id
5570 ),
5571 Self::CommitTraversalLimitExceeded { maximum_commits } => write!(
5572 formatter,
5573 "Catalog:CommitTraversalLimitExceeded (maximumCommits: {})",
5574 maximum_commits
5575 ),
5576 Self::IdempotencyKeyReused {} => formatter.write_str("Catalog:IdempotencyKeyReused"),
5577 Self::InvalidArgument { reason } => {
5578 write!(formatter, "Catalog:InvalidArgument (reason: {})", reason)
5579 }
5580 Self::InvalidPageToken { reason } => {
5581 write!(formatter, "Catalog:InvalidPageToken (reason: {})", reason)
5582 }
5583 Self::NameConflict { name } => {
5584 write!(formatter, "Catalog:NameConflict (name: {})", name)
5585 }
5586 Self::NotFound { resource } => {
5587 write!(formatter, "Catalog:NotFound (resource: {})", resource)
5588 }
5589 Self::OperationInputMismatch { operation_id } => write!(
5590 formatter,
5591 "Catalog:OperationInputMismatch (operationId: {})",
5592 operation_id
5593 ),
5594 Self::ResourceNotFound { resource_id } => write!(
5595 formatter,
5596 "Catalog:ResourceNotFound (resourceId: {})",
5597 resource_id
5598 ),
5599 Self::StaleHead { current, expected } => write!(
5600 formatter,
5601 "Catalog:StaleHead (current: {}, expected: {})",
5602 current, expected
5603 ),
5604 Self::TagNotFound { tag } => write!(formatter, "Catalog:TagNotFound (tag: {})", tag),
5605 Self::TransactionBaseNotAncestor { base, head } => write!(
5606 formatter,
5607 "Catalog:TransactionBaseNotAncestor (base: {}, head: {})",
5608 base, head
5609 ),
5610 }
5611 }
5612}
5613impl StdError for CatalogError {}
5614impl ServiceError for CatalogError {
5615 fn to_envelope(&self, instance: String) -> ErrorEnvelope {
5616 Self::envelope(self, instance)
5617 }
5618 fn from_envelope(envelope: &ErrorEnvelope) -> Option<Self> {
5619 Self::decode_envelope(envelope)
5620 }
5621}
5622#[automatically_derived]
5623impl Default for ListBranchesRequest {
5624 fn default() -> Self {
5625 Self {
5626 include_deleted: None,
5627 page_size: None,
5628 page_token: None,
5629 }
5630 }
5631}
5632#[automatically_derived]
5633impl Default for ListTagsRequest {
5634 fn default() -> Self {
5635 Self {
5636 page_size: None,
5637 page_token: None,
5638 }
5639 }
5640}
5641#[automatically_derived]
5642impl Default for ReadRefEventsRequest {
5643 fn default() -> Self {
5644 Self {
5645 page_size: None,
5646 page_token: None,
5647 }
5648 }
5649}
5650#[automatically_derived]
5651impl Default for ReadStateRequest {
5652 fn default() -> Self {
5653 Self {
5654 page_size: None,
5655 page_token: None,
5656 }
5657 }
5658}