Skip to main content

actordb_protocol/generated/
meta.rs

1// This file is @generated by prost-build.
2/// Handshake: identifies the connecting node
3#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4pub struct Hello {
5    #[prost(string, tag = "1")]
6    pub node_id: ::prost::alloc::string::String,
7    /// Exact peer protocol version. No range negotiation or downgrade path.
8    #[prost(uint32, tag = "3")]
9    pub protocol_version: u32,
10    /// Fresh 256-bit challenge generated independently for every physical
11    /// connection. Both peers' complete Hellos are bound into each HelloAuth.
12    #[prost(bytes = "vec", tag = "6")]
13    pub challenge: ::prost::alloc::vec::Vec<u8>,
14    /// Externally allocated operational generation checked by a receiver policy.
15    /// Zero means no managed generation policy. TLS/shared-secret credential
16    /// ownership and revocation remain external to this claim.
17    #[prost(uint64, tag = "8")]
18    pub process_generation: u64,
19}
20/// Second handshake flight. With a configured cluster secret, auth_tag is an
21/// HMAC-SHA256 over the ordered dialer/listener Hello transcript and the
22/// proving role. Without a secret it is empty, but the flight still makes
23/// handshake completion explicit before either peer publishes the connection.
24#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
25pub struct HelloAuth {
26    #[prost(bytes = "vec", tag = "1")]
27    pub auth_tag: ::prost::alloc::vec::Vec<u8>,
28}
29/// A single replicated write, sent from a fragment's coordinator to the
30/// other replica holders. Delivery is at-least-once; receivers merge with
31/// last-writer-wins on (timestamp_ms, node_id) and do NOT re-forward.
32/// `seq`/`boot_id` are propagation metadata.
33#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
34pub struct ReplicateOp {
35    #[prost(string, tag = "1")]
36    pub key: ::prost::alloc::string::String,
37    #[prost(bytes = "vec", tag = "2")]
38    pub value: ::prost::alloc::vec::Vec<u8>,
39    #[prost(uint64, tag = "3")]
40    pub timestamp_ms: u64,
41    #[prost(string, tag = "4")]
42    pub node_id: ::prost::alloc::string::String,
43    #[prost(uint64, tag = "5")]
44    pub seq: u64,
45    /// Random per process start. Carried as origin metadata; replay safety is
46    /// provided by the value's LWW version rather than transport deduplication.
47    #[prost(uint64, tag = "6")]
48    pub boot_id: u64,
49    /// Optional key expiry (wall-clock ms). 0/absent = no expiry.
50    #[prost(uint64, tag = "7")]
51    pub expires_at_ms: u64,
52    /// True if this is a deletion tombstone.
53    #[prost(bool, tag = "8")]
54    pub is_tombstone: bool,
55    #[prost(uint64, tag = "9")]
56    pub logical_counter: u64,
57}
58/// A client-routed write: "you own this key's fragment — apply it as
59/// coordinator and replicate to the other holders." One network hop.
60#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
61pub struct ForwardedPut {
62    #[prost(string, tag = "1")]
63    pub key: ::prost::alloc::string::String,
64    #[prost(bytes = "vec", tag = "2")]
65    pub value: ::prost::alloc::vec::Vec<u8>,
66    #[prost(uint64, tag = "3")]
67    pub timestamp_ms: u64,
68    #[prost(string, tag = "4")]
69    pub node_id: ::prost::alloc::string::String,
70    #[prost(uint64, tag = "5")]
71    pub seq: u64,
72    #[prost(uint64, tag = "6")]
73    pub boot_id: u64,
74    /// Optional key expiry (wall-clock ms). 0/absent = no expiry.
75    #[prost(uint64, tag = "7")]
76    pub expires_at_ms: u64,
77    /// True if this is a deletion tombstone.
78    #[prost(bool, tag = "8")]
79    pub is_tombstone: bool,
80    /// Phase 7: priority the receiving node should apply this op with.
81    #[prost(enumeration = "Priority", tag = "9")]
82    pub priority: i32,
83    /// Phase 8: re-forward count. A node that receives a ForwardedPut for a
84    /// fragment it no longer serves (stale placement maps during
85    /// migration) re-forwards it to the current owner instead of
86    /// dropping it; hops bounds the chain.
87    #[prost(uint32, tag = "10")]
88    pub hops: u32,
89    /// Correlates the exact apply outcome back to the originating node.
90    #[prost(uint64, tag = "11")]
91    pub req_id: u64,
92    /// Optional encoded WriteConcernPolicy. Absence preserves local acknowledgement.
93    #[prost(bytes = "vec", optional, tag = "12")]
94    pub write_concern: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
95    #[prost(uint64, tag = "13")]
96    pub logical_counter: u64,
97}
98/// A single-key routed read. The origin tries configured holders in order; a
99/// non-serving holder may relay it under a fresh request id while placement
100/// maps converge. GetResponse has no unavailable value, so routing/actor
101/// unavailability produces no false not-found reply and the origin times out.
102#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
103pub struct ForwardedGet {
104    #[prost(string, tag = "1")]
105    pub key: ::prost::alloc::string::String,
106    #[prost(uint64, tag = "2")]
107    pub req_id: u64,
108    /// Phase 7: priority the receiving node should serve this read with.
109    #[prost(enumeration = "Priority", tag = "3")]
110    pub priority: i32,
111    /// Phase 8: re-forward count, as with ForwardedPut. A non-serving node
112    /// relays the read to the current owner and relays the response back.
113    #[prost(uint32, tag = "4")]
114    pub hops: u32,
115}
116#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
117pub struct GetResponse {
118    #[prost(uint64, tag = "1")]
119    pub req_id: u64,
120    #[prost(bool, tag = "2")]
121    pub found: bool,
122    #[prost(bytes = "vec", tag = "3")]
123    pub value: ::prost::alloc::vec::Vec<u8>,
124    #[prost(uint64, tag = "4")]
125    pub timestamp_ms: u64,
126    #[prost(string, tag = "5")]
127    pub node_id: ::prost::alloc::string::String,
128    /// Optional key expiry (wall-clock ms). 0/absent = no expiry.
129    #[prost(uint64, tag = "6")]
130    pub expires_at_ms: u64,
131    /// True if this is a deletion tombstone.
132    #[prost(bool, tag = "7")]
133    pub is_tombstone: bool,
134    /// Phase 7: true if the read was shed due to backpressure (distinct
135    /// from not-found).
136    #[prost(bool, tag = "8")]
137    pub shed: bool,
138    #[prost(uint64, tag = "9")]
139    pub logical_counter: u64,
140}
141/// A value page entry used only by correlated, bounded reconciliation.
142#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
143pub struct ReconcileEntry {
144    #[prost(string, tag = "1")]
145    pub key: ::prost::alloc::string::String,
146    #[prost(bytes = "vec", tag = "2")]
147    pub value: ::prost::alloc::vec::Vec<u8>,
148    #[prost(uint64, tag = "3")]
149    pub timestamp_ms: u64,
150    #[prost(string, tag = "4")]
151    pub node_id: ::prost::alloc::string::String,
152    /// Optional key expiry (wall-clock ms). 0/absent = no expiry.
153    #[prost(uint64, tag = "5")]
154    pub expires_at_ms: u64,
155    /// True if this is a deletion tombstone.
156    #[prost(bool, tag = "6")]
157    pub is_tombstone: bool,
158    #[prost(uint64, tag = "7")]
159    pub logical_counter: u64,
160}
161/// Top-level wire envelope, length-delimited on the wire
162/// Phase 5: async sender/receiver replication. The sender batches ops per
163/// (fragment, peer) and ships them on a timer. Tracked batches receive an ACK
164/// reporting the achieved durability after apply and any requested flush attempt,
165/// or a NACK on execution failure; reconciliation batches are untracked.
166/// Session ids distinguish pairings
167/// across reconnects; stale batches (old session) are discarded.
168#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
169pub struct SessionStart {
170    #[prost(uint64, tag = "1")]
171    pub session_id: u64,
172    #[prost(uint32, tag = "2")]
173    pub fragment: u32,
174}
175#[derive(Clone, PartialEq, ::prost::Message)]
176pub struct ReplicateBatch {
177    #[prost(uint64, tag = "1")]
178    pub session_id: u64,
179    #[prost(uint64, tag = "2")]
180    pub batch_seq: u64,
181    #[prost(uint32, tag = "3")]
182    pub fragment: u32,
183    #[prost(message, repeated, tag = "4")]
184    pub ops: ::prost::alloc::vec::Vec<ReplicateOp>,
185    /// Minimum fence the sender requires before this tracked batch may retire.
186    /// Ignored for untracked reconciliation batches.
187    #[prost(enumeration = "ReplicationAckLevel", tag = "5")]
188    pub required_ack_level: i32,
189}
190#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
191pub struct BatchAck {
192    #[prost(uint64, tag = "1")]
193    pub session_id: u64,
194    #[prost(uint64, tag = "2")]
195    pub batch_seq: u64,
196    #[prost(uint32, tag = "3")]
197    pub fragment: u32,
198    /// Distinguishes volatile in-memory application from a successful flush to
199    /// the receiver's configured KvStore.
200    #[prost(enumeration = "ReplicationAckLevel", tag = "4")]
201    pub level: i32,
202}
203/// A receiver could not account for or persist a batch. The sender retains
204/// and retries the exact idempotent operations instead of treating them as
205/// delivered.
206#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
207pub struct BatchNack {
208    #[prost(uint64, tag = "1")]
209    pub session_id: u64,
210    #[prost(uint64, tag = "2")]
211    pub batch_seq: u64,
212    #[prost(uint32, tag = "3")]
213    pub fragment: u32,
214    #[prost(string, tag = "4")]
215    pub error: ::prost::alloc::string::String,
216}
217/// Incremental anti-entropy: exchange version and content-digest summaries,
218/// then only the divergent keys.
219#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
220pub struct KeySummary {
221    #[prost(string, tag = "1")]
222    pub key: ::prost::alloc::string::String,
223    #[prost(uint64, tag = "2")]
224    pub timestamp_ms: u64,
225    #[prost(string, tag = "3")]
226    pub node_id: ::prost::alloc::string::String,
227    #[prost(bool, tag = "4")]
228    pub is_tombstone: bool,
229    #[prost(uint64, tag = "5")]
230    pub logical_counter: u64,
231    /// Exactly 32 bytes: SHA-256 over canonical payload and optional TTL deadline.
232    #[prost(bytes = "vec", tag = "6")]
233    pub content_digest: ::prost::alloc::vec::Vec<u8>,
234}
235#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
236pub struct ReconcileRequest {
237    #[prost(uint32, tag = "1")]
238    pub fragment: u32,
239    /// Correlates the request to the active SessionStart on this connection.
240    #[prost(uint64, tag = "2")]
241    pub session_id: u64,
242    /// Monotonic within a sender session. Responses from older rounds are stale.
243    #[prost(uint64, tag = "3")]
244    pub round_id: u64,
245    /// V3 byte-bounded summary pagination. Page zero starts a pass; later pages
246    /// echo its cursor, observed revision, and pinned TTL time. Revision drift is
247    /// allowed during the bounded pass and forces a fresh verification pass.
248    #[prost(uint64, tag = "4")]
249    pub page_seq: u64,
250    #[prost(string, tag = "5")]
251    pub after_key: ::prost::alloc::string::String,
252    #[prost(uint64, tag = "6")]
253    pub snapshot_revision: u64,
254    #[prost(uint64, tag = "7")]
255    pub snapshot_time_ms: u64,
256    /// Explicit full-outage recovery authority; absent during ordinary startup.
257    #[prost(bytes = "vec", tag = "8")]
258    pub recovery_epoch: ::prost::alloc::vec::Vec<u8>,
259    #[prost(bytes = "vec", tag = "9")]
260    pub recovery_replica_digest: ::prost::alloc::vec::Vec<u8>,
261}
262#[derive(Clone, PartialEq, ::prost::Message)]
263pub struct ReconcileResponse {
264    #[prost(uint32, tag = "1")]
265    pub fragment: u32,
266    #[prost(message, repeated, tag = "2")]
267    pub summaries: ::prost::alloc::vec::Vec<KeySummary>,
268    #[prost(uint64, tag = "3")]
269    pub session_id: u64,
270    #[prost(uint64, tag = "4")]
271    pub round_id: u64,
272    /// V3 page correlation and continuation metadata.
273    #[prost(uint64, tag = "5")]
274    pub page_seq: u64,
275    #[prost(string, tag = "6")]
276    pub next_after_key: ::prost::alloc::string::String,
277    #[prost(uint64, tag = "7")]
278    pub snapshot_revision: u64,
279    #[prost(uint64, tag = "8")]
280    pub snapshot_time_ms: u64,
281    #[prost(bool, tag = "9")]
282    pub done: bool,
283    /// The responder could not continue this pass; discard its partial result
284    /// and begin again with a fresh nonzero round id.
285    #[prost(bool, tag = "10")]
286    pub restart: bool,
287}
288#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
289pub struct ReconcileFetch {
290    #[prost(uint32, tag = "1")]
291    pub fragment: u32,
292    #[prost(string, repeated, tag = "2")]
293    pub keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
294    #[prost(uint64, tag = "3")]
295    pub session_id: u64,
296    #[prost(uint64, tag = "4")]
297    pub round_id: u64,
298    /// Identifies the requested page within the round.
299    #[prost(uint64, tag = "5")]
300    pub chunk_seq: u64,
301}
302#[derive(Clone, PartialEq, ::prost::Message)]
303pub struct ReconcileData {
304    #[prost(uint32, tag = "1")]
305    pub fragment: u32,
306    #[prost(message, repeated, tag = "2")]
307    pub entries: ::prost::alloc::vec::Vec<ReconcileEntry>,
308    #[prost(uint64, tag = "3")]
309    pub session_id: u64,
310    #[prost(uint64, tag = "4")]
311    pub round_id: u64,
312    #[prost(uint64, tag = "5")]
313    pub chunk_seq: u64,
314    /// V3 page correlation within one bounded fetch chunk. Large value sets are
315    /// streamed across exact-byte-bounded pages.
316    #[prost(uint64, tag = "6")]
317    pub page_seq: u64,
318    #[prost(bool, tag = "7")]
319    pub done: bool,
320}
321/// Phase 6: multi-key fan-out. One message per remote fragment/owner attempt.
322#[derive(Clone, PartialEq, ::prost::Message)]
323pub struct BatchPut {
324    #[prost(message, repeated, tag = "1")]
325    pub puts: ::prost::alloc::vec::Vec<ForwardedPut>,
326    /// Phase 7: priority applied to every put in the batch.
327    #[prost(enumeration = "Priority", tag = "2")]
328    pub priority: i32,
329    /// Correlates one ordered result per `puts` entry.
330    #[prost(uint64, tag = "3")]
331    pub req_id: u64,
332}
333#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
334pub struct MutationResult {
335    #[prost(string, tag = "1")]
336    pub key: ::prost::alloc::string::String,
337    #[prost(enumeration = "MutationStatus", tag = "2")]
338    pub status: i32,
339    #[prost(string, tag = "3")]
340    pub error: ::prost::alloc::string::String,
341    #[prost(uint64, tag = "4")]
342    pub winner_timestamp_ms: u64,
343    #[prost(string, tag = "5")]
344    pub winner_node_id: ::prost::alloc::string::String,
345    #[prost(bool, tag = "6")]
346    pub winner_is_tombstone: bool,
347    #[prost(uint32, tag = "7")]
348    pub request_index: u32,
349    /// Encoded WriteConcernResult, present only when a policy was requested.
350    #[prost(bytes = "vec", optional, tag = "8")]
351    pub write_concern: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
352    #[prost(uint64, tag = "9")]
353    pub winner_logical_counter: u64,
354}
355#[non_exhaustive]
356#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
357pub struct WriteConcernPolicy {
358    #[prost(enumeration = "WriteConcernLevel", tag = "1")]
359    pub level: i32,
360    #[prost(uint32, tag = "2")]
361    pub acknowledgements: u32,
362    #[prost(uint64, tag = "3")]
363    pub timeout_ms: u64,
364    #[prost(bool, tag = "4")]
365    pub require_other_region: bool,
366    /// Reject before apply when an operational cap would lower the requested count.
367    #[prost(bool, tag = "5")]
368    pub strict_acknowledgements: bool,
369    #[prost(enumeration = "WriteDurability", tag = "6")]
370    pub minimum_durability: i32,
371    #[prost(bool, tag = "7")]
372    pub require_evidence: bool,
373}
374#[non_exhaustive]
375#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
376pub struct WriteOperationEvidence {
377    #[prost(uint32, tag = "1")]
378    pub fragment: u32,
379    #[prost(bytes = "vec", tag = "2")]
380    pub key_digest: ::prost::alloc::vec::Vec<u8>,
381    #[prost(bytes = "vec", tag = "3")]
382    pub value_digest: ::prost::alloc::vec::Vec<u8>,
383    #[prost(uint64, tag = "4")]
384    pub timestamp_ms: u64,
385    #[prost(uint64, tag = "5")]
386    pub logical_counter: u64,
387    #[prost(string, tag = "6")]
388    pub node_id: ::prost::alloc::string::String,
389    #[prost(bool, tag = "7")]
390    pub is_tombstone: bool,
391    #[prost(uint64, optional, tag = "8")]
392    pub expires_at_ms: ::core::option::Option<u64>,
393    #[prost(bytes = "vec", tag = "9")]
394    pub operation_digest: ::prost::alloc::vec::Vec<u8>,
395}
396#[non_exhaustive]
397#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
398pub struct WriteAcknowledgement {
399    #[prost(uint32, tag = "1")]
400    pub replica_index: u32,
401    #[prost(enumeration = "WriteDurability", tag = "2")]
402    pub durability: i32,
403}
404#[non_exhaustive]
405#[derive(Clone, PartialEq, ::prost::Message)]
406pub struct WriteConcernEvidence {
407    #[prost(message, optional, tag = "1")]
408    pub operation: ::core::option::Option<WriteOperationEvidence>,
409    #[prost(string, repeated, tag = "2")]
410    pub eligible_nodes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
411    #[prost(bytes = "vec", tag = "3")]
412    pub replica_set_digest: ::prost::alloc::vec::Vec<u8>,
413    #[prost(message, repeated, tag = "4")]
414    pub acknowledgements: ::prost::alloc::vec::Vec<WriteAcknowledgement>,
415}
416#[non_exhaustive]
417#[derive(Clone, PartialEq, ::prost::Message)]
418pub struct WriteConcernResult {
419    #[prost(enumeration = "WriteConcernStatus", tag = "1")]
420    pub status: i32,
421    #[prost(string, tag = "2")]
422    pub receiving_node: ::prost::alloc::string::String,
423    #[prost(uint32, tag = "3")]
424    pub replica_count: u32,
425    #[prost(uint32, tag = "4")]
426    pub requested_acknowledgements: u32,
427    #[prost(uint32, tag = "5")]
428    pub required_acknowledgements: u32,
429    #[prost(string, repeated, tag = "6")]
430    pub acknowledged_nodes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
431    #[prost(string, tag = "7")]
432    pub error: ::prost::alloc::string::String,
433    #[prost(string, optional, tag = "8")]
434    pub receiving_region: ::core::option::Option<::prost::alloc::string::String>,
435    #[prost(string, repeated, tag = "9")]
436    pub outside_region_acknowledged_nodes: ::prost::alloc::vec::Vec<
437        ::prost::alloc::string::String,
438    >,
439    #[prost(message, optional, tag = "10")]
440    pub evidence: ::core::option::Option<WriteConcernEvidence>,
441    #[prost(enumeration = "WriteDurability", tag = "11")]
442    pub requested_durability: i32,
443}
444#[derive(Clone, PartialEq, ::prost::Message)]
445pub struct MutationResponse {
446    #[prost(uint64, tag = "1")]
447    pub req_id: u64,
448    #[prost(message, repeated, tag = "2")]
449    pub results: ::prost::alloc::vec::Vec<MutationResult>,
450}
451#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
452pub struct BatchGet {
453    #[prost(uint64, tag = "1")]
454    pub req_id: u64,
455    #[prost(string, repeated, tag = "2")]
456    pub keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
457    /// Phase 7: priority applied to every get in the batch.
458    #[prost(enumeration = "Priority", tag = "3")]
459    pub priority: i32,
460}
461#[derive(Clone, PartialEq, ::prost::Message)]
462pub struct BatchGetResponse {
463    #[prost(uint64, tag = "1")]
464    pub req_id: u64,
465    /// A non-empty request returns either
466    /// an empty unavailable response or a non-empty ordered prefix. The caller
467    /// resumes an omitted suffix under a fresh request id.
468    #[prost(message, repeated, tag = "2")]
469    pub results: ::prost::alloc::vec::Vec<batch_get_response::KeyValue>,
470}
471/// Nested message and enum types in `BatchGetResponse`.
472pub mod batch_get_response {
473    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
474    pub struct KeyValue {
475        #[prost(string, tag = "1")]
476        pub key: ::prost::alloc::string::String,
477        #[prost(bool, tag = "2")]
478        pub found: bool,
479        #[prost(bytes = "vec", tag = "3")]
480        pub value: ::prost::alloc::vec::Vec<u8>,
481        #[prost(uint64, tag = "4")]
482        pub timestamp_ms: u64,
483        #[prost(string, tag = "5")]
484        pub node_id: ::prost::alloc::string::String,
485        #[prost(uint64, tag = "6")]
486        pub expires_at_ms: u64,
487        #[prost(bool, tag = "7")]
488        pub is_tombstone: bool,
489        /// Phase 7: true if the read was shed due to backpressure (distinct
490        /// from not-found).
491        #[prost(bool, tag = "8")]
492        pub shed: bool,
493        #[prost(uint64, tag = "9")]
494        pub logical_counter: u64,
495    }
496}
497#[derive(Clone, PartialEq, ::prost::Message)]
498pub struct Envelope {
499    #[prost(
500        oneof = "envelope::Msg",
501        tags = "1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24"
502    )]
503    pub msg: ::core::option::Option<envelope::Msg>,
504}
505/// Nested message and enum types in `Envelope`.
506pub mod envelope {
507    #[derive(Clone, PartialEq, ::prost::Oneof)]
508    pub enum Msg {
509        #[prost(message, tag = "1")]
510        Hello(super::Hello),
511        #[prost(message, tag = "5")]
512        ForwardedPut(super::ForwardedPut),
513        #[prost(message, tag = "6")]
514        ForwardedGet(super::ForwardedGet),
515        #[prost(message, tag = "7")]
516        GetResponse(super::GetResponse),
517        #[prost(message, tag = "8")]
518        SessionStart(super::SessionStart),
519        #[prost(message, tag = "9")]
520        ReplicateBatch(super::ReplicateBatch),
521        #[prost(message, tag = "10")]
522        BatchAck(super::BatchAck),
523        #[prost(message, tag = "11")]
524        ReconcileRequest(super::ReconcileRequest),
525        #[prost(message, tag = "12")]
526        ReconcileResponse(super::ReconcileResponse),
527        #[prost(message, tag = "13")]
528        ReconcileFetch(super::ReconcileFetch),
529        #[prost(message, tag = "14")]
530        ReconcileData(super::ReconcileData),
531        #[prost(message, tag = "15")]
532        BatchPut(super::BatchPut),
533        #[prost(message, tag = "16")]
534        BatchGet(super::BatchGet),
535        #[prost(message, tag = "17")]
536        BatchGetResponse(super::BatchGetResponse),
537        #[prost(message, tag = "18")]
538        MutationResponse(super::MutationResponse),
539        #[prost(message, tag = "19")]
540        BatchNack(super::BatchNack),
541        #[prost(message, tag = "20")]
542        HelloAuth(super::HelloAuth),
543        #[prost(message, tag = "21")]
544        ScanRequest(super::ScanRequest),
545        #[prost(message, tag = "22")]
546        ScanResponse(super::ScanResponse),
547        #[prost(message, tag = "23")]
548        QueryPageRequest(super::QueryPageRequest),
549        #[prost(message, tag = "24")]
550        QueryPageResponse(super::QueryPageResponse),
551    }
552}
553/// Distributed scan: coordinator -> fragment holder. Mirrors ForwardedGet:
554/// one holder per fragment, failover across replica_order, hop-bounded
555/// re-forwarding during placement migration. The spec is data, never code.
556#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
557pub struct ScanRequest {
558    #[prost(uint64, tag = "1")]
559    pub req_id: u64,
560    #[prost(uint32, tag = "2")]
561    pub fragment: u32,
562    /// Matcher descriptor: 0=all, 1=key prefix.
563    #[prost(uint32, tag = "3")]
564    pub matcher_kind: u32,
565    /// Matcher argument: prefix bytes when matcher_kind=1.
566    #[prost(bytes = "vec", tag = "4")]
567    pub matcher_arg: ::prost::alloc::vec::Vec<u8>,
568    /// Transform descriptor: 0=identity, 1=key_only, 2=prefix_bytes.
569    #[prost(uint32, tag = "5")]
570    pub transform_kind: u32,
571    /// Transform argument: N when transform_kind=2.
572    #[prost(uint32, tag = "6")]
573    pub transform_arg: u32,
574    /// Per-fragment match bound. 0 = server default. This bound is also the
575    /// wire-size safety: the response is a single envelope, so limit *
576    /// avg value size must stay comfortably under the 16 MiB frame cap.
577    #[prost(uint32, tag = "7")]
578    pub limit: u32,
579    /// Skip-first-N pagination cursor (deterministic key order).
580    #[prost(uint64, tag = "8")]
581    pub offset: u64,
582    /// Always PRIORITY_BACKGROUND for scans.
583    #[prost(enumeration = "Priority", tag = "9")]
584    pub priority: i32,
585    /// Re-forward bound, as with ForwardedGet.
586    #[prost(uint32, tag = "10")]
587    pub hops: u32,
588}
589/// Holder -> coordinator. A single response per request; the per-fragment
590/// limit keeps it under the frame cap.
591#[derive(Clone, PartialEq, ::prost::Message)]
592pub struct ScanResponse {
593    #[prost(uint64, tag = "1")]
594    pub req_id: u64,
595    #[prost(message, repeated, tag = "2")]
596    pub matches: ::prost::alloc::vec::Vec<ScanMatch>,
597    /// Non-empty = this holder could not serve the scan (not serving, bad
598    /// spec, shed). The coordinator fails over to the next replica holder.
599    #[prost(string, tag = "3")]
600    pub error: ::prost::alloc::string::String,
601}
602#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
603pub struct ScanMatch {
604    #[prost(string, tag = "1")]
605    pub key: ::prost::alloc::string::String,
606    /// Transformed value. Empty when the transform is key_only.
607    #[prost(bytes = "vec", tag = "2")]
608    pub value: ::prost::alloc::vec::Vec<u8>,
609}
610/// Bounded declarative query traversal. Continuations pin one holder incarnation,
611/// revision, and TTL observation time. SQL is validated as data, never executed code.
612#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
613pub struct QueryPageRequest {
614    #[prost(uint64, tag = "1")]
615    pub req_id: u64,
616    #[prost(uint32, tag = "2")]
617    pub fragment: u32,
618    #[prost(string, tag = "3")]
619    pub sql: ::prost::alloc::string::String,
620    #[prost(string, tag = "4")]
621    pub after_key: ::prost::alloc::string::String,
622    #[prost(bool, tag = "5")]
623    pub continuation: bool,
624    #[prost(uint64, tag = "6")]
625    pub revision: u64,
626    #[prost(uint64, tag = "7")]
627    pub snapshot_time_ms: u64,
628    #[prost(uint64, tag = "8")]
629    pub incarnation: u64,
630    #[prost(uint32, tag = "9")]
631    pub max_rows: u32,
632    #[prost(uint32, tag = "10")]
633    pub max_bytes: u32,
634    #[prost(uint32, tag = "11")]
635    pub max_visits: u32,
636    #[prost(bool, tag = "12")]
637    pub verify_only: bool,
638}
639#[derive(Clone, PartialEq, ::prost::Message)]
640pub struct QueryPageResponse {
641    #[prost(uint64, tag = "1")]
642    pub req_id: u64,
643    #[prost(uint32, tag = "2")]
644    pub fragment: u32,
645    #[prost(message, repeated, tag = "3")]
646    pub rows: ::prost::alloc::vec::Vec<QueryPageRow>,
647    #[prost(string, tag = "4")]
648    pub next_after_key: ::prost::alloc::string::String,
649    #[prost(bool, tag = "5")]
650    pub done: bool,
651    #[prost(uint64, tag = "6")]
652    pub revision: u64,
653    #[prost(uint64, tag = "7")]
654    pub snapshot_time_ms: u64,
655    #[prost(uint64, tag = "8")]
656    pub incarnation: u64,
657    #[prost(uint32, tag = "9")]
658    pub visited: u32,
659    #[prost(uint64, tag = "10")]
660    pub work_bytes: u64,
661    #[prost(enumeration = "QueryPageStatus", tag = "11")]
662    pub status: i32,
663    #[prost(string, tag = "12")]
664    pub error: ::prost::alloc::string::String,
665}
666#[derive(Clone, PartialEq, ::prost::Message)]
667pub struct QueryPageRow {
668    #[prost(string, tag = "1")]
669    pub key: ::prost::alloc::string::String,
670    #[prost(message, repeated, tag = "2")]
671    pub cells: ::prost::alloc::vec::Vec<QueryCell>,
672}
673#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
674pub struct QueryCell {
675    #[prost(oneof = "query_cell::Value", tags = "1, 2, 3, 4")]
676    pub value: ::core::option::Option<query_cell::Value>,
677}
678/// Nested message and enum types in `QueryCell`.
679pub mod query_cell {
680    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
681    pub enum Value {
682        #[prost(bool, tag = "1")]
683        Null(bool),
684        #[prost(string, tag = "2")]
685        Text(::prost::alloc::string::String),
686        #[prost(bytes, tag = "3")]
687        Bytes(::prost::alloc::vec::Vec<u8>),
688        /// Canonical base-ten integer; preserves full i128 precision in every SDK.
689        #[prost(string, tag = "4")]
690        Integer(::prost::alloc::string::String),
691    }
692}
693/// Phase 7: operation priority for traffic isolation. Wire values are
694/// stable; PRIORITY_DEFAULT = 0 so an absent/unknown field degrades to
695/// normal priority rather than misrouting.
696#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
697#[repr(i32)]
698pub enum Priority {
699    Default = 0,
700    High = 1,
701    Background = 2,
702}
703impl Priority {
704    /// String value of the enum field names used in the ProtoBuf definition.
705    ///
706    /// The values are not transformed in any way and thus are considered stable
707    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
708    pub fn as_str_name(&self) -> &'static str {
709        match self {
710            Self::Default => "PRIORITY_DEFAULT",
711            Self::High => "PRIORITY_HIGH",
712            Self::Background => "PRIORITY_BACKGROUND",
713        }
714    }
715    /// Creates an enum from field names used in the ProtoBuf definition.
716    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
717        match value {
718            "PRIORITY_DEFAULT" => Some(Self::Default),
719            "PRIORITY_HIGH" => Some(Self::High),
720            "PRIORITY_BACKGROUND" => Some(Self::Background),
721            _ => None,
722        }
723    }
724}
725#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
726#[repr(i32)]
727pub enum ReplicationAckLevel {
728    Unknown = 0,
729    Applied = 1,
730    StoreCommitted = 2,
731    StableCommitted = 3,
732}
733impl ReplicationAckLevel {
734    /// String value of the enum field names used in the ProtoBuf definition.
735    ///
736    /// The values are not transformed in any way and thus are considered stable
737    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
738    pub fn as_str_name(&self) -> &'static str {
739        match self {
740            Self::Unknown => "REPLICATION_ACK_LEVEL_UNKNOWN",
741            Self::Applied => "REPLICATION_ACK_LEVEL_APPLIED",
742            Self::StoreCommitted => "REPLICATION_ACK_LEVEL_STORE_COMMITTED",
743            Self::StableCommitted => "REPLICATION_ACK_LEVEL_STABLE_COMMITTED",
744        }
745    }
746    /// Creates an enum from field names used in the ProtoBuf definition.
747    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
748        match value {
749            "REPLICATION_ACK_LEVEL_UNKNOWN" => Some(Self::Unknown),
750            "REPLICATION_ACK_LEVEL_APPLIED" => Some(Self::Applied),
751            "REPLICATION_ACK_LEVEL_STORE_COMMITTED" => Some(Self::StoreCommitted),
752            "REPLICATION_ACK_LEVEL_STABLE_COMMITTED" => Some(Self::StableCommitted),
753            _ => None,
754        }
755    }
756}
757/// Exact result of one remotely forwarded mutation. Results in a
758/// MutationResponse have the same order and cardinality as the request.
759#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
760#[repr(i32)]
761pub enum MutationStatus {
762    Unknown = 0,
763    Applied = 1,
764    AlreadyPresent = 2,
765    Superseded = 3,
766    Expired = 4,
767    Backpressure = 5,
768    StorageError = 6,
769    ActorError = 7,
770    Unavailable = 8,
771    /// The mutation may have applied; a fresh-version retry is unsafe.
772    UnknownOutcome = 9,
773}
774impl MutationStatus {
775    /// String value of the enum field names used in the ProtoBuf definition.
776    ///
777    /// The values are not transformed in any way and thus are considered stable
778    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
779    pub fn as_str_name(&self) -> &'static str {
780        match self {
781            Self::Unknown => "MUTATION_STATUS_UNKNOWN",
782            Self::Applied => "MUTATION_STATUS_APPLIED",
783            Self::AlreadyPresent => "MUTATION_STATUS_ALREADY_PRESENT",
784            Self::Superseded => "MUTATION_STATUS_SUPERSEDED",
785            Self::Expired => "MUTATION_STATUS_EXPIRED",
786            Self::Backpressure => "MUTATION_STATUS_BACKPRESSURE",
787            Self::StorageError => "MUTATION_STATUS_STORAGE_ERROR",
788            Self::ActorError => "MUTATION_STATUS_ACTOR_ERROR",
789            Self::Unavailable => "MUTATION_STATUS_UNAVAILABLE",
790            Self::UnknownOutcome => "MUTATION_STATUS_UNKNOWN_OUTCOME",
791        }
792    }
793    /// Creates an enum from field names used in the ProtoBuf definition.
794    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
795        match value {
796            "MUTATION_STATUS_UNKNOWN" => Some(Self::Unknown),
797            "MUTATION_STATUS_APPLIED" => Some(Self::Applied),
798            "MUTATION_STATUS_ALREADY_PRESENT" => Some(Self::AlreadyPresent),
799            "MUTATION_STATUS_SUPERSEDED" => Some(Self::Superseded),
800            "MUTATION_STATUS_EXPIRED" => Some(Self::Expired),
801            "MUTATION_STATUS_BACKPRESSURE" => Some(Self::Backpressure),
802            "MUTATION_STATUS_STORAGE_ERROR" => Some(Self::StorageError),
803            "MUTATION_STATUS_ACTOR_ERROR" => Some(Self::ActorError),
804            "MUTATION_STATUS_UNAVAILABLE" => Some(Self::Unavailable),
805            "MUTATION_STATUS_UNKNOWN_OUTCOME" => Some(Self::UnknownOutcome),
806            _ => None,
807        }
808    }
809}
810#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
811#[repr(i32)]
812pub enum WriteConcernLevel {
813    WriteConcernLocal = 0,
814    WriteConcernCount = 1,
815    WriteConcernMajority = 2,
816}
817impl WriteConcernLevel {
818    /// String value of the enum field names used in the ProtoBuf definition.
819    ///
820    /// The values are not transformed in any way and thus are considered stable
821    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
822    pub fn as_str_name(&self) -> &'static str {
823        match self {
824            Self::WriteConcernLocal => "WRITE_CONCERN_LOCAL",
825            Self::WriteConcernCount => "WRITE_CONCERN_COUNT",
826            Self::WriteConcernMajority => "WRITE_CONCERN_MAJORITY",
827        }
828    }
829    /// Creates an enum from field names used in the ProtoBuf definition.
830    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
831        match value {
832            "WRITE_CONCERN_LOCAL" => Some(Self::WriteConcernLocal),
833            "WRITE_CONCERN_COUNT" => Some(Self::WriteConcernCount),
834            "WRITE_CONCERN_MAJORITY" => Some(Self::WriteConcernMajority),
835            _ => None,
836        }
837    }
838}
839#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
840#[repr(i32)]
841pub enum WriteDurability {
842    WriteMemoryApplied = 0,
843    WriteStoreCommitted = 1,
844    WriteStableCommitted = 2,
845}
846impl WriteDurability {
847    /// String value of the enum field names used in the ProtoBuf definition.
848    ///
849    /// The values are not transformed in any way and thus are considered stable
850    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
851    pub fn as_str_name(&self) -> &'static str {
852        match self {
853            Self::WriteMemoryApplied => "WRITE_MEMORY_APPLIED",
854            Self::WriteStoreCommitted => "WRITE_STORE_COMMITTED",
855            Self::WriteStableCommitted => "WRITE_STABLE_COMMITTED",
856        }
857    }
858    /// Creates an enum from field names used in the ProtoBuf definition.
859    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
860        match value {
861            "WRITE_MEMORY_APPLIED" => Some(Self::WriteMemoryApplied),
862            "WRITE_STORE_COMMITTED" => Some(Self::WriteStoreCommitted),
863            "WRITE_STABLE_COMMITTED" => Some(Self::WriteStableCommitted),
864            _ => None,
865        }
866    }
867}
868#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
869#[repr(i32)]
870pub enum WriteConcernStatus {
871    WriteConcernSatisfied = 0,
872    WriteConcernTimedOut = 1,
873    WriteConcernInvalid = 2,
874    WriteConcernBackpressure = 3,
875    WriteConcernUnsupported = 4,
876    WriteConcernDurabilityFailed = 5,
877    WriteConcernUnknownOutcome = 6,
878}
879impl WriteConcernStatus {
880    /// String value of the enum field names used in the ProtoBuf definition.
881    ///
882    /// The values are not transformed in any way and thus are considered stable
883    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
884    pub fn as_str_name(&self) -> &'static str {
885        match self {
886            Self::WriteConcernSatisfied => "WRITE_CONCERN_SATISFIED",
887            Self::WriteConcernTimedOut => "WRITE_CONCERN_TIMED_OUT",
888            Self::WriteConcernInvalid => "WRITE_CONCERN_INVALID",
889            Self::WriteConcernBackpressure => "WRITE_CONCERN_BACKPRESSURE",
890            Self::WriteConcernUnsupported => "WRITE_CONCERN_UNSUPPORTED",
891            Self::WriteConcernDurabilityFailed => "WRITE_CONCERN_DURABILITY_FAILED",
892            Self::WriteConcernUnknownOutcome => "WRITE_CONCERN_UNKNOWN_OUTCOME",
893        }
894    }
895    /// Creates an enum from field names used in the ProtoBuf definition.
896    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
897        match value {
898            "WRITE_CONCERN_SATISFIED" => Some(Self::WriteConcernSatisfied),
899            "WRITE_CONCERN_TIMED_OUT" => Some(Self::WriteConcernTimedOut),
900            "WRITE_CONCERN_INVALID" => Some(Self::WriteConcernInvalid),
901            "WRITE_CONCERN_BACKPRESSURE" => Some(Self::WriteConcernBackpressure),
902            "WRITE_CONCERN_UNSUPPORTED" => Some(Self::WriteConcernUnsupported),
903            "WRITE_CONCERN_DURABILITY_FAILED" => Some(Self::WriteConcernDurabilityFailed),
904            "WRITE_CONCERN_UNKNOWN_OUTCOME" => Some(Self::WriteConcernUnknownOutcome),
905            _ => None,
906        }
907    }
908}
909#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
910#[repr(i32)]
911pub enum QueryPageStatus {
912    Unknown = 0,
913    Ok = 1,
914    Changed = 2,
915    Backpressure = 3,
916    Unavailable = 4,
917    Invalid = 5,
918    Budget = 6,
919}
920impl QueryPageStatus {
921    /// String value of the enum field names used in the ProtoBuf definition.
922    ///
923    /// The values are not transformed in any way and thus are considered stable
924    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
925    pub fn as_str_name(&self) -> &'static str {
926        match self {
927            Self::Unknown => "QUERY_PAGE_STATUS_UNKNOWN",
928            Self::Ok => "QUERY_PAGE_STATUS_OK",
929            Self::Changed => "QUERY_PAGE_STATUS_CHANGED",
930            Self::Backpressure => "QUERY_PAGE_STATUS_BACKPRESSURE",
931            Self::Unavailable => "QUERY_PAGE_STATUS_UNAVAILABLE",
932            Self::Invalid => "QUERY_PAGE_STATUS_INVALID",
933            Self::Budget => "QUERY_PAGE_STATUS_BUDGET",
934        }
935    }
936    /// Creates an enum from field names used in the ProtoBuf definition.
937    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
938        match value {
939            "QUERY_PAGE_STATUS_UNKNOWN" => Some(Self::Unknown),
940            "QUERY_PAGE_STATUS_OK" => Some(Self::Ok),
941            "QUERY_PAGE_STATUS_CHANGED" => Some(Self::Changed),
942            "QUERY_PAGE_STATUS_BACKPRESSURE" => Some(Self::Backpressure),
943            "QUERY_PAGE_STATUS_UNAVAILABLE" => Some(Self::Unavailable),
944            "QUERY_PAGE_STATUS_INVALID" => Some(Self::Invalid),
945            "QUERY_PAGE_STATUS_BUDGET" => Some(Self::Budget),
946            _ => None,
947        }
948    }
949}