Skip to main content

spiral/api/catalog/
objects.rs

1// Generated by tools/service-contracts/rust.py. Do not edit.
2#![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/// Authenticated actor recorded by the service; callers cannot choose an actor. At most 128 UTF-8
15/// bytes.
16#[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/// Compare the live version with expected and replace it. Equal versions are invalid; use an
31/// assertion instead.
32#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
33pub struct AdvanceResourceChange {
34    /// Contract field expected.
35    #[serde(rename = "expected")]
36    pub expected: VersionId,
37    /// Contract field replacement.
38    #[serde(rename = "replacement")]
39    pub replacement: VersionId,
40    /// Contract field resourceId.
41    #[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/// AlreadyUpToDate contract value.
66#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
67pub struct AlreadyUpToDate {
68    /// Contract field sourceCommitId.
69    #[serde(rename = "sourceCommitId")]
70    pub source_commit_id: CommitId,
71    /// Contract field targetCommitId.
72    #[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/// Assert a binding or its absence without changing it.
94#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
95pub struct AssertNamespaceChange {
96    /// Contract field expected.
97    #[serde(rename = "expected")]
98    #[serde(default, skip_serializing_if = "Option::is_none")]
99    pub expected: Option<ResourceId>,
100    /// Contract field name.
101    #[serde(rename = "name")]
102    pub name: NamespaceSegment,
103    /// Contract field parent.
104    #[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/// Assert a live version or resource absence when expected is absent. Does not change the resource
130/// map; included in atomic conflict checking. A descriptor remains immutable even when a resource
131/// is retired.
132#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
133pub struct AssertResourceChange {
134    /// Contract field expected.
135    #[serde(rename = "expected")]
136    #[serde(default, skip_serializing_if = "Option::is_none")]
137    pub expected: Option<VersionId>,
138    /// Contract field resourceId.
139    #[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/// Compare an existing binding or absence and install replacement. Equal expected and replacement
162/// are invalid; use an assertion.
163#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
164pub struct BindNamespaceChange {
165    /// Contract field expected.
166    #[serde(rename = "expected")]
167    #[serde(default, skip_serializing_if = "Option::is_none")]
168    pub expected: Option<ResourceId>,
169    /// Contract field name.
170    #[serde(rename = "name")]
171    pub name: NamespaceSegment,
172    /// Contract field parent.
173    #[serde(rename = "parent")]
174    pub parent: NamespaceParent,
175    /// Contract field replacement.
176    #[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/// BindingConstraint contract value.
205#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
206pub struct BindingConstraint {
207    /// Contract field name.
208    #[serde(rename = "name")]
209    pub name: NamespaceSegment,
210    /// Contract field parent.
211    #[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/// Branch contract value.
233#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
234pub struct Branch {
235    /// Contract field branchId.
236    #[serde(rename = "branchId")]
237    pub branch_id: BranchId,
238    /// Contract field createdAtMicros.
239    #[serde(rename = "createdAtMicros")]
240    pub created_at_micros: SafeLong,
241    /// Contract field deletedAtMicros.
242    #[serde(rename = "deletedAtMicros")]
243    #[serde(default, skip_serializing_if = "Option::is_none")]
244    pub deleted_at_micros: Option<SafeLong>,
245    /// Contract field headCommitId.
246    #[serde(rename = "headCommitId")]
247    pub head_commit_id: CommitId,
248    /// Contract field lastBranchEventId.
249    #[serde(rename = "lastBranchEventId")]
250    pub last_branch_event_id: BranchEventId,
251    /// Contract field name.
252    #[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/// Immutable branch event. Optional fields describe the operation; previousBranchEventId links
287/// events for the same stable branch identity.
288#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
289pub struct BranchEvent {
290    /// Contract field actor.
291    #[serde(rename = "actor")]
292    pub actor: ActorId,
293    /// Contract field branchEventId.
294    #[serde(rename = "branchEventId")]
295    pub branch_event_id: BranchEventId,
296    /// Contract field branchId.
297    #[serde(rename = "branchId")]
298    pub branch_id: BranchId,
299    /// Contract field message.
300    #[serde(rename = "message")]
301    #[serde(default, skip_serializing_if = "Option::is_none")]
302    pub message: Option<String>,
303    /// Contract field newCommitId.
304    #[serde(rename = "newCommitId")]
305    #[serde(default, skip_serializing_if = "Option::is_none")]
306    pub new_commit_id: Option<CommitId>,
307    /// Contract field newName.
308    #[serde(rename = "newName")]
309    #[serde(default, skip_serializing_if = "Option::is_none")]
310    pub new_name: Option<BranchName>,
311    /// Contract field occurredAtMicros.
312    #[serde(rename = "occurredAtMicros")]
313    pub occurred_at_micros: SafeLong,
314    /// Contract field oldCommitId.
315    #[serde(rename = "oldCommitId")]
316    #[serde(default, skip_serializing_if = "Option::is_none")]
317    pub old_commit_id: Option<CommitId>,
318    /// Contract field oldName.
319    #[serde(rename = "oldName")]
320    #[serde(default, skip_serializing_if = "Option::is_none")]
321    pub old_name: Option<BranchName>,
322    /// Contract field operation.
323    #[serde(rename = "operation")]
324    pub operation: BranchEventOperation,
325    /// Contract field previousBranchEventId.
326    #[serde(rename = "previousBranchEventId")]
327    #[serde(default, skip_serializing_if = "Option::is_none")]
328    pub previous_branch_event_id: Option<BranchEventId>,
329    /// Contract field transactionId.
330    #[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/// Immutable UUIDv7 branch event identity.
390#[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/// Branch identity lifecycle and head movement. Client responses retain unknown future operation
405/// values.
406#[derive(Clone, Debug, PartialEq, Eq)]
407pub enum BranchEventOperation {
408    /// A known contract value.
409    Create,
410    /// A known contract value.
411    Advance,
412    /// A known contract value.
413    Merge,
414    /// A known contract value.
415    Rename,
416    /// A known contract value.
417    Delete,
418    /// A value introduced by a newer server.
419    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/// Events follow the stable branch event chain newest first. Branch metadata is captured with the
471/// first-page frontier and retained for that traversal; deleted branches remain inspectable.
472#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
473pub struct BranchEventPage {
474    /// Contract field branchId.
475    #[serde(rename = "branchId")]
476    pub branch_id: BranchId,
477    /// Contract field currentName.
478    #[serde(rename = "currentName")]
479    #[serde(default, skip_serializing_if = "Option::is_none")]
480    pub current_name: Option<BranchName>,
481    /// Contract field deletedAtMicros.
482    #[serde(rename = "deletedAtMicros")]
483    #[serde(default, skip_serializing_if = "Option::is_none")]
484    pub deleted_at_micros: Option<SafeLong>,
485    /// Contract field events.
486    #[serde(rename = "events")]
487    pub events: Vec<BranchEvent>,
488    /// Contract field nextPageToken.
489    #[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/// Stable UUIDv7 branch identity. Rename preserves identity; deletion tombstones it.
524#[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/// Slash-separated branch name, at most 255 UTF-8 bytes. Empty, dot, trailing-dot, .lock, and
539/// control segments are rejected by the service.
540#[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/// BranchTarget contract value.
555#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
556pub struct BranchTarget {
557    /// Contract field branch.
558    #[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/// Immutable commit and its canonical submitted changes. Parents are ordered first-parent first:
577/// genesis has none, ordinary commits have one, and merges have two. Assertions may be retained as
578/// read dependencies; they do not contribute mutation counts. Timestamps serialize as signed
579/// decimal strings.
580#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
581pub struct Commit {
582    /// Contract field actor.
583    #[serde(rename = "actor")]
584    pub actor: ActorId,
585    /// Contract field commitId.
586    #[serde(rename = "commitId")]
587    pub commit_id: CommitId,
588    /// Contract field committedAtMicros.
589    #[serde(rename = "committedAtMicros")]
590    pub committed_at_micros: SafeLong,
591    /// Contract field message.
592    #[serde(rename = "message")]
593    #[serde(default, skip_serializing_if = "Option::is_none")]
594    pub message: Option<String>,
595    /// Contract field namespace.
596    #[serde(rename = "namespace")]
597    pub namespace: Vec<NamespaceChange>,
598    /// Contract field parentCommitIds.
599    #[serde(rename = "parentCommitIds")]
600    pub parent_commit_ids: Vec<CommitId>,
601    /// Contract field resources.
602    #[serde(rename = "resources")]
603    pub resources: Vec<ResourceChange>,
604    /// Contract field transactionId.
605    #[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/// Immutable UUIDv7 project commit identity.
648#[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/// continuationCommitIds is the remaining graph frontier, not an opaque pagination token.
663/// Continuing from it can revisit ancestors already returned; callers maintain visited identities
664/// and reuse the exact resolved exclusion commits returned in resolvedExcludeAncestorsOf. No
665/// generated pages/items helper is exposed for this graph traversal. Reference inventories are read
666/// separately through paginated branch/tag methods. At most 1000 continuation identities are
667/// returned; a larger frontier is a named limit error.
668#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
669pub struct CommitLog {
670    /// Contract field commits.
671    #[serde(rename = "commits")]
672    pub commits: Vec<CommitNode>,
673    /// Contract field continuationCommitIds.
674    #[serde(rename = "continuationCommitIds")]
675    pub continuation_commit_ids: Vec<CommitId>,
676    /// Contract field resolvedExcludeAncestorsOf.
677    #[serde(rename = "resolvedExcludeAncestorsOf")]
678    pub resolved_exclude_ancestors_of: Vec<ResolvedCommitSelector>,
679    /// Contract field resolvedStarts.
680    #[serde(rename = "resolvedStarts")]
681    pub resolved_starts: Vec<ResolvedCommitSelector>,
682    /// Contract field truncated.
683    #[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/// Service validates 1 through 1000. Omission or null defaults to 100.
714#[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/// Commit graph summary. Change counts count mutations, excluding read assertions.
729#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
730pub struct CommitNode {
731    /// Contract field actor.
732    #[serde(rename = "actor")]
733    pub actor: ActorId,
734    /// Contract field commitId.
735    #[serde(rename = "commitId")]
736    pub commit_id: CommitId,
737    /// Contract field committedAtMicros.
738    #[serde(rename = "committedAtMicros")]
739    pub committed_at_micros: SafeLong,
740    /// Contract field message.
741    #[serde(rename = "message")]
742    #[serde(default, skip_serializing_if = "Option::is_none")]
743    pub message: Option<String>,
744    /// Contract field namespaceChangeCount.
745    #[serde(rename = "namespaceChangeCount")]
746    pub namespace_change_count: u32,
747    /// Contract field parentCommitIds.
748    #[serde(rename = "parentCommitIds")]
749    pub parent_commit_ids: Vec<CommitId>,
750    /// Contract field resourceChangeCount.
751    #[serde(rename = "resourceChangeCount")]
752    pub resource_change_count: u32,
753    /// Contract field transactionId.
754    #[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/// A commit identity or a movable branch/immutable tag resolved exactly once per request. Relative
797/// expressions such as main~3 are not supported.
798#[derive(Clone, Debug, PartialEq, Eq)]
799pub enum CommitSelector {
800    /// A known union arm.
801    Branch(BranchTarget),
802    /// A known union arm.
803    Commit(CommitTarget),
804    /// A known union arm.
805    Tag(TagTarget),
806    /// An unknown discriminator and its complete wire object.
807    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/// CommitTarget contract value.
949#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
950pub struct CommitTarget {
951    /// Contract field commitId.
952    #[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/// CompareCommitsRequest contract value.
971#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
972pub struct CompareCommitsRequest {
973    /// Contract field base.
974    #[serde(rename = "base")]
975    pub base: CommitSelector,
976    /// Contract field head.
977    #[serde(rename = "head")]
978    pub head: CommitSelector,
979    /// Contract field maxCommits.
980    #[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/// Exact ahead/behind counts and bounded head-only commit graph. Counts serialize as unsigned
1007/// decimal strings. continuationCommitIds is a graph frontier with the same duplicate-handling
1008/// responsibility and 1000-identity bound as CommitLog; it is not a page token. Internal traversal
1009/// is bounded to 100000 commits per side and exceeding that bound is a named error.
1010#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1011pub struct CompareCommitsResponse {
1012    /// Contract field aheadCount.
1013    #[serde(rename = "aheadCount")]
1014    pub ahead_count: SafeUnsignedLong,
1015    /// Contract field baseCommitId.
1016    #[serde(rename = "baseCommitId")]
1017    pub base_commit_id: CommitId,
1018    /// Contract field behindCount.
1019    #[serde(rename = "behindCount")]
1020    pub behind_count: SafeUnsignedLong,
1021    /// Contract field commits.
1022    #[serde(rename = "commits")]
1023    pub commits: Vec<CommitNode>,
1024    /// Contract field continuationCommitIds.
1025    #[serde(rename = "continuationCommitIds")]
1026    pub continuation_commit_ids: Vec<CommitId>,
1027    /// Contract field headCommitId.
1028    #[serde(rename = "headCommitId")]
1029    pub head_commit_id: CommitId,
1030    /// Contract field mergeBaseCommitIds.
1031    #[serde(rename = "mergeBaseCommitIds")]
1032    pub merge_base_commit_ids: Vec<CommitId>,
1033    /// Contract field truncated.
1034    #[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/// CreateBranchRequest contract value.
1074#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1075pub struct CreateBranchRequest {
1076    /// Contract field idempotencyKey.
1077    #[serde(rename = "idempotencyKey")]
1078    pub idempotency_key: IdempotencyKey,
1079    /// Contract field name.
1080    #[serde(rename = "name")]
1081    pub name: BranchName,
1082    /// Contract field target.
1083    #[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/// Install a resource absent from the target state. The descriptor supplies its identity and must
1108/// match any prior registration across project history and retirement; its service must own and
1109/// validate the version.
1110#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1111pub struct CreateResourceChange {
1112    /// Contract field descriptor.
1113    #[serde(rename = "descriptor")]
1114    pub descriptor: ResourceDescriptor,
1115    /// Contract field versionId.
1116    #[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/// CreateTagRequest contract value.
1138#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1139pub struct CreateTagRequest {
1140    /// Contract field idempotencyKey.
1141    #[serde(rename = "idempotencyKey")]
1142    pub idempotency_key: IdempotencyKey,
1143    /// Contract field name.
1144    #[serde(rename = "name")]
1145    pub name: TagName,
1146    /// Contract field target.
1147    #[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/// Tombstone the stable branch identity. Historical commits and branch events remain readable.
1172#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1173pub struct DeleteBranchRequest {
1174    /// Contract field idempotencyKey.
1175    #[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/// DiffStateRequest contract value.
1194#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1195pub struct DiffStateRequest {
1196    /// Contract field base.
1197    #[serde(rename = "base")]
1198    pub base: CommitSelector,
1199    /// Contract field head.
1200    #[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/// Canonical net mutations transforming base state into head state. Does not include assertions.
1222/// Materialization limits produce named errors rather than silently truncating a diff.
1223#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1224pub struct DiffStateResponse {
1225    /// Contract field baseCommitId.
1226    #[serde(rename = "baseCommitId")]
1227    pub base_commit_id: CommitId,
1228    /// Contract field headCommitId.
1229    #[serde(rename = "headCommitId")]
1230    pub head_commit_id: CommitId,
1231    /// Contract field namespace.
1232    #[serde(rename = "namespace")]
1233    pub namespace: Vec<NamespaceChange>,
1234    /// Contract field resources.
1235    #[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/// Empty payload for a union variant without additional data.
1263#[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/// Follow all ordered parents or only the first parent; omission defaults to all_parents.
1276#[derive(Clone, Debug, PartialEq, Eq)]
1277pub enum GraphTraversal {
1278    /// A known contract value.
1279    AllParents,
1280    /// A known contract value.
1281    FirstParent,
1282    /// A value introduced by a newer server.
1283    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/// Nonempty opaque retry key, at most 128 UTF-8 bytes, scoped to project and authenticated actor.
1320/// Identical retries return the saved result; reuse for a different operation or request is
1321/// rejected.
1322#[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/// includeDeleted defaults to false. The opaque token preserves the project, endpoint,
1337/// includeDeleted filter, page size, authorization scope, and current position in the live listing.
1338#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1339pub struct ListBranchesRequest {
1340    /// Contract field includeDeleted.
1341    #[serde(rename = "includeDeleted")]
1342    #[serde(default, skip_serializing_if = "Option::is_none")]
1343    pub include_deleted: Option<bool>,
1344    /// Contract field pageSize.
1345    #[serde(rename = "pageSize")]
1346    #[serde(default, skip_serializing_if = "Option::is_none")]
1347    pub page_size: Option<PageSize>,
1348    /// Contract field pageToken.
1349    #[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/// Live branches ordered by name, then stable identity. Weak consistency: concurrent creates,
1378/// renames, or deletions can omit or repeat entries across pages. A complete consistent project
1379/// state uses an immutable commit, not this live reference inventory.
1380#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1381pub struct ListBranchesResponse {
1382    /// Contract field branches.
1383    #[serde(rename = "branches")]
1384    pub branches: Vec<Branch>,
1385    /// Contract field nextPageToken.
1386    #[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/// List concrete bindings within the selected resource anchor and implicit-prefix subtree at the
1410/// exact commit. Traversal stops at concrete resource boundaries. A resource parent lists
1411/// identity-anchored children. To inspect path-anchored children, use a prefix parent formed from
1412/// the returned canonical parent and leaf name; aliases may have distinct path subtrees.
1413/// hasChildren covers either domain. Entries are ordered lexicographically by relative path
1414/// segments, then resource identity. Implicit prefixes are traversal structure rather than
1415/// fabricated resource entries. Continuations preserve the parent and exact commit.
1416#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1417pub struct ListNamespaceRequest {
1418    /// Contract field pageSize.
1419    #[serde(rename = "pageSize")]
1420    #[serde(default, skip_serializing_if = "Option::is_none")]
1421    pub page_size: Option<PageSize>,
1422    /// Contract field pageToken.
1423    #[serde(rename = "pageToken")]
1424    #[serde(default, skip_serializing_if = "Option::is_none")]
1425    pub page_token: Option<PageToken>,
1426    /// Contract field parent.
1427    #[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/// The opaque token preserves the project, endpoint, page size, authorization scope, and current
1454/// position in the live listing.
1455#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1456pub struct ListTagsRequest {
1457    /// Contract field pageSize.
1458    #[serde(rename = "pageSize")]
1459    #[serde(default, skip_serializing_if = "Option::is_none")]
1460    pub page_size: Option<PageSize>,
1461    /// Contract field pageToken.
1462    #[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/// Live tags ordered by name. Weak consistency: a concurrent creation before the cursor may not
1487/// appear in this traversal. Tags themselves remain immutable.
1488#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1489pub struct ListTagsResponse {
1490    /// Contract field nextPageToken.
1491    #[serde(rename = "nextPageToken")]
1492    #[serde(default, skip_serializing_if = "Option::is_none")]
1493    pub next_page_token: Option<PageToken>,
1494    /// Contract field tags.
1495    #[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/// MergeBasesRequest contract value.
1518#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1519pub struct MergeBasesRequest {
1520    /// Contract field left.
1521    #[serde(rename = "left")]
1522    pub left: CommitSelector,
1523    /// Contract field right.
1524    #[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/// All best common ancestors of the two resolved commits. Empty means unrelated histories; multiple
1546/// bases are preserved rather than arbitrarily choosing one.
1547#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1548pub struct MergeBasesResponse {
1549    /// Contract field leftCommitId.
1550    #[serde(rename = "leftCommitId")]
1551    pub left_commit_id: CommitId,
1552    /// Contract field mergeBaseCommitIds.
1553    #[serde(rename = "mergeBaseCommitIds")]
1554    pub merge_base_commit_ids: Vec<CommitId>,
1555    /// Contract field rightCommitId.
1556    #[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/// MergeConflict contract value.
1581#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1582pub struct MergeConflict {
1583    /// Contract field constraints.
1584    #[serde(rename = "constraints")]
1585    pub constraints: Vec<NamespaceConstraintConflict>,
1586    /// Contract field mergeBaseCommitId.
1587    #[serde(rename = "mergeBaseCommitId")]
1588    pub merge_base_commit_id: CommitId,
1589    /// Contract field namespace.
1590    #[serde(rename = "namespace")]
1591    pub namespace: Vec<NamespaceMergeConflict>,
1592    /// Contract field resources.
1593    #[serde(rename = "resources")]
1594    pub resources: Vec<ResourceMergeConflict>,
1595    /// Contract field sourceCommitId.
1596    #[serde(rename = "sourceCommitId")]
1597    pub source_commit_id: CommitId,
1598    /// Contract field targetCommitId.
1599    #[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/// Assess or publish a three-way merge. dryRun defaults to false. Both expected heads are required
1633/// when supplying participant resolutions so assessment and publication use identical heads. Source
1634/// selector resolves once. Multiple best common ancestors produce AmbiguousMergeBase. Catalog
1635/// coordinates pointers and namespace constraints without initializing a query engine.
1636/// resourceResolutions is required, may be empty, and is bounded to 1000 entries; message and retry
1637/// bounds match PublishRequest.
1638#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1639pub struct MergeRequest {
1640    /// Contract field dryRun.
1641    #[serde(rename = "dryRun")]
1642    #[serde(default, skip_serializing_if = "Option::is_none")]
1643    pub dry_run: Option<bool>,
1644    /// Contract field expectedSourceCommitId.
1645    #[serde(rename = "expectedSourceCommitId")]
1646    #[serde(default, skip_serializing_if = "Option::is_none")]
1647    pub expected_source_commit_id: Option<CommitId>,
1648    /// Contract field expectedTargetCommitId.
1649    #[serde(rename = "expectedTargetCommitId")]
1650    #[serde(default, skip_serializing_if = "Option::is_none")]
1651    pub expected_target_commit_id: Option<CommitId>,
1652    /// Contract field idempotencyKey.
1653    #[serde(rename = "idempotencyKey")]
1654    pub idempotency_key: IdempotencyKey,
1655    /// Contract field message.
1656    #[serde(rename = "message")]
1657    #[serde(default, skip_serializing_if = "Option::is_none")]
1658    pub message: Option<String>,
1659    /// Contract field resourceResolutions.
1660    #[serde(rename = "resourceResolutions")]
1661    pub resource_resolutions: Vec<ResourceMergeResolution>,
1662    /// Contract field source.
1663    #[serde(rename = "source")]
1664    pub source: CommitSelector,
1665    /// Contract field targetBranchId.
1666    #[serde(rename = "targetBranchId")]
1667    pub target_branch_id: BranchId,
1668    /// Contract field transactionId.
1669    #[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/// Mergeable is the successful dry-run assessment; published is an atomic merge commit with target
1716/// first parent and source second parent. Conflicts are response data and publish nothing.
1717#[derive(Clone, Debug, PartialEq, Eq)]
1718pub enum MergeResponse {
1719    /// A known union arm.
1720    AlreadyUpToDate(AlreadyUpToDate),
1721    /// A known union arm.
1722    Conflict(MergeConflict),
1723    /// A known union arm.
1724    Mergeable(Mergeable),
1725    /// A known union arm.
1726    Published(Merged),
1727    /// An unknown discriminator and its complete wire object.
1728    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/// Mergeable contract value.
1903#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1904pub struct Mergeable {
1905    /// Contract field mergeBaseCommitId.
1906    #[serde(rename = "mergeBaseCommitId")]
1907    pub merge_base_commit_id: CommitId,
1908    /// Contract field namespaceChangeCount.
1909    #[serde(rename = "namespaceChangeCount")]
1910    pub namespace_change_count: u32,
1911    /// Contract field resourceChangeCount.
1912    #[serde(rename = "resourceChangeCount")]
1913    pub resource_change_count: u32,
1914    /// Contract field sourceCommitId.
1915    #[serde(rename = "sourceCommitId")]
1916    pub source_commit_id: CommitId,
1917    /// Contract field targetCommitId.
1918    #[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/// Merged contract value.
1949#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1950pub struct Merged {
1951    /// Contract field commitId.
1952    #[serde(rename = "commitId")]
1953    pub commit_id: CommitId,
1954    /// Contract field mergeBaseCommitId.
1955    #[serde(rename = "mergeBaseCommitId")]
1956    pub merge_base_commit_id: CommitId,
1957    /// Contract field sourceCommitId.
1958    #[serde(rename = "sourceCommitId")]
1959    pub source_commit_id: CommitId,
1960    /// Contract field targetCommitId.
1961    #[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/// One submitted namespace-map operation. A request must contain at most one entry for each
1989/// canonical parent/name domain across all variants.
1990#[derive(Clone, Debug, PartialEq, Eq)]
1991pub enum NamespaceChange {
1992    /// A known union arm.
1993    Assert(AssertNamespaceChange),
1994    /// A known union arm.
1995    Bind(BindNamespaceChange),
1996    /// A known union arm.
1997    Unbind(UnbindNamespaceChange),
1998    /// An unknown discriminator and its complete wire object.
1999    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/// NamespaceConflict contract value.
2141#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2142pub struct NamespaceConflict {
2143    /// Contract field current.
2144    #[serde(rename = "current")]
2145    #[serde(default, skip_serializing_if = "Option::is_none")]
2146    pub current: Option<ResourceId>,
2147    /// Contract field expected.
2148    #[serde(rename = "expected")]
2149    #[serde(default, skip_serializing_if = "Option::is_none")]
2150    pub expected: Option<ResourceId>,
2151    /// Contract field name.
2152    #[serde(rename = "name")]
2153    pub name: NamespaceSegment,
2154    /// Contract field parent.
2155    #[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/// Constraint failures from evaluating the complete proposed atomic state. No submitted changes are
2185/// published when any conflict is returned.
2186#[derive(Clone, Debug, PartialEq, Eq)]
2187pub enum NamespaceConstraintConflict {
2188    /// A known union arm.
2189    AmbiguousBinding(BindingConstraint),
2190    /// A known union arm.
2191    BindingTargetsRetiredResource(RetiredTargetConstraint),
2192    /// A known union arm.
2193    ManagedBinding(ResourceConstraint),
2194    /// A known union arm.
2195    NamespaceCycle(ResourceConstraint),
2196    /// A known union arm.
2197    NamespaceRootNotLive(RootConstraint),
2198    /// A known union arm.
2199    OutsideNamespaceRoot(RootConstraint),
2200    /// A known union arm.
2201    ParentNotLive(ParentConstraint),
2202    /// A known union arm.
2203    ResourceHasChildren(ResourceConstraint),
2204    /// An unknown discriminator and its complete wire object.
2205    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/// A concrete binding at the selected commit. relativePath is relative to the requested parent and
2517/// defines listing order; parent and name retain the canonical binding domain. hasChildren reports
2518/// descendants in either the resource-anchored domain or the literal path subtree. These remain
2519/// distinct when a resource has multiple aliases; callers select the desired domain explicitly.
2520#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2521pub struct NamespaceEntry {
2522    /// Contract field hasChildren.
2523    #[serde(rename = "hasChildren")]
2524    pub has_children: bool,
2525    /// Contract field name.
2526    #[serde(rename = "name")]
2527    pub name: NamespaceSegment,
2528    /// Contract field parent.
2529    #[serde(rename = "parent")]
2530    pub parent: NamespaceParent,
2531    /// Contract field relativePath.
2532    #[serde(rename = "relativePath")]
2533    pub relative_path: NamespacePath,
2534    /// Contract field resource.
2535    #[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/// NamespaceMergeConflict contract value.
2566#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2567pub struct NamespaceMergeConflict {
2568    /// Contract field base.
2569    #[serde(rename = "base")]
2570    #[serde(default, skip_serializing_if = "Option::is_none")]
2571    pub base: Option<ResourceId>,
2572    /// Contract field name.
2573    #[serde(rename = "name")]
2574    pub name: NamespaceSegment,
2575    /// Contract field ours.
2576    #[serde(rename = "ours")]
2577    #[serde(default, skip_serializing_if = "Option::is_none")]
2578    pub ours: Option<ResourceId>,
2579    /// Contract field parent.
2580    #[serde(rename = "parent")]
2581    pub parent: NamespaceParent,
2582    /// Contract field theirs.
2583    #[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/// NamespacePage contract value.
2618#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2619pub struct NamespacePage {
2620    /// Contract field commitId.
2621    #[serde(rename = "commitId")]
2622    pub commit_id: CommitId,
2623    /// Contract field entries.
2624    #[serde(rename = "entries")]
2625    pub entries: Vec<NamespaceEntry>,
2626    /// Contract field nextPageToken.
2627    #[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/// Explicit namespace binding domain. Implicit prefixes do not allocate resources. Persistence
2654/// encoding is an implementation detail.
2655#[derive(Clone, Debug, PartialEq, Eq)]
2656pub enum NamespaceParent {
2657    /// A known union arm.
2658    Prefix(PrefixParent),
2659    /// A known union arm.
2660    ProjectRoot(Empty),
2661    /// A known union arm.
2662    Resource(ResourceParent),
2663    /// An unknown discriminator and its complete wire object.
2664    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/// Absolute path from the project root, or a relative path where explicitly stated. Empty selects
2806/// the root. At most 64 segments.
2807#[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/// One nonempty namespace segment, at most 255 UTF-8 bytes, with no control characters. Dot,
2819/// dot-dot, and slash-containing segments are rejected. Segments are passed as JSON array elements,
2820/// not parsed from dotted or slash-separated text.
2821#[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/// Caller-allocated durable operation identity, scoped to one project.
2836#[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/// Only successful committed operations have receipts; an attempted publication conflict does not
2851/// constitute a completed operation.
2852#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2853pub struct OperationReceipt {
2854    /// Contract field operation.
2855    #[serde(rename = "operation")]
2856    pub operation: ProjectOperation,
2857    /// Contract field publication.
2858    #[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/// Service validates 1 through 1000. Omission or null defaults to 100; generated clients do not
2880/// supply or clamp a value.
2881#[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/// Opaque continuation returned by this API. Bound to project, endpoint, authorization scope,
2896/// filters, page size, and immutable commit, captured event frontier, or live-list cursor as
2897/// applicable. Invalid, expired, or mismatched tokens are errors; clients must not decode or
2898/// manufacture them.
2899#[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/// ParentConstraint contract value.
2914#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2915pub struct ParentConstraint {
2916    /// Contract field parent.
2917    #[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/// Implicit path segments relative to a resource anchor, or the project root when resourceId is
2936/// absent. Must leave room for one leaf segment.
2937#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2938pub struct PrefixParent {
2939    /// Contract field path.
2940    #[serde(rename = "path")]
2941    pub path: NamespacePath,
2942    /// Contract field resourceId.
2943    #[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/// Owning project identifier. Nonempty, at most 128 UTF-8 bytes, with no control characters.
2967/// Project creation belongs to the project service.
2968#[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/// Opaque JSON operation input and completed result saved atomically with publication. Catalog does
2983/// not interpret resource-specific payloads. Operation identity is project-scoped and independent
2984/// of transaction and caller identity. Precision-sensitive numbers in opaque JSON should be encoded
2985/// as strings for cross-language portability.
2986#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2987pub struct ProjectOperation {
2988    /// Contract field input.
2989    #[serde(rename = "input")]
2990    pub input: Value,
2991    /// Contract field operationId.
2992    #[serde(rename = "operationId")]
2993    pub operation_id: OperationId,
2994    /// Contract field result.
2995    #[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/// Saved publication result. The ordinary publication commit has one first parent; retry returns
3020/// the original result even if the branch subsequently advanced.
3021#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3022pub struct Publication {
3023    /// Contract field commitId.
3024    #[serde(rename = "commitId")]
3025    pub commit_id: CommitId,
3026    /// Contract field parentCommitId.
3027    #[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/// PublicationConflict contract value.
3049#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3050pub struct PublicationConflict {
3051    /// Contract field constraints.
3052    #[serde(rename = "constraints")]
3053    pub constraints: Vec<NamespaceConstraintConflict>,
3054    /// Contract field currentCommitId.
3055    #[serde(rename = "currentCommitId")]
3056    pub current_commit_id: CommitId,
3057    /// Contract field namespace.
3058    #[serde(rename = "namespace")]
3059    pub namespace: Vec<NamespaceConflict>,
3060    /// Contract field resources.
3061    #[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/// Publish at most once for operationId and input. A retry with the same input returns the saved
3089/// publication and preserves the first completed result, even if a later caller supplies a
3090/// different result. Different input for an existing operation is rejected. Input comparison
3091/// ignores JSON object key order and preserves array element order. Unlike ordinary publication,
3092/// empty change lists may save a durable result without resource changes.
3093#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3094pub struct PublishOperationRequest {
3095    /// Contract field operation.
3096    #[serde(rename = "operation")]
3097    pub operation: ProjectOperation,
3098    /// Contract field publication.
3099    #[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/// A successful operation publication returns the winning receipt, including its original saved
3121/// result and publication identities. Candidates with the same input do not replace an existing
3122/// receipt. Conflicts publish no operation result.
3123#[derive(Clone, Debug, PartialEq, Eq)]
3124pub enum PublishOperationResponse {
3125    /// A known union arm.
3126    Conflict(PublicationConflict),
3127    /// A known union arm.
3128    Published(OperationReceipt),
3129    /// An unknown discriminator and its complete wire object.
3130    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/// Atomic entry-wise publication against a stable branch identity. baseCommitId must be an ancestor
3239/// of its current head. Compare only submitted domains, permitting disjoint changes since the base;
3240/// expectedHeadCommitId additionally requires an exact current head. Lists are required, may be
3241/// empty individually, and are bounded to 1000 entries each. At least one mutation or assertion is
3242/// required. Assertions participate in conflict checking; an assertion-only publication records a
3243/// commit. Messages are at most 16384 UTF-8 bytes. The service authenticates the actor, checks
3244/// state-read permission for assertions including absent resources, and checks resource-kind
3245/// mutation permissions for all mutated and bound identities.
3246#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3247pub struct PublishRequest {
3248    /// Contract field baseCommitId.
3249    #[serde(rename = "baseCommitId")]
3250    pub base_commit_id: CommitId,
3251    /// Contract field branchId.
3252    #[serde(rename = "branchId")]
3253    pub branch_id: BranchId,
3254    /// Contract field expectedHeadCommitId.
3255    #[serde(rename = "expectedHeadCommitId")]
3256    #[serde(default, skip_serializing_if = "Option::is_none")]
3257    pub expected_head_commit_id: Option<CommitId>,
3258    /// Contract field idempotencyKey.
3259    #[serde(rename = "idempotencyKey")]
3260    pub idempotency_key: IdempotencyKey,
3261    /// Contract field message.
3262    #[serde(rename = "message")]
3263    #[serde(default, skip_serializing_if = "Option::is_none")]
3264    pub message: Option<String>,
3265    /// Contract field namespace.
3266    #[serde(rename = "namespace")]
3267    pub namespace: Vec<NamespaceChange>,
3268    /// Contract field resources.
3269    #[serde(rename = "resources")]
3270    pub resources: Vec<ResourceChange>,
3271    /// Contract field transactionId.
3272    #[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/// Expected compare-and-swap and namespace constraint conflicts are successful typed responses, not
3314/// transport errors.
3315#[derive(Clone, Debug, PartialEq, Eq)]
3316pub enum PublishResponse {
3317    /// A known union arm.
3318    Conflict(PublicationConflict),
3319    /// A known union arm.
3320    Published(Publication),
3321    /// An unknown discriminator and its complete wire object.
3322    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/// Read and pin a live branch by name. Names are query values rather than path segments, so
3431/// slash-separated names need no catch-all routes.
3432#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3433pub struct ReadBranchRequest {
3434    /// Contract field name.
3435    #[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/// starts is required and contains 1 through 1000 selectors. Absent exclusions means none;
3452/// exclusions are bounded to 1000. Selectors resolve once for this request. Traverse descendants
3453/// before ancestors, breaking generation ties by descending timestamp and commit identity. Excluded
3454/// commits and their ancestors are omitted. Results are bounded graph slices, not cursor pages. An
3455/// unprocessed frontier exceeding 1000 identities fails with CommitTraversalLimitExceeded rather
3456/// than discarding reachable history.
3457#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3458pub struct ReadCommitLogRequest {
3459    /// Contract field excludeAncestorsOf.
3460    #[serde(rename = "excludeAncestorsOf")]
3461    #[serde(default, skip_serializing_if = "Option::is_none")]
3462    pub exclude_ancestors_of: Option<Vec<CommitSelector>>,
3463    /// Contract field maxCommits.
3464    #[serde(rename = "maxCommits")]
3465    #[serde(default, skip_serializing_if = "Option::is_none")]
3466    pub max_commits: Option<CommitLogLimit>,
3467    /// Contract field starts.
3468    #[serde(rename = "starts")]
3469    pub starts: Vec<CommitSelector>,
3470    /// Contract field traversal.
3471    #[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/// Absent receipt means no completed operation was found, not a fence preventing late completion.
3503/// Internal trusted recovery/closure is outside this public API.
3504#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3505pub struct ReadOperationResponse {
3506    /// Contract field receipt.
3507    #[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/// Read bounded event pages. Branch history follows its captured predecessor chain; project-wide
3528/// events use a live UUIDv7 cursor. An empty page with a continuation is not terminal.
3529#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3530pub struct ReadRefEventsRequest {
3531    /// Contract field pageSize.
3532    #[serde(rename = "pageSize")]
3533    #[serde(default, skip_serializing_if = "Option::is_none")]
3534    pub page_size: Option<PageSize>,
3535    /// Contract field pageToken.
3536    #[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/// ReadStateRequest contract value.
3561#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3562pub struct ReadStateRequest {
3563    /// Contract field pageSize.
3564    #[serde(rename = "pageSize")]
3565    #[serde(default, skip_serializing_if = "Option::is_none")]
3566    pub page_size: Option<PageSize>,
3567    /// Contract field pageToken.
3568    #[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/// ReadTagRequest contract value.
3593#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3594pub struct ReadTagRequest {
3595    /// Contract field name.
3596    #[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/// RecoverPublicationRequest contract value.
3613#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3614pub struct RecoverPublicationRequest {
3615    /// Contract field transactionId.
3616    #[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/// Recover whether a transaction published. notPublished is an observation and does not prevent a
3635/// still-running publication from completing later.
3636#[derive(Clone, Debug, PartialEq, Eq)]
3637pub enum RecoverPublicationResponse {
3638    /// A known union arm.
3639    NotPublished(Empty),
3640    /// A known union arm.
3641    Published(RecoveredPublication),
3642    /// An unknown discriminator and its complete wire object.
3643    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/// Ordered parents retain merge and revert publication history.
3752#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3753pub struct RecoveredPublication {
3754    /// Contract field commitId.
3755    #[serde(rename = "commitId")]
3756    pub commit_id: CommitId,
3757    /// Contract field parentCommitIds.
3758    #[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/// Project-wide events in descending UUIDv7 identity order. This is a live traversal, not a
3780/// snapshot of committed events. Concurrent inserts below the cursor may appear on later pages;
3781/// inserts above it are not revisited.
3782#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3783pub struct RefEventPage {
3784    /// Contract field events.
3785    #[serde(rename = "events")]
3786    pub events: Vec<BranchEvent>,
3787    /// Contract field nextPageToken.
3788    #[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/// RenameBranchRequest contract value.
3812#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3813pub struct RenameBranchRequest {
3814    /// Contract field idempotencyKey.
3815    #[serde(rename = "idempotencyKey")]
3816    pub idempotency_key: IdempotencyKey,
3817    /// Contract field newName.
3818    #[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/// ResolveCommitRequest contract value.
3840#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3841pub struct ResolveCommitRequest {
3842    /// Contract field selector.
3843    #[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/// Resolved immutable identity for the supplied selector. Pin this commit for subsequent
3862/// multi-request reads.
3863#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3864pub struct ResolveCommitResponse {
3865    /// Contract field commitId.
3866    #[serde(rename = "commitId")]
3867    pub commit_id: CommitId,
3868    /// Contract field selector.
3869    #[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/// Resolve one absolute path at the exact commit in the route. An absent binding returns no
3891/// resource, while an unknown commit is an error.
3892#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3893pub struct ResolvePathRequest {
3894    /// Contract field path.
3895    #[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/// ResolvePathResponse contract value.
3912#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3913pub struct ResolvePathResponse {
3914    /// Contract field commitId.
3915    #[serde(rename = "commitId")]
3916    pub commit_id: CommitId,
3917    /// Contract field resource.
3918    #[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/// Resolve 1 through 1000 absolute paths at one immutable commit, retaining request order and
3942/// duplicate paths.
3943#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3944pub struct ResolvePathsRequest {
3945    /// Contract field paths.
3946    #[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/// ResolvePathsResponse contract value.
3965#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3966pub struct ResolvePathsResponse {
3967    /// Contract field commitId.
3968    #[serde(rename = "commitId")]
3969    pub commit_id: CommitId,
3970    /// Contract field results.
3971    #[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/// ResolvedCommitSelector contract value.
3993#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3994pub struct ResolvedCommitSelector {
3995    /// Contract field commitId.
3996    #[serde(rename = "commitId")]
3997    pub commit_id: CommitId,
3998    /// Contract field selector.
3999    #[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/// ResolvedPath contract value.
4021#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4022pub struct ResolvedPath {
4023    /// Contract field path.
4024    #[serde(rename = "path")]
4025    pub path: NamespacePath,
4026    /// Contract field resource.
4027    #[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/// One submitted resource-map operation. A request must contain at most one entry for each resource
4051/// identity across all variants. Assertions participate in atomic conflict checking without
4052/// changing the resource map.
4053#[derive(Clone, Debug, PartialEq, Eq)]
4054pub enum ResourceChange {
4055    /// A known union arm.
4056    Advance(AdvanceResourceChange),
4057    /// A known union arm.
4058    Assert(AssertResourceChange),
4059    /// A known union arm.
4060    Create(CreateResourceChange),
4061    /// A known union arm.
4062    Retire(RetireResourceChange),
4063    /// An unknown discriminator and its complete wire object.
4064    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/// ResourceConflict contract value.
4239#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4240pub struct ResourceConflict {
4241    /// Contract field current.
4242    #[serde(rename = "current")]
4243    #[serde(default, skip_serializing_if = "Option::is_none")]
4244    pub current: Option<VersionId>,
4245    /// Contract field expected.
4246    #[serde(rename = "expected")]
4247    #[serde(default, skip_serializing_if = "Option::is_none")]
4248    pub expected: Option<VersionId>,
4249    /// Contract field resourceId.
4250    #[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/// ResourceConstraint contract value.
4277#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4278pub struct ResourceConstraint {
4279    /// Contract field resourceId.
4280    #[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/// Immutable registration metadata. namespaceRoot, when present, is an owning resource root
4299/// containing every binding. namespaceManaged declares producer-owned canonical bindings that
4300/// cannot be renamed, removed, or aliased. False must be supplied explicitly.
4301#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4302pub struct ResourceDescriptor {
4303    /// Contract field kind.
4304    #[serde(rename = "kind")]
4305    pub kind: ResourceKind,
4306    /// Contract field namespaceManaged.
4307    #[serde(rename = "namespaceManaged")]
4308    pub namespace_managed: bool,
4309    /// Contract field namespaceRoot.
4310    #[serde(rename = "namespaceRoot")]
4311    #[serde(default, skip_serializing_if = "Option::is_none")]
4312    pub namespace_root: Option<ResourceId>,
4313    /// Contract field resourceId.
4314    #[serde(rename = "resourceId")]
4315    pub resource_id: ResourceId,
4316    /// Contract field service.
4317    #[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/// Stable UUIDv4 identity allocated by a resource service.
4349#[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/// Opaque resource kind, at most 64 UTF-8 bytes. Catalog does not enumerate table engines, dataset
4364/// kinds, or future resource types.
4365#[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/// ResourceMergeConflict contract value.
4380#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4381pub struct ResourceMergeConflict {
4382    /// Contract field base.
4383    #[serde(rename = "base")]
4384    #[serde(default, skip_serializing_if = "Option::is_none")]
4385    pub base: Option<VersionId>,
4386    /// Contract field descriptor.
4387    #[serde(rename = "descriptor")]
4388    pub descriptor: ResourceDescriptor,
4389    /// Contract field ours.
4390    #[serde(rename = "ours")]
4391    #[serde(default, skip_serializing_if = "Option::is_none")]
4392    pub ours: Option<VersionId>,
4393    /// Contract field resourceId.
4394    #[serde(rename = "resourceId")]
4395    pub resource_id: ResourceId,
4396    /// Contract field theirs.
4397    #[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/// Owning resource participant supplies a semantic replacement for these exact base, target, and
4432/// source versions. It does not resolve namespace conflicts or permit an arbitrary stale-head
4433/// overwrite.
4434#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4435pub struct ResourceMergeResolution {
4436    /// Contract field base.
4437    #[serde(rename = "base")]
4438    pub base: VersionId,
4439    /// Contract field ours.
4440    #[serde(rename = "ours")]
4441    pub ours: VersionId,
4442    /// Contract field replacement.
4443    #[serde(rename = "replacement")]
4444    pub replacement: VersionId,
4445    /// Contract field resourceId.
4446    #[serde(rename = "resourceId")]
4447    pub resource_id: ResourceId,
4448    /// Contract field theirs.
4449    #[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/// ResourceParent contract value.
4480#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4481pub struct ResourceParent {
4482    /// Contract field resourceId.
4483    #[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/// Opaque owning resource service identifier, at most 64 UTF-8 bytes.
4502#[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/// ResourceState contract value.
4517#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4518pub struct ResourceState {
4519    /// Contract field descriptor.
4520    #[serde(rename = "descriptor")]
4521    pub descriptor: ResourceDescriptor,
4522    /// Contract field versionId.
4523    #[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/// Compare the live version with expected and retire the resource. Namespace constraints must
4545/// permit retirement.
4546#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4547pub struct RetireResourceChange {
4548    /// Contract field expected.
4549    #[serde(rename = "expected")]
4550    pub expected: VersionId,
4551    /// Contract field resourceId.
4552    #[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/// RetiredTargetConstraint contract value.
4574#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4575pub struct RetiredTargetConstraint {
4576    /// Contract field name.
4577    #[serde(rename = "name")]
4578    pub name: NamespaceSegment,
4579    /// Contract field parent.
4580    #[serde(rename = "parent")]
4581    pub parent: NamespaceParent,
4582    /// Contract field resourceId.
4583    #[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/// RevertConflict contract value.
4608#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4609pub struct RevertConflict {
4610    /// Contract field constraints.
4611    #[serde(rename = "constraints")]
4612    pub constraints: Vec<NamespaceConstraintConflict>,
4613    /// Contract field currentCommitId.
4614    #[serde(rename = "currentCommitId")]
4615    pub current_commit_id: CommitId,
4616    /// Contract field namespace.
4617    #[serde(rename = "namespace")]
4618    pub namespace: Vec<NamespaceConflict>,
4619    /// Contract field resources.
4620    #[serde(rename = "resources")]
4621    pub resources: Vec<ResourceConflict>,
4622    /// Contract field revertedCommitId.
4623    #[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/// Apply the inverse delta of commitId to a current target branch. mainlineParent is one-based and
4654/// required for a merge commit. dryRun defaults to false. The original commit remains immutable;
4655/// publication creates a successor of the target head. Message and retry bounds match
4656/// PublishRequest.
4657#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4658pub struct RevertRequest {
4659    /// Contract field commitId.
4660    #[serde(rename = "commitId")]
4661    pub commit_id: CommitId,
4662    /// Contract field dryRun.
4663    #[serde(rename = "dryRun")]
4664    #[serde(default, skip_serializing_if = "Option::is_none")]
4665    pub dry_run: Option<bool>,
4666    /// Contract field expectedTargetCommitId.
4667    #[serde(rename = "expectedTargetCommitId")]
4668    #[serde(default, skip_serializing_if = "Option::is_none")]
4669    pub expected_target_commit_id: Option<CommitId>,
4670    /// Contract field idempotencyKey.
4671    #[serde(rename = "idempotencyKey")]
4672    pub idempotency_key: IdempotencyKey,
4673    /// Contract field mainlineParent.
4674    #[serde(rename = "mainlineParent")]
4675    #[serde(default, skip_serializing_if = "Option::is_none")]
4676    pub mainline_parent: Option<u32>,
4677    /// Contract field message.
4678    #[serde(rename = "message")]
4679    #[serde(default, skip_serializing_if = "Option::is_none")]
4680    pub message: Option<String>,
4681    /// Contract field targetBranchId.
4682    #[serde(rename = "targetBranchId")]
4683    pub target_branch_id: BranchId,
4684    /// Contract field transactionId.
4685    #[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/// RevertResponse contract value.
4729#[derive(Clone, Debug, PartialEq, Eq)]
4730pub enum RevertResponse {
4731    /// A known union arm.
4732    Conflict(RevertConflict),
4733    /// A known union arm.
4734    Published(Reverted),
4735    /// A known union arm.
4736    Revertible(Revertible),
4737    /// An unknown discriminator and its complete wire object.
4738    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/// Reverted contract value.
4880#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4881pub struct Reverted {
4882    /// Contract field commitId.
4883    #[serde(rename = "commitId")]
4884    pub commit_id: CommitId,
4885    /// Contract field parentCommitId.
4886    #[serde(rename = "parentCommitId")]
4887    pub parent_commit_id: CommitId,
4888    /// Contract field revertedCommitId.
4889    #[serde(rename = "revertedCommitId")]
4890    pub reverted_commit_id: CommitId,
4891    /// Contract field targetCommitId.
4892    #[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/// Revertible contract value.
4920#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4921pub struct Revertible {
4922    /// Contract field namespaceChangeCount.
4923    #[serde(rename = "namespaceChangeCount")]
4924    pub namespace_change_count: u32,
4925    /// Contract field parentCommitId.
4926    #[serde(rename = "parentCommitId")]
4927    pub parent_commit_id: CommitId,
4928    /// Contract field resourceChangeCount.
4929    #[serde(rename = "resourceChangeCount")]
4930    pub resource_change_count: u32,
4931    /// Contract field revertedCommitId.
4932    #[serde(rename = "revertedCommitId")]
4933    pub reverted_commit_id: CommitId,
4934    /// Contract field targetCommitId.
4935    #[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/// RootConstraint contract value.
4966#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4967pub struct RootConstraint {
4968    /// Contract field namespaceRoot.
4969    #[serde(rename = "namespaceRoot")]
4970    pub namespace_root: ResourceId,
4971    /// Contract field resourceId.
4972    #[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/// StateNamespaceEntry contract value.
4994#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
4995pub struct StateNamespaceEntry {
4996    /// Contract field name.
4997    #[serde(rename = "name")]
4998    pub name: NamespaceSegment,
4999    /// Contract field parent.
5000    #[serde(rename = "parent")]
5001    pub parent: NamespaceParent,
5002    /// Contract field resource.
5003    #[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/// Immutable project state has two collections. Resource entries precede namespace entries in a
5028/// canonical traversal, ordered respectively by resource identity and canonical parent/name domain.
5029/// pageSize bounds the combined number of entries. Absence of nextPageToken terminates traversal;
5030/// pages may contain either or both collections. Only page iteration is generated, so neither
5031/// collection silently disappears.
5032#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5033pub struct StatePage {
5034    /// Contract field commitId.
5035    #[serde(rename = "commitId")]
5036    pub commit_id: CommitId,
5037    /// Contract field namespace.
5038    #[serde(rename = "namespace")]
5039    pub namespace: Vec<StateNamespaceEntry>,
5040    /// Contract field nextPageToken.
5041    #[serde(rename = "nextPageToken")]
5042    #[serde(default, skip_serializing_if = "Option::is_none")]
5043    pub next_page_token: Option<PageToken>,
5044    /// Contract field resources.
5045    #[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/// An immutable named commit reference; this API does not move, rename, or delete tags.
5074#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5075pub struct Tag {
5076    /// Contract field actor.
5077    #[serde(rename = "actor")]
5078    pub actor: ActorId,
5079    /// Contract field commitId.
5080    #[serde(rename = "commitId")]
5081    pub commit_id: CommitId,
5082    /// Contract field createdAtMicros.
5083    #[serde(rename = "createdAtMicros")]
5084    pub created_at_micros: SafeLong,
5085    /// Contract field name.
5086    #[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/// Immutable tag name with the same syntax and bounds as BranchName.
5114#[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/// TagTarget contract value.
5129#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5130pub struct TagTarget {
5131    /// Contract field tag.
5132    #[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/// Caller-allocated UUIDv7 publication identity used to recover an uncertain result within a
5149/// project and authenticated actor scope.
5150#[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/// Compare and remove a concrete binding.
5165#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
5166pub struct UnbindNamespaceChange {
5167    /// Contract field expected.
5168    #[serde(rename = "expected")]
5169    pub expected: ResourceId,
5170    /// Contract field name.
5171    #[serde(rename = "name")]
5172    pub name: NamespaceSegment,
5173    /// Contract field parent.
5174    #[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/// Immutable UUIDv7 resource version allocated by its owning service.
5199#[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/// Typed errors declared by this service contract.
5214#[derive(Clone, Debug, PartialEq, Eq)]
5215pub enum CatalogError {
5216    /// Catalog:AmbiguousMergeBase.
5217    AmbiguousMergeBase { count: u32 },
5218    /// Catalog:BranchNotFound.
5219    BranchNotFound { branch: String },
5220    /// Catalog:CatalogLimitExceeded.
5221    CatalogLimitExceeded {
5222        maximum_entries: SafeUnsignedLong,
5223        namespace_count: SafeUnsignedLong,
5224        resource_count: SafeUnsignedLong,
5225    },
5226    /// Catalog:CommitNotFound.
5227    CommitNotFound { commit_id: String },
5228    /// Catalog:CommitTraversalLimitExceeded.
5229    CommitTraversalLimitExceeded { maximum_commits: SafeUnsignedLong },
5230    /// Catalog:IdempotencyKeyReused.
5231    IdempotencyKeyReused {},
5232    /// Catalog:InvalidArgument.
5233    InvalidArgument { reason: String },
5234    /// Catalog:InvalidPageToken.
5235    InvalidPageToken { reason: String },
5236    /// Catalog:NameConflict.
5237    NameConflict { name: String },
5238    /// Catalog:NotFound.
5239    NotFound { resource: String },
5240    /// Catalog:OperationInputMismatch.
5241    OperationInputMismatch { operation_id: String },
5242    /// Catalog:ResourceNotFound.
5243    ResourceNotFound { resource_id: String },
5244    /// Catalog:StaleHead.
5245    StaleHead { current: String, expected: String },
5246    /// Catalog:TagNotFound.
5247    TagNotFound { tag: String },
5248    /// Catalog:TransactionBaseNotAncestor.
5249    TransactionBaseNotAncestor { base: String, head: String },
5250}
5251impl CatalogError {
5252    /// HTTP status for this declared error.
5253    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    /// Serialize only contract-declared error parameters.
5273    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    /// Decode a declared error and its typed error parameters.
5409    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}