bigtable_rs/google/
google.bigtable.v2.rs

1// This file is @generated by prost-build.
2/// `Type` represents the type of data that is written to, read from, or stored
3/// in Bigtable. It is heavily based on the GoogleSQL standard to help maintain
4/// familiarity and consistency across products and features.
5///
6/// For compatibility with Bigtable's existing untyped APIs, each `Type` includes
7/// an `Encoding` which describes how to convert to/from the underlying data.
8///
9/// Each encoding also defines the following properties:
10///
11/// * Order-preserving: Does the encoded value sort consistently with the
12///   original typed value? Note that Bigtable will always sort data based on
13///   the raw encoded value, *not* the decoded type.
14///   * Example: BYTES values sort in the same order as their raw encodings.
15///   * Counterexample: Encoding INT64 as a fixed-width decimal string does
16///     *not* preserve sort order when dealing with negative numbers.
17///     `INT64(1) > INT64(-1)`, but `STRING("-00001") > STRING("00001)`.
18/// * Self-delimiting: If we concatenate two encoded values, can we always tell
19///   where the first one ends and the second one begins?
20///   * Example: If we encode INT64s to fixed-width STRINGs, the first value
21///     will always contain exactly N digits, possibly preceded by a sign.
22///   * Counterexample: If we concatenate two UTF-8 encoded STRINGs, we have
23///     no way to tell where the first one ends.
24/// * Compatibility: Which other systems have matching encoding schemes? For
25///   example, does this encoding have a GoogleSQL equivalent? HBase? Java?
26#[serde_with::serde_as]
27#[derive(serde::Serialize, serde::Deserialize)]
28#[serde(rename_all = "camelCase")]
29#[derive(Clone, PartialEq, ::prost::Message)]
30pub struct Type {
31    /// The kind of type that this represents.
32    #[prost(oneof = "r#type::Kind", tags = "1, 2, 5, 12, 9, 8, 10, 11, 6, 7, 3, 4")]
33    pub kind: ::core::option::Option<r#type::Kind>,
34}
35/// Nested message and enum types in `Type`.
36pub mod r#type {
37    /// Bytes
38    /// Values of type `Bytes` are stored in `Value.bytes_value`.
39    #[serde_with::serde_as]
40    #[derive(serde::Serialize, serde::Deserialize)]
41    #[serde(rename_all = "camelCase")]
42    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
43    pub struct Bytes {
44        /// The encoding to use when converting to/from lower level types.
45        #[prost(message, optional, tag = "1")]
46        pub encoding: ::core::option::Option<bytes::Encoding>,
47    }
48    /// Nested message and enum types in `Bytes`.
49    pub mod bytes {
50        /// Rules used to convert to/from lower level types.
51        #[serde_with::serde_as]
52        #[derive(serde::Serialize, serde::Deserialize)]
53        #[serde(rename_all = "camelCase")]
54        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
55        pub struct Encoding {
56            /// Which encoding to use.
57            #[prost(oneof = "encoding::Encoding", tags = "1")]
58            pub encoding: ::core::option::Option<encoding::Encoding>,
59        }
60        /// Nested message and enum types in `Encoding`.
61        pub mod encoding {
62            /// Leaves the value "as-is"
63            ///
64            /// * Order-preserving? Yes
65            /// * Self-delimiting? No
66            /// * Compatibility? N/A
67            #[serde_with::serde_as]
68            #[derive(serde::Serialize, serde::Deserialize)]
69            #[serde(rename_all = "camelCase")]
70            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
71            pub struct Raw {}
72            /// Which encoding to use.
73            #[serde_with::serde_as]
74            #[derive(serde::Serialize, serde::Deserialize)]
75            #[serde(rename_all = "camelCase")]
76            #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
77            pub enum Encoding {
78                /// Use `Raw` encoding.
79                #[prost(message, tag = "1")]
80                Raw(Raw),
81            }
82        }
83    }
84    /// String
85    /// Values of type `String` are stored in `Value.string_value`.
86    #[serde_with::serde_as]
87    #[derive(serde::Serialize, serde::Deserialize)]
88    #[serde(rename_all = "camelCase")]
89    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
90    pub struct String {
91        /// The encoding to use when converting to/from lower level types.
92        #[prost(message, optional, tag = "1")]
93        pub encoding: ::core::option::Option<string::Encoding>,
94    }
95    /// Nested message and enum types in `String`.
96    pub mod string {
97        /// Rules used to convert to/from lower level types.
98        #[serde_with::serde_as]
99        #[derive(serde::Serialize, serde::Deserialize)]
100        #[serde(rename_all = "camelCase")]
101        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
102        pub struct Encoding {
103            /// Which encoding to use.
104            #[prost(oneof = "encoding::Encoding", tags = "1, 2")]
105            pub encoding: ::core::option::Option<encoding::Encoding>,
106        }
107        /// Nested message and enum types in `Encoding`.
108        pub mod encoding {
109            /// Deprecated: prefer the equivalent `Utf8Bytes`.
110            #[serde_with::serde_as]
111            #[derive(serde::Serialize, serde::Deserialize)]
112            #[serde(rename_all = "camelCase")]
113            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
114            pub struct Utf8Raw {}
115            /// UTF-8 encoding
116            ///
117            /// * Order-preserving? Yes (code point order)
118            /// * Self-delimiting? No
119            /// * Compatibility?
120            ///   * BigQuery Federation `TEXT` encoding
121            ///   * HBase `Bytes.toBytes`
122            ///   * Java `String#getBytes(StandardCharsets.UTF_8)`
123            #[serde_with::serde_as]
124            #[derive(serde::Serialize, serde::Deserialize)]
125            #[serde(rename_all = "camelCase")]
126            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
127            pub struct Utf8Bytes {}
128            /// Which encoding to use.
129            #[serde_with::serde_as]
130            #[derive(serde::Serialize, serde::Deserialize)]
131            #[serde(rename_all = "camelCase")]
132            #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
133            pub enum Encoding {
134                /// Deprecated: if set, converts to an empty `utf8_bytes`.
135                #[prost(message, tag = "1")]
136                Utf8Raw(Utf8Raw),
137                /// Use `Utf8Bytes` encoding.
138                #[prost(message, tag = "2")]
139                Utf8Bytes(Utf8Bytes),
140            }
141        }
142    }
143    /// Int64
144    /// Values of type `Int64` are stored in `Value.int_value`.
145    #[serde_with::serde_as]
146    #[derive(serde::Serialize, serde::Deserialize)]
147    #[serde(rename_all = "camelCase")]
148    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
149    pub struct Int64 {
150        /// The encoding to use when converting to/from lower level types.
151        #[prost(message, optional, tag = "1")]
152        pub encoding: ::core::option::Option<int64::Encoding>,
153    }
154    /// Nested message and enum types in `Int64`.
155    pub mod int64 {
156        /// Rules used to convert to/from lower level types.
157        #[serde_with::serde_as]
158        #[derive(serde::Serialize, serde::Deserialize)]
159        #[serde(rename_all = "camelCase")]
160        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
161        pub struct Encoding {
162            /// Which encoding to use.
163            #[prost(oneof = "encoding::Encoding", tags = "1")]
164            pub encoding: ::core::option::Option<encoding::Encoding>,
165        }
166        /// Nested message and enum types in `Encoding`.
167        pub mod encoding {
168            /// Encodes the value as an 8-byte big endian twos complement `Bytes`
169            /// value.
170            ///
171            /// * Order-preserving? No (positive values only)
172            /// * Self-delimiting? Yes
173            /// * Compatibility?
174            ///   * BigQuery Federation `BINARY` encoding
175            ///   * HBase `Bytes.toBytes`
176            ///   * Java `ByteBuffer.putLong()` with `ByteOrder.BIG_ENDIAN`
177            #[serde_with::serde_as]
178            #[derive(serde::Serialize, serde::Deserialize)]
179            #[serde(rename_all = "camelCase")]
180            #[derive(Clone, Copy, PartialEq, ::prost::Message)]
181            pub struct BigEndianBytes {
182                /// Deprecated: ignored if set.
183                #[prost(message, optional, tag = "1")]
184                pub bytes_type: ::core::option::Option<super::super::Bytes>,
185            }
186            /// Which encoding to use.
187            #[serde_with::serde_as]
188            #[derive(serde::Serialize, serde::Deserialize)]
189            #[serde(rename_all = "camelCase")]
190            #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
191            pub enum Encoding {
192                /// Use `BigEndianBytes` encoding.
193                #[prost(message, tag = "1")]
194                BigEndianBytes(BigEndianBytes),
195            }
196        }
197    }
198    /// bool
199    /// Values of type `Bool` are stored in `Value.bool_value`.
200    #[serde_with::serde_as]
201    #[derive(serde::Serialize, serde::Deserialize)]
202    #[serde(rename_all = "camelCase")]
203    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
204    pub struct Bool {}
205    /// Float32
206    /// Values of type `Float32` are stored in `Value.float_value`.
207    #[serde_with::serde_as]
208    #[derive(serde::Serialize, serde::Deserialize)]
209    #[serde(rename_all = "camelCase")]
210    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
211    pub struct Float32 {}
212    /// Float64
213    /// Values of type `Float64` are stored in `Value.float_value`.
214    #[serde_with::serde_as]
215    #[derive(serde::Serialize, serde::Deserialize)]
216    #[serde(rename_all = "camelCase")]
217    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
218    pub struct Float64 {}
219    /// Timestamp
220    /// Values of type `Timestamp` are stored in `Value.timestamp_value`.
221    #[serde_with::serde_as]
222    #[derive(serde::Serialize, serde::Deserialize)]
223    #[serde(rename_all = "camelCase")]
224    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
225    pub struct Timestamp {}
226    /// Date
227    /// Values of type `Date` are stored in `Value.date_value`.
228    #[serde_with::serde_as]
229    #[derive(serde::Serialize, serde::Deserialize)]
230    #[serde(rename_all = "camelCase")]
231    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
232    pub struct Date {}
233    /// A structured data value, consisting of fields which map to dynamically
234    /// typed values.
235    /// Values of type `Struct` are stored in `Value.array_value` where entries are
236    /// in the same order and number as `field_types`.
237    #[serde_with::serde_as]
238    #[derive(serde::Serialize, serde::Deserialize)]
239    #[serde(rename_all = "camelCase")]
240    #[derive(Clone, PartialEq, ::prost::Message)]
241    pub struct Struct {
242        /// The names and types of the fields in this struct.
243        #[prost(message, repeated, tag = "1")]
244        pub fields: ::prost::alloc::vec::Vec<r#struct::Field>,
245    }
246    /// Nested message and enum types in `Struct`.
247    pub mod r#struct {
248        /// A struct field and its type.
249        #[serde_with::serde_as]
250        #[derive(serde::Serialize, serde::Deserialize)]
251        #[serde(rename_all = "camelCase")]
252        #[derive(Clone, PartialEq, ::prost::Message)]
253        pub struct Field {
254            /// The field name (optional). Fields without a `field_name` are considered
255            /// anonymous and cannot be referenced by name.
256            #[prost(string, tag = "1")]
257            pub field_name: ::prost::alloc::string::String,
258            /// The type of values in this field.
259            #[prost(message, optional, tag = "2")]
260            pub r#type: ::core::option::Option<super::super::Type>,
261        }
262    }
263    /// An ordered list of elements of a given type.
264    /// Values of type `Array` are stored in `Value.array_value`.
265    #[serde_with::serde_as]
266    #[derive(serde::Serialize, serde::Deserialize)]
267    #[serde(rename_all = "camelCase")]
268    #[derive(Clone, PartialEq, ::prost::Message)]
269    pub struct Array {
270        /// The type of the elements in the array. This must not be `Array`.
271        #[prost(message, optional, boxed, tag = "1")]
272        pub element_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
273    }
274    /// A mapping of keys to values of a given type.
275    /// Values of type `Map` are stored in a `Value.array_value` where each entry
276    /// is another `Value.array_value` with two elements (the key and the value,
277    /// in that order).
278    /// Normally encoded Map values won't have repeated keys, however, clients are
279    /// expected to handle the case in which they do. If the same key appears
280    /// multiple times, the *last* value takes precedence.
281    #[serde_with::serde_as]
282    #[derive(serde::Serialize, serde::Deserialize)]
283    #[serde(rename_all = "camelCase")]
284    #[derive(Clone, PartialEq, ::prost::Message)]
285    pub struct Map {
286        /// The type of a map key.
287        /// Only `Bytes`, `String`, and `Int64` are allowed as key types.
288        #[prost(message, optional, boxed, tag = "1")]
289        pub key_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
290        /// The type of the values in a map.
291        #[prost(message, optional, boxed, tag = "2")]
292        pub value_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
293    }
294    /// A value that combines incremental updates into a summarized value.
295    ///
296    /// Data is never directly written or read using type `Aggregate`. Writes will
297    /// provide either the `input_type` or `state_type`, and reads will always
298    /// return the `state_type` .
299    #[serde_with::serde_as]
300    #[derive(serde::Serialize, serde::Deserialize)]
301    #[serde(rename_all = "camelCase")]
302    #[derive(Clone, PartialEq, ::prost::Message)]
303    pub struct Aggregate {
304        /// Type of the inputs that are accumulated by this `Aggregate`, which must
305        /// specify a full encoding.
306        /// Use `AddInput` mutations to accumulate new inputs.
307        #[prost(message, optional, boxed, tag = "1")]
308        pub input_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
309        /// Output only. Type that holds the internal accumulator state for the
310        /// `Aggregate`. This is a function of the `input_type` and `aggregator`
311        /// chosen, and will always specify a full encoding.
312        #[prost(message, optional, boxed, tag = "2")]
313        pub state_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
314        /// Which aggregator function to use. The configured types must match.
315        #[prost(oneof = "aggregate::Aggregator", tags = "4, 5, 6, 7")]
316        pub aggregator: ::core::option::Option<aggregate::Aggregator>,
317    }
318    /// Nested message and enum types in `Aggregate`.
319    pub mod aggregate {
320        /// Computes the sum of the input values.
321        /// Allowed input: `Int64`
322        /// State: same as input
323        #[serde_with::serde_as]
324        #[derive(serde::Serialize, serde::Deserialize)]
325        #[serde(rename_all = "camelCase")]
326        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
327        pub struct Sum {}
328        /// Computes the max of the input values.
329        /// Allowed input: `Int64`
330        /// State: same as input
331        #[serde_with::serde_as]
332        #[derive(serde::Serialize, serde::Deserialize)]
333        #[serde(rename_all = "camelCase")]
334        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
335        pub struct Max {}
336        /// Computes the min of the input values.
337        /// Allowed input: `Int64`
338        /// State: same as input
339        #[serde_with::serde_as]
340        #[derive(serde::Serialize, serde::Deserialize)]
341        #[serde(rename_all = "camelCase")]
342        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
343        pub struct Min {}
344        /// Computes an approximate unique count over the input values. When using
345        /// raw data as input, be careful to use a consistent encoding. Otherwise
346        /// the same value encoded differently could count more than once, or two
347        /// distinct values could count as identical.
348        /// Input: Any, or omit for Raw
349        /// State: TBD
350        /// Special state conversions: `Int64` (the unique count estimate)
351        #[serde_with::serde_as]
352        #[derive(serde::Serialize, serde::Deserialize)]
353        #[serde(rename_all = "camelCase")]
354        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
355        pub struct HyperLogLogPlusPlusUniqueCount {}
356        /// Which aggregator function to use. The configured types must match.
357        #[serde_with::serde_as]
358        #[derive(serde::Serialize, serde::Deserialize)]
359        #[serde(rename_all = "camelCase")]
360        #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
361        pub enum Aggregator {
362            /// Sum aggregator.
363            #[prost(message, tag = "4")]
364            Sum(Sum),
365            /// HyperLogLogPlusPlusUniqueCount aggregator.
366            #[prost(message, tag = "5")]
367            HllppUniqueCount(HyperLogLogPlusPlusUniqueCount),
368            /// Max aggregator.
369            #[prost(message, tag = "6")]
370            Max(Max),
371            /// Min aggregator.
372            #[prost(message, tag = "7")]
373            Min(Min),
374        }
375    }
376    /// The kind of type that this represents.
377    #[serde_with::serde_as]
378    #[derive(serde::Serialize, serde::Deserialize)]
379    #[serde(rename_all = "camelCase")]
380    #[derive(Clone, PartialEq, ::prost::Oneof)]
381    pub enum Kind {
382        /// Bytes
383        #[prost(message, tag = "1")]
384        BytesType(Bytes),
385        /// String
386        #[prost(message, tag = "2")]
387        StringType(String),
388        /// Int64
389        #[prost(message, tag = "5")]
390        Int64Type(Int64),
391        /// Float32
392        #[prost(message, tag = "12")]
393        Float32Type(Float32),
394        /// Float64
395        #[prost(message, tag = "9")]
396        Float64Type(Float64),
397        /// Bool
398        #[prost(message, tag = "8")]
399        BoolType(Bool),
400        /// Timestamp
401        #[prost(message, tag = "10")]
402        TimestampType(Timestamp),
403        /// Date
404        #[prost(message, tag = "11")]
405        DateType(Date),
406        /// Aggregate
407        #[prost(message, tag = "6")]
408        AggregateType(::prost::alloc::boxed::Box<Aggregate>),
409        /// Struct
410        #[prost(message, tag = "7")]
411        StructType(Struct),
412        /// Array
413        #[prost(message, tag = "3")]
414        ArrayType(::prost::alloc::boxed::Box<Array>),
415        /// Map
416        #[prost(message, tag = "4")]
417        MapType(::prost::alloc::boxed::Box<Map>),
418    }
419}
420/// Specifies the complete (requested) contents of a single row of a table.
421/// Rows which exceed 256MiB in size cannot be read in full.
422#[serde_with::serde_as]
423#[derive(serde::Serialize, serde::Deserialize)]
424#[serde(rename_all = "camelCase")]
425#[derive(Clone, PartialEq, ::prost::Message)]
426pub struct Row {
427    /// The unique key which identifies this row within its table. This is the same
428    /// key that's used to identify the row in, for example, a MutateRowRequest.
429    /// May contain any non-empty byte string up to 4KiB in length.
430    #[prost(bytes = "vec", tag = "1")]
431    pub key: ::prost::alloc::vec::Vec<u8>,
432    /// May be empty, but only if the entire row is empty.
433    /// The mutual ordering of column families is not specified.
434    #[prost(message, repeated, tag = "2")]
435    pub families: ::prost::alloc::vec::Vec<Family>,
436}
437/// Specifies (some of) the contents of a single row/column family intersection
438/// of a table.
439#[serde_with::serde_as]
440#[derive(serde::Serialize, serde::Deserialize)]
441#[serde(rename_all = "camelCase")]
442#[derive(Clone, PartialEq, ::prost::Message)]
443pub struct Family {
444    /// The unique key which identifies this family within its row. This is the
445    /// same key that's used to identify the family in, for example, a RowFilter
446    /// which sets its "family_name_regex_filter" field.
447    /// Must match `\[-_.a-zA-Z0-9\]+`, except that AggregatingRowProcessors may
448    /// produce cells in a sentinel family with an empty name.
449    /// Must be no greater than 64 characters in length.
450    #[prost(string, tag = "1")]
451    pub name: ::prost::alloc::string::String,
452    /// Must not be empty. Sorted in order of increasing "qualifier".
453    #[prost(message, repeated, tag = "2")]
454    pub columns: ::prost::alloc::vec::Vec<Column>,
455}
456/// Specifies (some of) the contents of a single row/column intersection of a
457/// table.
458#[serde_with::serde_as]
459#[derive(serde::Serialize, serde::Deserialize)]
460#[serde(rename_all = "camelCase")]
461#[derive(Clone, PartialEq, ::prost::Message)]
462pub struct Column {
463    /// The unique key which identifies this column within its family. This is the
464    /// same key that's used to identify the column in, for example, a RowFilter
465    /// which sets its `column_qualifier_regex_filter` field.
466    /// May contain any byte string, including the empty string, up to 16kiB in
467    /// length.
468    #[prost(bytes = "vec", tag = "1")]
469    pub qualifier: ::prost::alloc::vec::Vec<u8>,
470    /// Must not be empty. Sorted in order of decreasing "timestamp_micros".
471    #[prost(message, repeated, tag = "2")]
472    pub cells: ::prost::alloc::vec::Vec<Cell>,
473}
474/// Specifies (some of) the contents of a single row/column/timestamp of a table.
475#[serde_with::serde_as]
476#[derive(serde::Serialize, serde::Deserialize)]
477#[serde(rename_all = "camelCase")]
478#[derive(Clone, PartialEq, ::prost::Message)]
479pub struct Cell {
480    /// The cell's stored timestamp, which also uniquely identifies it within
481    /// its column.
482    /// Values are always expressed in microseconds, but individual tables may set
483    /// a coarser granularity to further restrict the allowed values. For
484    /// example, a table which specifies millisecond granularity will only allow
485    /// values of `timestamp_micros` which are multiples of 1000.
486    #[prost(int64, tag = "1")]
487    pub timestamp_micros: i64,
488    /// The value stored in the cell.
489    /// May contain any byte string, including the empty string, up to 100MiB in
490    /// length.
491    #[prost(bytes = "vec", tag = "2")]
492    pub value: ::prost::alloc::vec::Vec<u8>,
493    /// Labels applied to the cell by a \[RowFilter\]\[google.bigtable.v2.RowFilter\].
494    #[prost(string, repeated, tag = "3")]
495    pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
496}
497/// `Value` represents a dynamically typed value.
498/// The typed fields in `Value` are used as a transport encoding for the actual
499/// value (which may be of a more complex type). See the documentation of the
500/// `Type` message for more details.
501#[serde_with::serde_as]
502#[derive(serde::Serialize, serde::Deserialize)]
503#[serde(rename_all = "camelCase")]
504#[derive(Clone, PartialEq, ::prost::Message)]
505pub struct Value {
506    /// The verified `Type` of this `Value`, if it cannot be inferred.
507    ///
508    /// Read results will never specify the encoding for `type` since the value
509    /// will already have been decoded by the server. Furthermore, the `type` will
510    /// be omitted entirely if it can be inferred from a previous response. The
511    /// exact semantics for inferring `type` will vary, and are therefore
512    /// documented separately for each read method.
513    ///
514    /// When using composite types (Struct, Array, Map) only the outermost `Value`
515    /// will specify the `type`. This top-level `type` will define the types for
516    /// any nested `Struct' fields, `Array`elements, or`Map`key/value pairs.  If a nested`Value`provides a`type\` on write, the request will be
517    /// rejected with INVALID_ARGUMENT.
518    #[prost(message, optional, tag = "7")]
519    pub r#type: ::core::option::Option<Type>,
520    /// Options for transporting values within the protobuf type system. A given
521    /// `kind` may support more than one `type` and vice versa. On write, this is
522    /// roughly analogous to a GoogleSQL literal.
523    ///
524    /// The value is `NULL` if none of the fields in `kind` is set. If `type` is
525    /// also omitted on write, we will infer it based on the schema.
526    #[prost(oneof = "value::Kind", tags = "8, 9, 2, 3, 6, 10, 11, 12, 13, 4")]
527    pub kind: ::core::option::Option<value::Kind>,
528}
529/// Nested message and enum types in `Value`.
530pub mod value {
531    /// Options for transporting values within the protobuf type system. A given
532    /// `kind` may support more than one `type` and vice versa. On write, this is
533    /// roughly analogous to a GoogleSQL literal.
534    ///
535    /// The value is `NULL` if none of the fields in `kind` is set. If `type` is
536    /// also omitted on write, we will infer it based on the schema.
537    #[serde_with::serde_as]
538    #[derive(serde::Serialize, serde::Deserialize)]
539    #[serde(rename_all = "camelCase")]
540    #[derive(Clone, PartialEq, ::prost::Oneof)]
541    pub enum Kind {
542        /// Represents a raw byte sequence with no type information.
543        /// The `type` field must be omitted.
544        #[prost(bytes, tag = "8")]
545        RawValue(::prost::alloc::vec::Vec<u8>),
546        /// Represents a raw cell timestamp with no type information.
547        /// The `type` field must be omitted.
548        #[prost(int64, tag = "9")]
549        RawTimestampMicros(i64),
550        /// Represents a typed value transported as a byte sequence.
551        #[prost(bytes, tag = "2")]
552        BytesValue(::prost::alloc::vec::Vec<u8>),
553        /// Represents a typed value transported as a string.
554        #[prost(string, tag = "3")]
555        StringValue(::prost::alloc::string::String),
556        /// Represents a typed value transported as an integer.
557        #[prost(int64, tag = "6")]
558        IntValue(i64),
559        /// Represents a typed value transported as a boolean.
560        #[prost(bool, tag = "10")]
561        BoolValue(bool),
562        /// Represents a typed value transported as a floating point number.
563        #[prost(double, tag = "11")]
564        FloatValue(f64),
565        /// Represents a typed value transported as a timestamp.
566        #[prost(message, tag = "12")]
567        TimestampValue(::prost_wkt_types::Timestamp),
568        /// Represents a typed value transported as a date.
569        #[prost(message, tag = "13")]
570        DateValue(super::super::super::r#type::Date),
571        /// Represents a typed value transported as a sequence of values.
572        /// To differentiate between `Struct`, `Array`, and `Map`, the outermost
573        /// `Value` must provide an explicit `type` on write. This `type` will
574        /// apply recursively to the nested `Struct` fields, `Array` elements,
575        /// or `Map` key/value pairs, which *must not* supply their own `type`.
576        #[prost(message, tag = "4")]
577        ArrayValue(super::ArrayValue),
578    }
579}
580/// `ArrayValue` is an ordered list of `Value`.
581#[serde_with::serde_as]
582#[derive(serde::Serialize, serde::Deserialize)]
583#[serde(rename_all = "camelCase")]
584#[derive(Clone, PartialEq, ::prost::Message)]
585pub struct ArrayValue {
586    /// The ordered elements in the array.
587    #[prost(message, repeated, tag = "1")]
588    pub values: ::prost::alloc::vec::Vec<Value>,
589}
590/// Specifies a contiguous range of rows.
591#[serde_with::serde_as]
592#[derive(serde::Serialize, serde::Deserialize)]
593#[serde(rename_all = "camelCase")]
594#[derive(Clone, PartialEq, ::prost::Message)]
595pub struct RowRange {
596    /// The row key at which to start the range.
597    /// If neither field is set, interpreted as the empty string, inclusive.
598    #[prost(oneof = "row_range::StartKey", tags = "1, 2")]
599    pub start_key: ::core::option::Option<row_range::StartKey>,
600    /// The row key at which to end the range.
601    /// If neither field is set, interpreted as the infinite row key, exclusive.
602    #[prost(oneof = "row_range::EndKey", tags = "3, 4")]
603    pub end_key: ::core::option::Option<row_range::EndKey>,
604}
605/// Nested message and enum types in `RowRange`.
606pub mod row_range {
607    /// The row key at which to start the range.
608    /// If neither field is set, interpreted as the empty string, inclusive.
609    #[serde_with::serde_as]
610    #[derive(serde::Serialize, serde::Deserialize)]
611    #[serde(rename_all = "camelCase")]
612    #[derive(Clone, PartialEq, ::prost::Oneof)]
613    pub enum StartKey {
614        /// Used when giving an inclusive lower bound for the range.
615        #[prost(bytes, tag = "1")]
616        StartKeyClosed(::prost::alloc::vec::Vec<u8>),
617        /// Used when giving an exclusive lower bound for the range.
618        #[prost(bytes, tag = "2")]
619        StartKeyOpen(::prost::alloc::vec::Vec<u8>),
620    }
621    /// The row key at which to end the range.
622    /// If neither field is set, interpreted as the infinite row key, exclusive.
623    #[serde_with::serde_as]
624    #[derive(serde::Serialize, serde::Deserialize)]
625    #[serde(rename_all = "camelCase")]
626    #[derive(Clone, PartialEq, ::prost::Oneof)]
627    pub enum EndKey {
628        /// Used when giving an exclusive upper bound for the range.
629        #[prost(bytes, tag = "3")]
630        EndKeyOpen(::prost::alloc::vec::Vec<u8>),
631        /// Used when giving an inclusive upper bound for the range.
632        #[prost(bytes, tag = "4")]
633        EndKeyClosed(::prost::alloc::vec::Vec<u8>),
634    }
635}
636/// Specifies a non-contiguous set of rows.
637#[serde_with::serde_as]
638#[derive(serde::Serialize, serde::Deserialize)]
639#[serde(rename_all = "camelCase")]
640#[derive(Clone, PartialEq, ::prost::Message)]
641pub struct RowSet {
642    /// Single rows included in the set.
643    #[prost(bytes = "vec", repeated, tag = "1")]
644    pub row_keys: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
645    /// Contiguous row ranges included in the set.
646    #[prost(message, repeated, tag = "2")]
647    pub row_ranges: ::prost::alloc::vec::Vec<RowRange>,
648}
649/// Specifies a contiguous range of columns within a single column family.
650/// The range spans from \<column_family\>:\<start_qualifier\> to
651/// \<column_family\>:\<end_qualifier\>, where both bounds can be either
652/// inclusive or exclusive.
653#[serde_with::serde_as]
654#[derive(serde::Serialize, serde::Deserialize)]
655#[serde(rename_all = "camelCase")]
656#[derive(Clone, PartialEq, ::prost::Message)]
657pub struct ColumnRange {
658    /// The name of the column family within which this range falls.
659    #[prost(string, tag = "1")]
660    pub family_name: ::prost::alloc::string::String,
661    /// The column qualifier at which to start the range (within `column_family`).
662    /// If neither field is set, interpreted as the empty string, inclusive.
663    #[prost(oneof = "column_range::StartQualifier", tags = "2, 3")]
664    pub start_qualifier: ::core::option::Option<column_range::StartQualifier>,
665    /// The column qualifier at which to end the range (within `column_family`).
666    /// If neither field is set, interpreted as the infinite string, exclusive.
667    #[prost(oneof = "column_range::EndQualifier", tags = "4, 5")]
668    pub end_qualifier: ::core::option::Option<column_range::EndQualifier>,
669}
670/// Nested message and enum types in `ColumnRange`.
671pub mod column_range {
672    /// The column qualifier at which to start the range (within `column_family`).
673    /// If neither field is set, interpreted as the empty string, inclusive.
674    #[serde_with::serde_as]
675    #[derive(serde::Serialize, serde::Deserialize)]
676    #[serde(rename_all = "camelCase")]
677    #[derive(Clone, PartialEq, ::prost::Oneof)]
678    pub enum StartQualifier {
679        /// Used when giving an inclusive lower bound for the range.
680        #[prost(bytes, tag = "2")]
681        StartQualifierClosed(::prost::alloc::vec::Vec<u8>),
682        /// Used when giving an exclusive lower bound for the range.
683        #[prost(bytes, tag = "3")]
684        StartQualifierOpen(::prost::alloc::vec::Vec<u8>),
685    }
686    /// The column qualifier at which to end the range (within `column_family`).
687    /// If neither field is set, interpreted as the infinite string, exclusive.
688    #[serde_with::serde_as]
689    #[derive(serde::Serialize, serde::Deserialize)]
690    #[serde(rename_all = "camelCase")]
691    #[derive(Clone, PartialEq, ::prost::Oneof)]
692    pub enum EndQualifier {
693        /// Used when giving an inclusive upper bound for the range.
694        #[prost(bytes, tag = "4")]
695        EndQualifierClosed(::prost::alloc::vec::Vec<u8>),
696        /// Used when giving an exclusive upper bound for the range.
697        #[prost(bytes, tag = "5")]
698        EndQualifierOpen(::prost::alloc::vec::Vec<u8>),
699    }
700}
701/// Specified a contiguous range of microsecond timestamps.
702#[serde_with::serde_as]
703#[derive(serde::Serialize, serde::Deserialize)]
704#[serde(rename_all = "camelCase")]
705#[derive(Clone, Copy, PartialEq, ::prost::Message)]
706pub struct TimestampRange {
707    /// Inclusive lower bound. If left empty, interpreted as 0.
708    #[prost(int64, tag = "1")]
709    pub start_timestamp_micros: i64,
710    /// Exclusive upper bound. If left empty, interpreted as infinity.
711    #[prost(int64, tag = "2")]
712    pub end_timestamp_micros: i64,
713}
714/// Specifies a contiguous range of raw byte values.
715#[serde_with::serde_as]
716#[derive(serde::Serialize, serde::Deserialize)]
717#[serde(rename_all = "camelCase")]
718#[derive(Clone, PartialEq, ::prost::Message)]
719pub struct ValueRange {
720    /// The value at which to start the range.
721    /// If neither field is set, interpreted as the empty string, inclusive.
722    #[prost(oneof = "value_range::StartValue", tags = "1, 2")]
723    pub start_value: ::core::option::Option<value_range::StartValue>,
724    /// The value at which to end the range.
725    /// If neither field is set, interpreted as the infinite string, exclusive.
726    #[prost(oneof = "value_range::EndValue", tags = "3, 4")]
727    pub end_value: ::core::option::Option<value_range::EndValue>,
728}
729/// Nested message and enum types in `ValueRange`.
730pub mod value_range {
731    /// The value at which to start the range.
732    /// If neither field is set, interpreted as the empty string, inclusive.
733    #[serde_with::serde_as]
734    #[derive(serde::Serialize, serde::Deserialize)]
735    #[serde(rename_all = "camelCase")]
736    #[derive(Clone, PartialEq, ::prost::Oneof)]
737    pub enum StartValue {
738        /// Used when giving an inclusive lower bound for the range.
739        #[prost(bytes, tag = "1")]
740        StartValueClosed(::prost::alloc::vec::Vec<u8>),
741        /// Used when giving an exclusive lower bound for the range.
742        #[prost(bytes, tag = "2")]
743        StartValueOpen(::prost::alloc::vec::Vec<u8>),
744    }
745    /// The value at which to end the range.
746    /// If neither field is set, interpreted as the infinite string, exclusive.
747    #[serde_with::serde_as]
748    #[derive(serde::Serialize, serde::Deserialize)]
749    #[serde(rename_all = "camelCase")]
750    #[derive(Clone, PartialEq, ::prost::Oneof)]
751    pub enum EndValue {
752        /// Used when giving an inclusive upper bound for the range.
753        #[prost(bytes, tag = "3")]
754        EndValueClosed(::prost::alloc::vec::Vec<u8>),
755        /// Used when giving an exclusive upper bound for the range.
756        #[prost(bytes, tag = "4")]
757        EndValueOpen(::prost::alloc::vec::Vec<u8>),
758    }
759}
760/// Takes a row as input and produces an alternate view of the row based on
761/// specified rules. For example, a RowFilter might trim down a row to include
762/// just the cells from columns matching a given regular expression, or might
763/// return all the cells of a row but not their values. More complicated filters
764/// can be composed out of these components to express requests such as, "within
765/// every column of a particular family, give just the two most recent cells
766/// which are older than timestamp X."
767///
768/// There are two broad categories of RowFilters (true filters and transformers),
769/// as well as two ways to compose simple filters into more complex ones
770/// (chains and interleaves). They work as follows:
771///
772/// * True filters alter the input row by excluding some of its cells wholesale
773///   from the output row. An example of a true filter is the `value_regex_filter`,
774///   which excludes cells whose values don't match the specified pattern. All
775///   regex true filters use RE2 syntax (<https://github.com/google/re2/wiki/Syntax>)
776///   in raw byte mode (RE2::Latin1), and are evaluated as full matches. An
777///   important point to keep in mind is that `RE2(.)` is equivalent by default to
778///   `RE2(\[^\n\])`, meaning that it does not match newlines. When attempting to
779///   match an arbitrary byte, you should therefore use the escape sequence `\C`,
780///   which may need to be further escaped as `\\C` in your client language.
781///
782/// * Transformers alter the input row by changing the values of some of its
783///   cells in the output, without excluding them completely. Currently, the only
784///   supported transformer is the `strip_value_transformer`, which replaces every
785///   cell's value with the empty string.
786///
787/// * Chains and interleaves are described in more detail in the
788///   RowFilter.Chain and RowFilter.Interleave documentation.
789///
790/// The total serialized size of a RowFilter message must not
791/// exceed 20480 bytes, and RowFilters may not be nested within each other
792/// (in Chains or Interleaves) to a depth of more than 20.
793#[serde_with::serde_as]
794#[derive(serde::Serialize, serde::Deserialize)]
795#[serde(rename_all = "camelCase")]
796#[derive(Clone, PartialEq, ::prost::Message)]
797pub struct RowFilter {
798    /// Which of the possible RowFilter types to apply. If none are set, this
799    /// RowFilter returns all cells in the input row.
800    #[prost(
801        oneof = "row_filter::Filter",
802        tags = "1, 2, 3, 16, 17, 18, 4, 14, 5, 6, 7, 8, 9, 15, 10, 11, 12, 13, 19"
803    )]
804    pub filter: ::core::option::Option<row_filter::Filter>,
805}
806/// Nested message and enum types in `RowFilter`.
807pub mod row_filter {
808    /// A RowFilter which sends rows through several RowFilters in sequence.
809    #[serde_with::serde_as]
810    #[derive(serde::Serialize, serde::Deserialize)]
811    #[serde(rename_all = "camelCase")]
812    #[derive(Clone, PartialEq, ::prost::Message)]
813    pub struct Chain {
814        /// The elements of "filters" are chained together to process the input row:
815        /// in row -> f(0) -> intermediate row -> f(1) -> ... -> f(N) -> out row
816        /// The full chain is executed atomically.
817        #[prost(message, repeated, tag = "1")]
818        pub filters: ::prost::alloc::vec::Vec<super::RowFilter>,
819    }
820    /// A RowFilter which sends each row to each of several component
821    /// RowFilters and interleaves the results.
822    #[serde_with::serde_as]
823    #[derive(serde::Serialize, serde::Deserialize)]
824    #[serde(rename_all = "camelCase")]
825    #[derive(Clone, PartialEq, ::prost::Message)]
826    pub struct Interleave {
827        /// The elements of "filters" all process a copy of the input row, and the
828        /// results are pooled, sorted, and combined into a single output row.
829        /// If multiple cells are produced with the same column and timestamp,
830        /// they will all appear in the output row in an unspecified mutual order.
831        /// Consider the following example, with three filters:
832        ///
833        /// ```text
834        ///                               input row
835        ///                                   |
836        ///         -----------------------------------------------------
837        ///         |                         |                         |
838        ///        f(0)                      f(1)                      f(2)
839        ///         |                         |                         |
840        /// 1: foo,bar,10,x             foo,bar,10,z              far,bar,7,a
841        /// 2: foo,blah,11,z            far,blah,5,x              far,blah,5,x
842        ///         |                         |                         |
843        ///         -----------------------------------------------------
844        ///                                   |
845        /// 1:                      foo,bar,10,z   // could have switched with #2
846        /// 2:                      foo,bar,10,x   // could have switched with #1
847        /// 3:                      foo,blah,11,z
848        /// 4:                      far,bar,7,a
849        /// 5:                      far,blah,5,x   // identical to #6
850        /// 6:                      far,blah,5,x   // identical to #5
851        /// ```
852        ///
853        /// All interleaved filters are executed atomically.
854        #[prost(message, repeated, tag = "1")]
855        pub filters: ::prost::alloc::vec::Vec<super::RowFilter>,
856    }
857    /// A RowFilter which evaluates one of two possible RowFilters, depending on
858    /// whether or not a predicate RowFilter outputs any cells from the input row.
859    ///
860    /// IMPORTANT NOTE: The predicate filter does not execute atomically with the
861    /// true and false filters, which may lead to inconsistent or unexpected
862    /// results. Additionally, Condition filters have poor performance, especially
863    /// when filters are set for the false condition.
864    #[serde_with::serde_as]
865    #[derive(serde::Serialize, serde::Deserialize)]
866    #[serde(rename_all = "camelCase")]
867    #[derive(Clone, PartialEq, ::prost::Message)]
868    pub struct Condition {
869        /// If `predicate_filter` outputs any cells, then `true_filter` will be
870        /// evaluated on the input row. Otherwise, `false_filter` will be evaluated.
871        #[prost(message, optional, boxed, tag = "1")]
872        pub predicate_filter: ::core::option::Option<::prost::alloc::boxed::Box<super::RowFilter>>,
873        /// The filter to apply to the input row if `predicate_filter` returns any
874        /// results. If not provided, no results will be returned in the true case.
875        #[prost(message, optional, boxed, tag = "2")]
876        pub true_filter: ::core::option::Option<::prost::alloc::boxed::Box<super::RowFilter>>,
877        /// The filter to apply to the input row if `predicate_filter` does not
878        /// return any results. If not provided, no results will be returned in the
879        /// false case.
880        #[prost(message, optional, boxed, tag = "3")]
881        pub false_filter: ::core::option::Option<::prost::alloc::boxed::Box<super::RowFilter>>,
882    }
883    /// Which of the possible RowFilter types to apply. If none are set, this
884    /// RowFilter returns all cells in the input row.
885    #[serde_with::serde_as]
886    #[derive(serde::Serialize, serde::Deserialize)]
887    #[serde(rename_all = "camelCase")]
888    #[derive(Clone, PartialEq, ::prost::Oneof)]
889    pub enum Filter {
890        /// Applies several RowFilters to the data in sequence, progressively
891        /// narrowing the results.
892        #[prost(message, tag = "1")]
893        Chain(Chain),
894        /// Applies several RowFilters to the data in parallel and combines the
895        /// results.
896        #[prost(message, tag = "2")]
897        Interleave(Interleave),
898        /// Applies one of two possible RowFilters to the data based on the output of
899        /// a predicate RowFilter.
900        #[prost(message, tag = "3")]
901        Condition(::prost::alloc::boxed::Box<Condition>),
902        /// ADVANCED USE ONLY.
903        /// Hook for introspection into the RowFilter. Outputs all cells directly to
904        /// the output of the read rather than to any parent filter. Consider the
905        /// following example:
906        ///
907        /// ```text
908        /// Chain(
909        ///    FamilyRegex("A"),
910        ///    Interleave(
911        ///      All(),
912        ///      Chain(Label("foo"), Sink())
913        ///    ),
914        ///    QualifierRegex("B")
915        /// )
916        ///
917        ///                      A,A,1,w
918        ///                      A,B,2,x
919        ///                      B,B,4,z
920        ///                         |
921        ///                  FamilyRegex("A")
922        ///                         |
923        ///                      A,A,1,w
924        ///                      A,B,2,x
925        ///                         |
926        ///            +------------+-------------+
927        ///            |                          |
928        ///          All()                    Label(foo)
929        ///            |                          |
930        ///         A,A,1,w              A,A,1,w,labels:\[foo\]
931        ///         A,B,2,x              A,B,2,x,labels:\[foo\]
932        ///            |                          |
933        ///            |                        Sink() --------------+
934        ///            |                          |                  |
935        ///            +------------+      x------+          A,A,1,w,labels:\[foo\]
936        ///                         |                        A,B,2,x,labels:\[foo\]
937        ///                      A,A,1,w                             |
938        ///                      A,B,2,x                             |
939        ///                         |                                |
940        ///                 QualifierRegex("B")                      |
941        ///                         |                                |
942        ///                      A,B,2,x                             |
943        ///                         |                                |
944        ///                         +--------------------------------+
945        ///                         |
946        ///                      A,A,1,w,labels:\[foo\]
947        ///                      A,B,2,x,labels:\[foo\]  // could be switched
948        ///                      A,B,2,x               // could be switched
949        /// ```
950        ///
951        /// Despite being excluded by the qualifier filter, a copy of every cell
952        /// that reaches the sink is present in the final result.
953        ///
954        /// As with an \[Interleave\]\[google.bigtable.v2.RowFilter.Interleave\],
955        /// duplicate cells are possible, and appear in an unspecified mutual order.
956        /// In this case we have a duplicate with column "A:B" and timestamp 2,
957        /// because one copy passed through the all filter while the other was
958        /// passed through the label and sink. Note that one copy has label "foo",
959        /// while the other does not.
960        ///
961        /// Cannot be used within the `predicate_filter`, `true_filter`, or
962        /// `false_filter` of a \[Condition\]\[google.bigtable.v2.RowFilter.Condition\].
963        #[prost(bool, tag = "16")]
964        Sink(bool),
965        /// Matches all cells, regardless of input. Functionally equivalent to
966        /// leaving `filter` unset, but included for completeness.
967        #[prost(bool, tag = "17")]
968        PassAllFilter(bool),
969        /// Does not match any cells, regardless of input. Useful for temporarily
970        /// disabling just part of a filter.
971        #[prost(bool, tag = "18")]
972        BlockAllFilter(bool),
973        /// Matches only cells from rows whose keys satisfy the given RE2 regex. In
974        /// other words, passes through the entire row when the key matches, and
975        /// otherwise produces an empty row.
976        /// Note that, since row keys can contain arbitrary bytes, the `\C` escape
977        /// sequence must be used if a true wildcard is desired. The `.` character
978        /// will not match the new line character `\n`, which may be present in a
979        /// binary key.
980        #[prost(bytes, tag = "4")]
981        RowKeyRegexFilter(::prost::alloc::vec::Vec<u8>),
982        /// Matches all cells from a row with probability p, and matches no cells
983        /// from the row with probability 1-p.
984        #[prost(double, tag = "14")]
985        RowSampleFilter(f64),
986        /// Matches only cells from columns whose families satisfy the given RE2
987        /// regex. For technical reasons, the regex must not contain the `:`
988        /// character, even if it is not being used as a literal.
989        /// Note that, since column families cannot contain the new line character
990        /// `\n`, it is sufficient to use `.` as a full wildcard when matching
991        /// column family names.
992        #[prost(string, tag = "5")]
993        FamilyNameRegexFilter(::prost::alloc::string::String),
994        /// Matches only cells from columns whose qualifiers satisfy the given RE2
995        /// regex.
996        /// Note that, since column qualifiers can contain arbitrary bytes, the `\C`
997        /// escape sequence must be used if a true wildcard is desired. The `.`
998        /// character will not match the new line character `\n`, which may be
999        /// present in a binary qualifier.
1000        #[prost(bytes, tag = "6")]
1001        ColumnQualifierRegexFilter(::prost::alloc::vec::Vec<u8>),
1002        /// Matches only cells from columns within the given range.
1003        #[prost(message, tag = "7")]
1004        ColumnRangeFilter(super::ColumnRange),
1005        /// Matches only cells with timestamps within the given range.
1006        #[prost(message, tag = "8")]
1007        TimestampRangeFilter(super::TimestampRange),
1008        /// Matches only cells with values that satisfy the given regular expression.
1009        /// Note that, since cell values can contain arbitrary bytes, the `\C` escape
1010        /// sequence must be used if a true wildcard is desired. The `.` character
1011        /// will not match the new line character `\n`, which may be present in a
1012        /// binary value.
1013        #[prost(bytes, tag = "9")]
1014        ValueRegexFilter(::prost::alloc::vec::Vec<u8>),
1015        /// Matches only cells with values that fall within the given range.
1016        #[prost(message, tag = "15")]
1017        ValueRangeFilter(super::ValueRange),
1018        /// Skips the first N cells of each row, matching all subsequent cells.
1019        /// If duplicate cells are present, as is possible when using an Interleave,
1020        /// each copy of the cell is counted separately.
1021        #[prost(int32, tag = "10")]
1022        CellsPerRowOffsetFilter(i32),
1023        /// Matches only the first N cells of each row.
1024        /// If duplicate cells are present, as is possible when using an Interleave,
1025        /// each copy of the cell is counted separately.
1026        #[prost(int32, tag = "11")]
1027        CellsPerRowLimitFilter(i32),
1028        /// Matches only the most recent N cells within each column. For example,
1029        /// if N=2, this filter would match column `foo:bar` at timestamps 10 and 9,
1030        /// skip all earlier cells in `foo:bar`, and then begin matching again in
1031        /// column `foo:bar2`.
1032        /// If duplicate cells are present, as is possible when using an Interleave,
1033        /// each copy of the cell is counted separately.
1034        #[prost(int32, tag = "12")]
1035        CellsPerColumnLimitFilter(i32),
1036        /// Replaces each cell's value with the empty string.
1037        #[prost(bool, tag = "13")]
1038        StripValueTransformer(bool),
1039        /// Applies the given label to all cells in the output row. This allows
1040        /// the client to determine which results were produced from which part of
1041        /// the filter.
1042        ///
1043        /// Values must be at most 15 characters in length, and match the RE2
1044        /// pattern `\[a-z0-9\\-\]+`
1045        ///
1046        /// Due to a technical limitation, it is not currently possible to apply
1047        /// multiple labels to a cell. As a result, a Chain may have no more than
1048        /// one sub-filter which contains a `apply_label_transformer`. It is okay for
1049        /// an Interleave to contain multiple `apply_label_transformers`, as they
1050        /// will be applied to separate copies of the input. This may be relaxed in
1051        /// the future.
1052        #[prost(string, tag = "19")]
1053        ApplyLabelTransformer(::prost::alloc::string::String),
1054    }
1055}
1056/// Specifies a particular change to be made to the contents of a row.
1057#[serde_with::serde_as]
1058#[derive(serde::Serialize, serde::Deserialize)]
1059#[serde(rename_all = "camelCase")]
1060#[derive(Clone, PartialEq, ::prost::Message)]
1061pub struct Mutation {
1062    /// Which of the possible Mutation types to apply.
1063    #[prost(oneof = "mutation::Mutation", tags = "1, 5, 6, 2, 3, 4")]
1064    pub mutation: ::core::option::Option<mutation::Mutation>,
1065}
1066/// Nested message and enum types in `Mutation`.
1067pub mod mutation {
1068    /// A Mutation which sets the value of the specified cell.
1069    #[serde_with::serde_as]
1070    #[derive(serde::Serialize, serde::Deserialize)]
1071    #[serde(rename_all = "camelCase")]
1072    #[derive(Clone, PartialEq, ::prost::Message)]
1073    pub struct SetCell {
1074        /// The name of the family into which new data should be written.
1075        /// Must match `\[-_.a-zA-Z0-9\]+`
1076        #[prost(string, tag = "1")]
1077        pub family_name: ::prost::alloc::string::String,
1078        /// The qualifier of the column into which new data should be written.
1079        /// Can be any byte string, including the empty string.
1080        #[prost(bytes = "vec", tag = "2")]
1081        pub column_qualifier: ::prost::alloc::vec::Vec<u8>,
1082        /// The timestamp of the cell into which new data should be written.
1083        /// Use -1 for current Bigtable server time.
1084        /// Otherwise, the client should set this value itself, noting that the
1085        /// default value is a timestamp of zero if the field is left unspecified.
1086        /// Values must match the granularity of the table (e.g. micros, millis).
1087        #[prost(int64, tag = "3")]
1088        pub timestamp_micros: i64,
1089        /// The value to be written into the specified cell.
1090        #[prost(bytes = "vec", tag = "4")]
1091        pub value: ::prost::alloc::vec::Vec<u8>,
1092    }
1093    /// A Mutation which incrementally updates a cell in an `Aggregate` family.
1094    #[serde_with::serde_as]
1095    #[derive(serde::Serialize, serde::Deserialize)]
1096    #[serde(rename_all = "camelCase")]
1097    #[derive(Clone, PartialEq, ::prost::Message)]
1098    pub struct AddToCell {
1099        /// The name of the `Aggregate` family into which new data should be added.
1100        /// This must be a family with a `value_type` of `Aggregate`.
1101        /// Format: `\[-_.a-zA-Z0-9\]+`
1102        #[prost(string, tag = "1")]
1103        pub family_name: ::prost::alloc::string::String,
1104        /// The qualifier of the column into which new data should be added. This
1105        /// must be a `raw_value`.
1106        #[prost(message, optional, tag = "2")]
1107        pub column_qualifier: ::core::option::Option<super::Value>,
1108        /// The timestamp of the cell to which new data should be added. This must
1109        /// be a `raw_timestamp_micros` that matches the table's `granularity`.
1110        #[prost(message, optional, tag = "3")]
1111        pub timestamp: ::core::option::Option<super::Value>,
1112        /// The input value to be accumulated into the specified cell. This must be
1113        /// compatible with the family's `value_type.input_type`.
1114        #[prost(message, optional, tag = "4")]
1115        pub input: ::core::option::Option<super::Value>,
1116    }
1117    /// A Mutation which merges accumulated state into a cell in an `Aggregate`
1118    /// family.
1119    #[serde_with::serde_as]
1120    #[derive(serde::Serialize, serde::Deserialize)]
1121    #[serde(rename_all = "camelCase")]
1122    #[derive(Clone, PartialEq, ::prost::Message)]
1123    pub struct MergeToCell {
1124        /// The name of the `Aggregate` family into which new data should be added.
1125        /// This must be a family with a `value_type` of `Aggregate`.
1126        /// Format: `\[-_.a-zA-Z0-9\]+`
1127        #[prost(string, tag = "1")]
1128        pub family_name: ::prost::alloc::string::String,
1129        /// The qualifier of the column into which new data should be added. This
1130        /// must be a `raw_value`.
1131        #[prost(message, optional, tag = "2")]
1132        pub column_qualifier: ::core::option::Option<super::Value>,
1133        /// The timestamp of the cell to which new data should be added. This must
1134        /// be a `raw_timestamp_micros` that matches the table's `granularity`.
1135        #[prost(message, optional, tag = "3")]
1136        pub timestamp: ::core::option::Option<super::Value>,
1137        /// The input value to be merged into the specified cell. This must be
1138        /// compatible with the family's `value_type.state_type`. Merging `NULL` is
1139        /// allowed, but has no effect.
1140        #[prost(message, optional, tag = "4")]
1141        pub input: ::core::option::Option<super::Value>,
1142    }
1143    /// A Mutation which deletes cells from the specified column, optionally
1144    /// restricting the deletions to a given timestamp range.
1145    #[serde_with::serde_as]
1146    #[derive(serde::Serialize, serde::Deserialize)]
1147    #[serde(rename_all = "camelCase")]
1148    #[derive(Clone, PartialEq, ::prost::Message)]
1149    pub struct DeleteFromColumn {
1150        /// The name of the family from which cells should be deleted.
1151        /// Must match `\[-_.a-zA-Z0-9\]+`
1152        #[prost(string, tag = "1")]
1153        pub family_name: ::prost::alloc::string::String,
1154        /// The qualifier of the column from which cells should be deleted.
1155        /// Can be any byte string, including the empty string.
1156        #[prost(bytes = "vec", tag = "2")]
1157        pub column_qualifier: ::prost::alloc::vec::Vec<u8>,
1158        /// The range of timestamps within which cells should be deleted.
1159        #[prost(message, optional, tag = "3")]
1160        pub time_range: ::core::option::Option<super::TimestampRange>,
1161    }
1162    /// A Mutation which deletes all cells from the specified column family.
1163    #[serde_with::serde_as]
1164    #[derive(serde::Serialize, serde::Deserialize)]
1165    #[serde(rename_all = "camelCase")]
1166    #[derive(Clone, PartialEq, ::prost::Message)]
1167    pub struct DeleteFromFamily {
1168        /// The name of the family from which cells should be deleted.
1169        /// Must match `\[-_.a-zA-Z0-9\]+`
1170        #[prost(string, tag = "1")]
1171        pub family_name: ::prost::alloc::string::String,
1172    }
1173    /// A Mutation which deletes all cells from the containing row.
1174    #[serde_with::serde_as]
1175    #[derive(serde::Serialize, serde::Deserialize)]
1176    #[serde(rename_all = "camelCase")]
1177    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1178    pub struct DeleteFromRow {}
1179    /// Which of the possible Mutation types to apply.
1180    #[serde_with::serde_as]
1181    #[derive(serde::Serialize, serde::Deserialize)]
1182    #[serde(rename_all = "camelCase")]
1183    #[derive(Clone, PartialEq, ::prost::Oneof)]
1184    pub enum Mutation {
1185        /// Set a cell's value.
1186        #[prost(message, tag = "1")]
1187        SetCell(SetCell),
1188        /// Incrementally updates an `Aggregate` cell.
1189        #[prost(message, tag = "5")]
1190        AddToCell(AddToCell),
1191        /// Merges accumulated state to an `Aggregate` cell.
1192        #[prost(message, tag = "6")]
1193        MergeToCell(MergeToCell),
1194        /// Deletes cells from a column.
1195        #[prost(message, tag = "2")]
1196        DeleteFromColumn(DeleteFromColumn),
1197        /// Deletes cells from a column family.
1198        #[prost(message, tag = "3")]
1199        DeleteFromFamily(DeleteFromFamily),
1200        /// Deletes cells from the entire row.
1201        #[prost(message, tag = "4")]
1202        DeleteFromRow(DeleteFromRow),
1203    }
1204}
1205/// Specifies an atomic read/modify/write operation on the latest value of the
1206/// specified column.
1207#[serde_with::serde_as]
1208#[derive(serde::Serialize, serde::Deserialize)]
1209#[serde(rename_all = "camelCase")]
1210#[derive(Clone, PartialEq, ::prost::Message)]
1211pub struct ReadModifyWriteRule {
1212    /// The name of the family to which the read/modify/write should be applied.
1213    /// Must match `\[-_.a-zA-Z0-9\]+`
1214    #[prost(string, tag = "1")]
1215    pub family_name: ::prost::alloc::string::String,
1216    /// The qualifier of the column to which the read/modify/write should be
1217    /// applied.
1218    /// Can be any byte string, including the empty string.
1219    #[prost(bytes = "vec", tag = "2")]
1220    pub column_qualifier: ::prost::alloc::vec::Vec<u8>,
1221    /// The rule used to determine the column's new latest value from its current
1222    /// latest value.
1223    #[prost(oneof = "read_modify_write_rule::Rule", tags = "3, 4")]
1224    pub rule: ::core::option::Option<read_modify_write_rule::Rule>,
1225}
1226/// Nested message and enum types in `ReadModifyWriteRule`.
1227pub mod read_modify_write_rule {
1228    /// The rule used to determine the column's new latest value from its current
1229    /// latest value.
1230    #[serde_with::serde_as]
1231    #[derive(serde::Serialize, serde::Deserialize)]
1232    #[serde(rename_all = "camelCase")]
1233    #[derive(Clone, PartialEq, ::prost::Oneof)]
1234    pub enum Rule {
1235        /// Rule specifying that `append_value` be appended to the existing value.
1236        /// If the targeted cell is unset, it will be treated as containing the
1237        /// empty string.
1238        #[prost(bytes, tag = "3")]
1239        AppendValue(::prost::alloc::vec::Vec<u8>),
1240        /// Rule specifying that `increment_amount` be added to the existing value.
1241        /// If the targeted cell is unset, it will be treated as containing a zero.
1242        /// Otherwise, the targeted cell must contain an 8-byte value (interpreted
1243        /// as a 64-bit big-endian signed integer), or the entire request will fail.
1244        #[prost(int64, tag = "4")]
1245        IncrementAmount(i64),
1246    }
1247}
1248/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
1249/// A partition of a change stream.
1250#[serde_with::serde_as]
1251#[derive(serde::Serialize, serde::Deserialize)]
1252#[serde(rename_all = "camelCase")]
1253#[derive(Clone, PartialEq, ::prost::Message)]
1254pub struct StreamPartition {
1255    /// The row range covered by this partition and is specified by
1256    /// \[`start_key_closed`, `end_key_open`).
1257    #[prost(message, optional, tag = "1")]
1258    pub row_range: ::core::option::Option<RowRange>,
1259}
1260/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
1261/// The information required to continue reading the data from multiple
1262/// `StreamPartitions` from where a previous read left off.
1263#[serde_with::serde_as]
1264#[derive(serde::Serialize, serde::Deserialize)]
1265#[serde(rename_all = "camelCase")]
1266#[derive(Clone, PartialEq, ::prost::Message)]
1267pub struct StreamContinuationTokens {
1268    /// List of continuation tokens.
1269    #[prost(message, repeated, tag = "1")]
1270    pub tokens: ::prost::alloc::vec::Vec<StreamContinuationToken>,
1271}
1272/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
1273/// The information required to continue reading the data from a
1274/// `StreamPartition` from where a previous read left off.
1275#[serde_with::serde_as]
1276#[derive(serde::Serialize, serde::Deserialize)]
1277#[serde(rename_all = "camelCase")]
1278#[derive(Clone, PartialEq, ::prost::Message)]
1279pub struct StreamContinuationToken {
1280    /// The partition that this token applies to.
1281    #[prost(message, optional, tag = "1")]
1282    pub partition: ::core::option::Option<StreamPartition>,
1283    /// An encoded position in the stream to restart reading from.
1284    #[prost(string, tag = "2")]
1285    pub token: ::prost::alloc::string::String,
1286}
1287/// Protocol buffers format descriptor, as described by Messages ProtoSchema and
1288/// ProtoRows
1289#[serde_with::serde_as]
1290#[derive(serde::Serialize, serde::Deserialize)]
1291#[serde(rename_all = "camelCase")]
1292#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1293pub struct ProtoFormat {}
1294/// Describes a column in a Bigtable Query Language result set.
1295#[serde_with::serde_as]
1296#[derive(serde::Serialize, serde::Deserialize)]
1297#[serde(rename_all = "camelCase")]
1298#[derive(Clone, PartialEq, ::prost::Message)]
1299pub struct ColumnMetadata {
1300    /// The name of the column.
1301    #[prost(string, tag = "1")]
1302    pub name: ::prost::alloc::string::String,
1303    /// The type of the column.
1304    #[prost(message, optional, tag = "2")]
1305    pub r#type: ::core::option::Option<Type>,
1306}
1307/// ResultSet schema in proto format
1308#[serde_with::serde_as]
1309#[derive(serde::Serialize, serde::Deserialize)]
1310#[serde(rename_all = "camelCase")]
1311#[derive(Clone, PartialEq, ::prost::Message)]
1312pub struct ProtoSchema {
1313    /// The columns in the result set.
1314    #[prost(message, repeated, tag = "1")]
1315    pub columns: ::prost::alloc::vec::Vec<ColumnMetadata>,
1316}
1317/// Describes the structure of a Bigtable result set.
1318#[serde_with::serde_as]
1319#[derive(serde::Serialize, serde::Deserialize)]
1320#[serde(rename_all = "camelCase")]
1321#[derive(Clone, PartialEq, ::prost::Message)]
1322pub struct ResultSetMetadata {
1323    /// The schema of the ResultSet, contains ordered list of column names
1324    /// with types
1325    #[prost(oneof = "result_set_metadata::Schema", tags = "1")]
1326    pub schema: ::core::option::Option<result_set_metadata::Schema>,
1327}
1328/// Nested message and enum types in `ResultSetMetadata`.
1329pub mod result_set_metadata {
1330    /// The schema of the ResultSet, contains ordered list of column names
1331    /// with types
1332    #[serde_with::serde_as]
1333    #[derive(serde::Serialize, serde::Deserialize)]
1334    #[serde(rename_all = "camelCase")]
1335    #[derive(Clone, PartialEq, ::prost::Oneof)]
1336    pub enum Schema {
1337        /// Schema in proto format
1338        #[prost(message, tag = "1")]
1339        ProtoSchema(super::ProtoSchema),
1340    }
1341}
1342/// Rows represented in proto format.
1343///
1344/// This should be constructed by concatenating the `batch_data` from each
1345/// of the relevant `ProtoRowsBatch` messages and parsing the result as a
1346/// `ProtoRows` message.
1347#[serde_with::serde_as]
1348#[derive(serde::Serialize, serde::Deserialize)]
1349#[serde(rename_all = "camelCase")]
1350#[derive(Clone, PartialEq, ::prost::Message)]
1351pub struct ProtoRows {
1352    /// A proto rows message consists of a list of values. Every N complete values
1353    /// defines a row, where N is equal to the  number of entries in the
1354    /// `metadata.proto_schema.columns` value received in the first response.
1355    #[prost(message, repeated, tag = "2")]
1356    pub values: ::prost::alloc::vec::Vec<Value>,
1357}
1358/// Batch of serialized ProtoRows.
1359#[serde_with::serde_as]
1360#[derive(serde::Serialize, serde::Deserialize)]
1361#[serde(rename_all = "camelCase")]
1362#[derive(Clone, PartialEq, ::prost::Message)]
1363pub struct ProtoRowsBatch {
1364    /// Merge partial results by concatenating these bytes, then parsing the
1365    /// overall value as a `ProtoRows` message.
1366    #[prost(bytes = "vec", tag = "1")]
1367    pub batch_data: ::prost::alloc::vec::Vec<u8>,
1368}
1369/// A partial result set from the streaming query API.
1370/// CBT client will buffer partial_rows from result_sets until it gets a
1371/// resumption_token.
1372#[serde_with::serde_as]
1373#[derive(serde::Serialize, serde::Deserialize)]
1374#[serde(rename_all = "camelCase")]
1375#[derive(Clone, PartialEq, ::prost::Message)]
1376pub struct PartialResultSet {
1377    /// An opaque token sent by the server to allow query resumption and signal
1378    /// the client to accumulate `partial_rows` since the last non-empty
1379    /// `resume_token`. On resumption, the resumed query will return the remaining
1380    /// rows for this query.
1381    ///
1382    /// If there is a batch in progress, a non-empty `resume_token`
1383    /// means that that the batch of `partial_rows` will be complete after merging
1384    /// the `partial_rows` from this response. The client must only yield
1385    /// completed batches to the application, and must ensure that any future
1386    /// retries send the latest token to avoid returning duplicate data.
1387    ///
1388    /// The server may set 'resume_token' without a 'partial_rows'. If there is a
1389    /// batch in progress the client should yield it.
1390    ///
1391    /// The server will also send a sentinel `resume_token` when last batch of
1392    /// `partial_rows` is sent. If the client retries the ExecuteQueryRequest with
1393    /// the sentinel `resume_token`, the server will emit it again without any
1394    /// `partial_rows`, then return OK.
1395    #[prost(bytes = "vec", tag = "5")]
1396    pub resume_token: ::prost::alloc::vec::Vec<u8>,
1397    /// Estimated size of a new batch. The server will always set this when
1398    /// returning the first `partial_rows` of a batch, and will not set it at any
1399    /// other time.
1400    ///
1401    /// The client can use this estimate to allocate an initial buffer for the
1402    /// batched results. This helps minimize the number of allocations required,
1403    /// though the buffer size may still need to be increased if the estimate is
1404    /// too low.
1405    #[prost(int32, tag = "4")]
1406    pub estimated_batch_size: i32,
1407    /// Partial Rows in one of the supported formats. It may require many
1408    /// PartialResultSets to stream a batch of rows that can decoded on the client.
1409    /// The client should buffer partial_rows until it gets a `resume_token`,
1410    /// at which point the batch is complete and can be decoded and yielded to the
1411    /// user. Each sub-message documents the appropriate way to combine results.
1412    #[prost(oneof = "partial_result_set::PartialRows", tags = "3")]
1413    pub partial_rows: ::core::option::Option<partial_result_set::PartialRows>,
1414}
1415/// Nested message and enum types in `PartialResultSet`.
1416pub mod partial_result_set {
1417    /// Partial Rows in one of the supported formats. It may require many
1418    /// PartialResultSets to stream a batch of rows that can decoded on the client.
1419    /// The client should buffer partial_rows until it gets a `resume_token`,
1420    /// at which point the batch is complete and can be decoded and yielded to the
1421    /// user. Each sub-message documents the appropriate way to combine results.
1422    #[serde_with::serde_as]
1423    #[derive(serde::Serialize, serde::Deserialize)]
1424    #[serde(rename_all = "camelCase")]
1425    #[derive(Clone, PartialEq, ::prost::Oneof)]
1426    pub enum PartialRows {
1427        /// Partial rows in serialized ProtoRows format.
1428        #[prost(message, tag = "3")]
1429        ProtoRowsBatch(super::ProtoRowsBatch),
1430    }
1431}
1432/// ReadIterationStats captures information about the iteration of rows or cells
1433/// over the course of a read, e.g. how many results were scanned in a read
1434/// operation versus the results returned.
1435#[serde_with::serde_as]
1436#[derive(serde::Serialize, serde::Deserialize)]
1437#[serde(rename_all = "camelCase")]
1438#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1439pub struct ReadIterationStats {
1440    /// The rows seen (scanned) as part of the request. This includes the count of
1441    /// rows returned, as captured below.
1442    #[prost(int64, tag = "1")]
1443    pub rows_seen_count: i64,
1444    /// The rows returned as part of the request.
1445    #[prost(int64, tag = "2")]
1446    pub rows_returned_count: i64,
1447    /// The cells seen (scanned) as part of the request. This includes the count of
1448    /// cells returned, as captured below.
1449    #[prost(int64, tag = "3")]
1450    pub cells_seen_count: i64,
1451    /// The cells returned as part of the request.
1452    #[prost(int64, tag = "4")]
1453    pub cells_returned_count: i64,
1454}
1455/// RequestLatencyStats provides a measurement of the latency of the request as
1456/// it interacts with different systems over its lifetime, e.g. how long the
1457/// request took to execute within a frontend server.
1458#[serde_with::serde_as]
1459#[derive(serde::Serialize, serde::Deserialize)]
1460#[serde(rename_all = "camelCase")]
1461#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1462pub struct RequestLatencyStats {
1463    /// The latency measured by the frontend server handling this request, from
1464    /// when the request was received, to when this value is sent back in the
1465    /// response. For more context on the component that is measuring this latency,
1466    /// see: <https://cloud.google.com/bigtable/docs/overview>
1467    ///
1468    /// Note: This value may be slightly shorter than the value reported into
1469    /// aggregate latency metrics in Monitoring for this request
1470    /// (<https://cloud.google.com/bigtable/docs/monitoring-instance>) as this value
1471    /// needs to be sent in the response before the latency measurement including
1472    /// that transmission is finalized.
1473    ///
1474    /// Note: This value includes the end-to-end latency of contacting nodes in
1475    /// the targeted cluster, e.g. measuring from when the first byte arrives at
1476    /// the frontend server, to when this value is sent back as the last value in
1477    /// the response, including any latency incurred by contacting nodes, waiting
1478    /// for results from nodes, and finally sending results from nodes back to the
1479    /// caller.
1480    #[prost(message, optional, tag = "1")]
1481    pub frontend_server_latency: ::core::option::Option<::prost_wkt_types::Duration>,
1482}
1483/// FullReadStatsView captures all known information about a read.
1484#[serde_with::serde_as]
1485#[derive(serde::Serialize, serde::Deserialize)]
1486#[serde(rename_all = "camelCase")]
1487#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1488pub struct FullReadStatsView {
1489    /// Iteration stats describe how efficient the read is, e.g. comparing
1490    /// rows seen vs. rows returned or cells seen vs cells returned can provide an
1491    /// indication of read efficiency (the higher the ratio of seen to retuned the
1492    /// better).
1493    #[prost(message, optional, tag = "1")]
1494    pub read_iteration_stats: ::core::option::Option<ReadIterationStats>,
1495    /// Request latency stats describe the time taken to complete a request, from
1496    /// the server side.
1497    #[prost(message, optional, tag = "2")]
1498    pub request_latency_stats: ::core::option::Option<RequestLatencyStats>,
1499}
1500/// RequestStats is the container for additional information pertaining to a
1501/// single request, helpful for evaluating the performance of the sent request.
1502/// Currently, there are the following supported methods:
1503///
1504/// * google.bigtable.v2.ReadRows
1505#[serde_with::serde_as]
1506#[derive(serde::Serialize, serde::Deserialize)]
1507#[serde(rename_all = "camelCase")]
1508#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1509pub struct RequestStats {
1510    /// Information pertaining to each request type received. The type is chosen
1511    /// based on the requested view.
1512    ///
1513    /// See the messages above for additional context.
1514    #[prost(oneof = "request_stats::StatsView", tags = "1")]
1515    pub stats_view: ::core::option::Option<request_stats::StatsView>,
1516}
1517/// Nested message and enum types in `RequestStats`.
1518pub mod request_stats {
1519    /// Information pertaining to each request type received. The type is chosen
1520    /// based on the requested view.
1521    ///
1522    /// See the messages above for additional context.
1523    #[serde_with::serde_as]
1524    #[derive(serde::Serialize, serde::Deserialize)]
1525    #[serde(rename_all = "camelCase")]
1526    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1527    pub enum StatsView {
1528        /// Available with the ReadRowsRequest.RequestStatsView.REQUEST_STATS_FULL
1529        /// view, see package google.bigtable.v2.
1530        #[prost(message, tag = "1")]
1531        FullReadStatsView(super::FullReadStatsView),
1532    }
1533}
1534/// Request message for Bigtable.ReadRows.
1535#[serde_with::serde_as]
1536#[derive(serde::Serialize, serde::Deserialize)]
1537#[serde(rename_all = "camelCase")]
1538#[derive(Clone, PartialEq, ::prost::Message)]
1539pub struct ReadRowsRequest {
1540    /// Optional. The unique name of the table from which to read.
1541    ///
1542    /// Values are of the form
1543    /// `projects/<project>/instances/<instance>/tables/<table>`.
1544    #[prost(string, tag = "1")]
1545    pub table_name: ::prost::alloc::string::String,
1546    /// Optional. The unique name of the AuthorizedView from which to read.
1547    ///
1548    /// Values are of the form
1549    /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1550    #[prost(string, tag = "9")]
1551    pub authorized_view_name: ::prost::alloc::string::String,
1552    /// This value specifies routing for replication. If not specified, the
1553    /// "default" application profile will be used.
1554    #[prost(string, tag = "5")]
1555    pub app_profile_id: ::prost::alloc::string::String,
1556    /// The row keys and/or ranges to read sequentially. If not specified, reads
1557    /// from all rows.
1558    #[prost(message, optional, tag = "2")]
1559    pub rows: ::core::option::Option<RowSet>,
1560    /// The filter to apply to the contents of the specified row(s). If unset,
1561    /// reads the entirety of each row.
1562    #[prost(message, optional, tag = "3")]
1563    pub filter: ::core::option::Option<RowFilter>,
1564    /// The read will stop after committing to N rows' worth of results. The
1565    /// default (zero) is to return all results.
1566    #[prost(int64, tag = "4")]
1567    pub rows_limit: i64,
1568    /// The view into RequestStats, as described above.
1569    #[prost(enumeration = "read_rows_request::RequestStatsView", tag = "6")]
1570    pub request_stats_view: i32,
1571    /// Experimental API - Please note that this API is currently experimental
1572    /// and can change in the future.
1573    ///
1574    /// Return rows in lexiographical descending order of the row keys. The row
1575    /// contents will not be affected by this flag.
1576    ///
1577    /// Example result set:
1578    ///
1579    /// ```text
1580    /// [
1581    ///    {key: "k2", "f:col1": "v1", "f:col2": "v1"},
1582    ///    {key: "k1", "f:col1": "v2", "f:col2": "v2"}
1583    /// ]
1584    /// ```
1585    #[prost(bool, tag = "7")]
1586    pub reversed: bool,
1587}
1588/// Nested message and enum types in `ReadRowsRequest`.
1589pub mod read_rows_request {
1590    /// The desired view into RequestStats that should be returned in the response.
1591    ///
1592    /// See also: RequestStats message.
1593    #[serde_with::serde_as]
1594    #[derive(serde::Serialize, serde::Deserialize)]
1595    #[serde(rename_all = "camelCase")]
1596    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1597    #[repr(i32)]
1598    pub enum RequestStatsView {
1599        /// The default / unset value. The API will default to the NONE option below.
1600        Unspecified = 0,
1601        /// Do not include any RequestStats in the response. This will leave the
1602        /// RequestStats embedded message unset in the response.
1603        RequestStatsNone = 1,
1604        /// Include the full set of available RequestStats in the response,
1605        /// applicable to this read.
1606        RequestStatsFull = 2,
1607    }
1608    impl RequestStatsView {
1609        /// String value of the enum field names used in the ProtoBuf definition.
1610        ///
1611        /// The values are not transformed in any way and thus are considered stable
1612        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1613        pub fn as_str_name(&self) -> &'static str {
1614            match self {
1615                Self::Unspecified => "REQUEST_STATS_VIEW_UNSPECIFIED",
1616                Self::RequestStatsNone => "REQUEST_STATS_NONE",
1617                Self::RequestStatsFull => "REQUEST_STATS_FULL",
1618            }
1619        }
1620        /// Creates an enum from field names used in the ProtoBuf definition.
1621        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1622            match value {
1623                "REQUEST_STATS_VIEW_UNSPECIFIED" => Some(Self::Unspecified),
1624                "REQUEST_STATS_NONE" => Some(Self::RequestStatsNone),
1625                "REQUEST_STATS_FULL" => Some(Self::RequestStatsFull),
1626                _ => None,
1627            }
1628        }
1629    }
1630}
1631/// Response message for Bigtable.ReadRows.
1632#[serde_with::serde_as]
1633#[derive(serde::Serialize, serde::Deserialize)]
1634#[serde(rename_all = "camelCase")]
1635#[derive(Clone, PartialEq, ::prost::Message)]
1636pub struct ReadRowsResponse {
1637    /// A collection of a row's contents as part of the read request.
1638    #[prost(message, repeated, tag = "1")]
1639    pub chunks: ::prost::alloc::vec::Vec<read_rows_response::CellChunk>,
1640    /// Optionally the server might return the row key of the last row it
1641    /// has scanned.  The client can use this to construct a more
1642    /// efficient retry request if needed: any row keys or portions of
1643    /// ranges less than this row key can be dropped from the request.
1644    /// This is primarily useful for cases where the server has read a
1645    /// lot of data that was filtered out since the last committed row
1646    /// key, allowing the client to skip that work on a retry.
1647    #[prost(bytes = "vec", tag = "2")]
1648    pub last_scanned_row_key: ::prost::alloc::vec::Vec<u8>,
1649    /// If requested, provide enhanced query performance statistics. The semantics
1650    /// dictate:
1651    ///
1652    /// * request_stats is empty on every (streamed) response, except
1653    /// * request_stats has non-empty information after all chunks have been
1654    ///   streamed, where the ReadRowsResponse message only contains
1655    ///   request_stats.
1656    ///   * For example, if a read request would have returned an empty
1657    ///     response instead a single ReadRowsResponse is streamed with empty
1658    ///     chunks and request_stats filled.
1659    ///
1660    /// Visually, response messages will stream as follows:
1661    /// ... -> {chunks: \[...\]} -> {chunks: \[\], request_stats: {...}}
1662    /// \_*********************/  \_*********************\_\_\_\_\_\_\_\_\_\_/
1663    /// Primary response         Trailer of RequestStats info
1664    ///
1665    /// Or if the read did not return any values:
1666    /// {chunks: \[\], request_stats: {...}}
1667    /// \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_/
1668    /// Trailer of RequestStats info
1669    #[prost(message, optional, tag = "3")]
1670    pub request_stats: ::core::option::Option<RequestStats>,
1671}
1672/// Nested message and enum types in `ReadRowsResponse`.
1673pub mod read_rows_response {
1674    /// Specifies a piece of a row's contents returned as part of the read
1675    /// response stream.
1676    #[serde_with::serde_as]
1677    #[derive(serde::Serialize, serde::Deserialize)]
1678    #[serde(rename_all = "camelCase")]
1679    #[derive(Clone, PartialEq, ::prost::Message)]
1680    pub struct CellChunk {
1681        /// The row key for this chunk of data.  If the row key is empty,
1682        /// this CellChunk is a continuation of the same row as the previous
1683        /// CellChunk in the response stream, even if that CellChunk was in a
1684        /// previous ReadRowsResponse message.
1685        #[prost(bytes = "vec", tag = "1")]
1686        #[serde_as(as = "serde_with::base64::Base64")]
1687        #[serde(default)]
1688        pub row_key: ::prost::alloc::vec::Vec<u8>,
1689        /// The column family name for this chunk of data.  If this message
1690        /// is not present this CellChunk is a continuation of the same column
1691        /// family as the previous CellChunk.  The empty string can occur as a
1692        /// column family name in a response so clients must check
1693        /// explicitly for the presence of this message, not just for
1694        /// `family_name.value` being non-empty.
1695        #[prost(message, optional, tag = "2")]
1696        pub family_name: ::core::option::Option<::prost::alloc::string::String>,
1697        /// The column qualifier for this chunk of data.  If this message
1698        /// is not present, this CellChunk is a continuation of the same column
1699        /// as the previous CellChunk.  Column qualifiers may be empty so
1700        /// clients must check for the presence of this message, not just
1701        /// for `qualifier.value` being non-empty.
1702        #[prost(message, optional, tag = "3")]
1703        #[serde_as(as = "Option<serde_with::base64::Base64>")]
1704        #[serde(default)]
1705        pub qualifier: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1706        /// The cell's stored timestamp, which also uniquely identifies it
1707        /// within its column.  Values are always expressed in
1708        /// microseconds, but individual tables may set a coarser
1709        /// granularity to further restrict the allowed values. For
1710        /// example, a table which specifies millisecond granularity will
1711        /// only allow values of `timestamp_micros` which are multiples of
1712        /// 1000.  Timestamps are only set in the first CellChunk per cell
1713        /// (for cells split into multiple chunks).
1714        #[prost(int64, tag = "4")]
1715        #[serde(default)]
1716        #[serde_as(as = "serde_with::DisplayFromStr")]
1717        pub timestamp_micros: i64,
1718        /// Labels applied to the cell by a
1719        /// \[RowFilter\]\[google.bigtable.v2.RowFilter\].  Labels are only set
1720        /// on the first CellChunk per cell.
1721        #[prost(string, repeated, tag = "5")]
1722        #[serde(default)]
1723        pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1724        /// The value stored in the cell.  Cell values can be split across
1725        /// multiple CellChunks.  In that case only the value field will be
1726        /// set in CellChunks after the first: the timestamp and labels
1727        /// will only be present in the first CellChunk, even if the first
1728        /// CellChunk came in a previous ReadRowsResponse.
1729        #[prost(bytes = "vec", tag = "6")]
1730        #[serde_as(as = "serde_with::base64::Base64")]
1731        #[serde(default)]
1732        pub value: ::prost::alloc::vec::Vec<u8>,
1733        /// If this CellChunk is part of a chunked cell value and this is
1734        /// not the final chunk of that cell, value_size will be set to the
1735        /// total length of the cell value.  The client can use this size
1736        /// to pre-allocate memory to hold the full cell value.
1737        #[prost(int32, tag = "7")]
1738        #[serde(default)]
1739        pub value_size: i32,
1740        /// Signals to the client concerning previous CellChunks received.
1741        #[prost(oneof = "cell_chunk::RowStatus", tags = "8, 9")]
1742        pub row_status: ::core::option::Option<cell_chunk::RowStatus>,
1743    }
1744    /// Nested message and enum types in `CellChunk`.
1745    pub mod cell_chunk {
1746        /// Signals to the client concerning previous CellChunks received.
1747        #[serde_with::serde_as]
1748        #[derive(serde::Serialize, serde::Deserialize)]
1749        #[serde(rename_all = "camelCase")]
1750        #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1751        pub enum RowStatus {
1752            /// Indicates that the client should drop all previous chunks for
1753            /// `row_key`, as it will be re-read from the beginning.
1754            #[prost(bool, tag = "8")]
1755            ResetRow(bool),
1756            /// Indicates that the client can safely process all previous chunks for
1757            /// `row_key`, as its data has been fully read.
1758            #[prost(bool, tag = "9")]
1759            CommitRow(bool),
1760        }
1761    }
1762}
1763/// Request message for Bigtable.SampleRowKeys.
1764#[serde_with::serde_as]
1765#[derive(serde::Serialize, serde::Deserialize)]
1766#[serde(rename_all = "camelCase")]
1767#[derive(Clone, PartialEq, ::prost::Message)]
1768pub struct SampleRowKeysRequest {
1769    /// Optional. The unique name of the table from which to sample row keys.
1770    ///
1771    /// Values are of the form
1772    /// `projects/<project>/instances/<instance>/tables/<table>`.
1773    #[prost(string, tag = "1")]
1774    pub table_name: ::prost::alloc::string::String,
1775    /// Optional. The unique name of the AuthorizedView from which to sample row
1776    /// keys.
1777    ///
1778    /// Values are of the form
1779    /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1780    #[prost(string, tag = "4")]
1781    pub authorized_view_name: ::prost::alloc::string::String,
1782    /// This value specifies routing for replication. If not specified, the
1783    /// "default" application profile will be used.
1784    #[prost(string, tag = "2")]
1785    pub app_profile_id: ::prost::alloc::string::String,
1786}
1787/// Response message for Bigtable.SampleRowKeys.
1788#[serde_with::serde_as]
1789#[derive(serde::Serialize, serde::Deserialize)]
1790#[serde(rename_all = "camelCase")]
1791#[derive(Clone, PartialEq, ::prost::Message)]
1792pub struct SampleRowKeysResponse {
1793    /// Sorted streamed sequence of sample row keys in the table. The table might
1794    /// have contents before the first row key in the list and after the last one,
1795    /// but a key containing the empty string indicates "end of table" and will be
1796    /// the last response given, if present.
1797    /// Note that row keys in this list may not have ever been written to or read
1798    /// from, and users should therefore not make any assumptions about the row key
1799    /// structure that are specific to their use case.
1800    #[prost(bytes = "vec", tag = "1")]
1801    pub row_key: ::prost::alloc::vec::Vec<u8>,
1802    /// Approximate total storage space used by all rows in the table which precede
1803    /// `row_key`. Buffering the contents of all rows between two subsequent
1804    /// samples would require space roughly equal to the difference in their
1805    /// `offset_bytes` fields.
1806    #[prost(int64, tag = "2")]
1807    pub offset_bytes: i64,
1808}
1809/// Request message for Bigtable.MutateRow.
1810#[serde_with::serde_as]
1811#[derive(serde::Serialize, serde::Deserialize)]
1812#[serde(rename_all = "camelCase")]
1813#[derive(Clone, PartialEq, ::prost::Message)]
1814pub struct MutateRowRequest {
1815    /// Optional. The unique name of the table to which the mutation should be
1816    /// applied.
1817    ///
1818    /// Values are of the form
1819    /// `projects/<project>/instances/<instance>/tables/<table>`.
1820    #[prost(string, tag = "1")]
1821    pub table_name: ::prost::alloc::string::String,
1822    /// Optional. The unique name of the AuthorizedView to which the mutation
1823    /// should be applied.
1824    ///
1825    /// Values are of the form
1826    /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1827    #[prost(string, tag = "6")]
1828    pub authorized_view_name: ::prost::alloc::string::String,
1829    /// This value specifies routing for replication. If not specified, the
1830    /// "default" application profile will be used.
1831    #[prost(string, tag = "4")]
1832    pub app_profile_id: ::prost::alloc::string::String,
1833    /// Required. The key of the row to which the mutation should be applied.
1834    #[prost(bytes = "vec", tag = "2")]
1835    pub row_key: ::prost::alloc::vec::Vec<u8>,
1836    /// Required. Changes to be atomically applied to the specified row. Entries
1837    /// are applied in order, meaning that earlier mutations can be masked by later
1838    /// ones. Must contain at least one entry and at most 100000.
1839    #[prost(message, repeated, tag = "3")]
1840    pub mutations: ::prost::alloc::vec::Vec<Mutation>,
1841}
1842/// Response message for Bigtable.MutateRow.
1843#[serde_with::serde_as]
1844#[derive(serde::Serialize, serde::Deserialize)]
1845#[serde(rename_all = "camelCase")]
1846#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1847pub struct MutateRowResponse {}
1848/// Request message for BigtableService.MutateRows.
1849#[serde_with::serde_as]
1850#[derive(serde::Serialize, serde::Deserialize)]
1851#[serde(rename_all = "camelCase")]
1852#[derive(Clone, PartialEq, ::prost::Message)]
1853pub struct MutateRowsRequest {
1854    /// Optional. The unique name of the table to which the mutations should be
1855    /// applied.
1856    ///
1857    /// Values are of the form
1858    /// `projects/<project>/instances/<instance>/tables/<table>`.
1859    #[prost(string, tag = "1")]
1860    pub table_name: ::prost::alloc::string::String,
1861    /// Optional. The unique name of the AuthorizedView to which the mutations
1862    /// should be applied.
1863    ///
1864    /// Values are of the form
1865    /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1866    #[prost(string, tag = "5")]
1867    pub authorized_view_name: ::prost::alloc::string::String,
1868    /// This value specifies routing for replication. If not specified, the
1869    /// "default" application profile will be used.
1870    #[prost(string, tag = "3")]
1871    pub app_profile_id: ::prost::alloc::string::String,
1872    /// Required. The row keys and corresponding mutations to be applied in bulk.
1873    /// Each entry is applied as an atomic mutation, but the entries may be
1874    /// applied in arbitrary order (even between entries for the same row).
1875    /// At least one entry must be specified, and in total the entries can
1876    /// contain at most 100000 mutations.
1877    #[prost(message, repeated, tag = "2")]
1878    pub entries: ::prost::alloc::vec::Vec<mutate_rows_request::Entry>,
1879}
1880/// Nested message and enum types in `MutateRowsRequest`.
1881pub mod mutate_rows_request {
1882    /// A mutation for a given row.
1883    #[serde_with::serde_as]
1884    #[derive(serde::Serialize, serde::Deserialize)]
1885    #[serde(rename_all = "camelCase")]
1886    #[derive(Clone, PartialEq, ::prost::Message)]
1887    pub struct Entry {
1888        /// The key of the row to which the `mutations` should be applied.
1889        #[prost(bytes = "vec", tag = "1")]
1890        pub row_key: ::prost::alloc::vec::Vec<u8>,
1891        /// Required. Changes to be atomically applied to the specified row.
1892        /// Mutations are applied in order, meaning that earlier mutations can be
1893        /// masked by later ones. You must specify at least one mutation.
1894        #[prost(message, repeated, tag = "2")]
1895        pub mutations: ::prost::alloc::vec::Vec<super::Mutation>,
1896    }
1897}
1898/// Response message for BigtableService.MutateRows.
1899#[serde_with::serde_as]
1900#[derive(serde::Serialize, serde::Deserialize)]
1901#[serde(rename_all = "camelCase")]
1902#[derive(Clone, PartialEq, ::prost::Message)]
1903pub struct MutateRowsResponse {
1904    /// One or more results for Entries from the batch request.
1905    #[prost(message, repeated, tag = "1")]
1906    pub entries: ::prost::alloc::vec::Vec<mutate_rows_response::Entry>,
1907    /// Information about how client should limit the rate (QPS). Primirily used by
1908    /// supported official Cloud Bigtable clients. If unset, the rate limit info is
1909    /// not provided by the server.
1910    #[prost(message, optional, tag = "3")]
1911    pub rate_limit_info: ::core::option::Option<RateLimitInfo>,
1912}
1913/// Nested message and enum types in `MutateRowsResponse`.
1914pub mod mutate_rows_response {
1915    /// The result of applying a passed mutation in the original request.
1916    #[serde_with::serde_as]
1917    #[derive(serde::Serialize, serde::Deserialize)]
1918    #[serde(rename_all = "camelCase")]
1919    #[derive(Clone, PartialEq, ::prost::Message)]
1920    pub struct Entry {
1921        /// The index into the original request's `entries` list of the Entry
1922        /// for which a result is being reported.
1923        #[prost(int64, tag = "1")]
1924        pub index: i64,
1925        /// The result of the request Entry identified by `index`.
1926        /// Depending on how requests are batched during execution, it is possible
1927        /// for one Entry to fail due to an error with another Entry. In the event
1928        /// that this occurs, the same error will be reported for both entries.
1929        #[prost(message, optional, tag = "2")]
1930        pub status: ::core::option::Option<super::super::super::rpc::Status>,
1931    }
1932}
1933/// Information about how client should adjust the load to Bigtable.
1934#[serde_with::serde_as]
1935#[derive(serde::Serialize, serde::Deserialize)]
1936#[serde(rename_all = "camelCase")]
1937#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1938pub struct RateLimitInfo {
1939    /// Time that clients should wait before adjusting the target rate again.
1940    /// If clients adjust rate too frequently, the impact of the previous
1941    /// adjustment may not have been taken into account and may
1942    /// over-throttle or under-throttle. If clients adjust rate too slowly, they
1943    /// will not be responsive to load changes on server side, and may
1944    /// over-throttle or under-throttle.
1945    #[prost(message, optional, tag = "1")]
1946    pub period: ::core::option::Option<::prost_wkt_types::Duration>,
1947    /// If it has been at least one `period` since the last load adjustment, the
1948    /// client should multiply the current load by this value to get the new target
1949    /// load. For example, if the current load is 100 and `factor` is 0.8, the new
1950    /// target load should be 80. After adjusting, the client should ignore
1951    /// `factor` until another `period` has passed.
1952    ///
1953    /// The client can measure its load using any unit that's comparable over time
1954    /// For example, QPS can be used as long as each request involves a similar
1955    /// amount of work.
1956    #[prost(double, tag = "2")]
1957    pub factor: f64,
1958}
1959/// Request message for Bigtable.CheckAndMutateRow.
1960#[serde_with::serde_as]
1961#[derive(serde::Serialize, serde::Deserialize)]
1962#[serde(rename_all = "camelCase")]
1963#[derive(Clone, PartialEq, ::prost::Message)]
1964pub struct CheckAndMutateRowRequest {
1965    /// Optional. The unique name of the table to which the conditional mutation
1966    /// should be applied.
1967    ///
1968    /// Values are of the form
1969    /// `projects/<project>/instances/<instance>/tables/<table>`.
1970    #[prost(string, tag = "1")]
1971    pub table_name: ::prost::alloc::string::String,
1972    /// Optional. The unique name of the AuthorizedView to which the conditional
1973    /// mutation should be applied.
1974    ///
1975    /// Values are of the form
1976    /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1977    #[prost(string, tag = "9")]
1978    pub authorized_view_name: ::prost::alloc::string::String,
1979    /// This value specifies routing for replication. If not specified, the
1980    /// "default" application profile will be used.
1981    #[prost(string, tag = "7")]
1982    pub app_profile_id: ::prost::alloc::string::String,
1983    /// Required. The key of the row to which the conditional mutation should be
1984    /// applied.
1985    #[prost(bytes = "vec", tag = "2")]
1986    pub row_key: ::prost::alloc::vec::Vec<u8>,
1987    /// The filter to be applied to the contents of the specified row. Depending
1988    /// on whether or not any results are yielded, either `true_mutations` or
1989    /// `false_mutations` will be executed. If unset, checks that the row contains
1990    /// any values at all.
1991    #[prost(message, optional, tag = "6")]
1992    pub predicate_filter: ::core::option::Option<RowFilter>,
1993    /// Changes to be atomically applied to the specified row if `predicate_filter`
1994    /// yields at least one cell when applied to `row_key`. Entries are applied in
1995    /// order, meaning that earlier mutations can be masked by later ones.
1996    /// Must contain at least one entry if `false_mutations` is empty, and at most
1997    /// 100000.
1998    #[prost(message, repeated, tag = "4")]
1999    pub true_mutations: ::prost::alloc::vec::Vec<Mutation>,
2000    /// Changes to be atomically applied to the specified row if `predicate_filter`
2001    /// does not yield any cells when applied to `row_key`. Entries are applied in
2002    /// order, meaning that earlier mutations can be masked by later ones.
2003    /// Must contain at least one entry if `true_mutations` is empty, and at most
2004    /// 100000.
2005    #[prost(message, repeated, tag = "5")]
2006    pub false_mutations: ::prost::alloc::vec::Vec<Mutation>,
2007}
2008/// Response message for Bigtable.CheckAndMutateRow.
2009#[serde_with::serde_as]
2010#[derive(serde::Serialize, serde::Deserialize)]
2011#[serde(rename_all = "camelCase")]
2012#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2013pub struct CheckAndMutateRowResponse {
2014    /// Whether or not the request's `predicate_filter` yielded any results for
2015    /// the specified row.
2016    #[prost(bool, tag = "1")]
2017    pub predicate_matched: bool,
2018}
2019/// Request message for client connection keep-alive and warming.
2020#[serde_with::serde_as]
2021#[derive(serde::Serialize, serde::Deserialize)]
2022#[serde(rename_all = "camelCase")]
2023#[derive(Clone, PartialEq, ::prost::Message)]
2024pub struct PingAndWarmRequest {
2025    /// Required. The unique name of the instance to check permissions for as well
2026    /// as respond. Values are of the form
2027    /// `projects/<project>/instances/<instance>`.
2028    #[prost(string, tag = "1")]
2029    pub name: ::prost::alloc::string::String,
2030    /// This value specifies routing for replication. If not specified, the
2031    /// "default" application profile will be used.
2032    #[prost(string, tag = "2")]
2033    pub app_profile_id: ::prost::alloc::string::String,
2034}
2035/// Response message for Bigtable.PingAndWarm connection keepalive and warming.
2036#[serde_with::serde_as]
2037#[derive(serde::Serialize, serde::Deserialize)]
2038#[serde(rename_all = "camelCase")]
2039#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2040pub struct PingAndWarmResponse {}
2041/// Request message for Bigtable.ReadModifyWriteRow.
2042#[serde_with::serde_as]
2043#[derive(serde::Serialize, serde::Deserialize)]
2044#[serde(rename_all = "camelCase")]
2045#[derive(Clone, PartialEq, ::prost::Message)]
2046pub struct ReadModifyWriteRowRequest {
2047    /// Optional. The unique name of the table to which the read/modify/write rules
2048    /// should be applied.
2049    ///
2050    /// Values are of the form
2051    /// `projects/<project>/instances/<instance>/tables/<table>`.
2052    #[prost(string, tag = "1")]
2053    pub table_name: ::prost::alloc::string::String,
2054    /// Optional. The unique name of the AuthorizedView to which the
2055    /// read/modify/write rules should be applied.
2056    ///
2057    /// Values are of the form
2058    /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
2059    #[prost(string, tag = "6")]
2060    pub authorized_view_name: ::prost::alloc::string::String,
2061    /// This value specifies routing for replication. If not specified, the
2062    /// "default" application profile will be used.
2063    #[prost(string, tag = "4")]
2064    pub app_profile_id: ::prost::alloc::string::String,
2065    /// Required. The key of the row to which the read/modify/write rules should be
2066    /// applied.
2067    #[prost(bytes = "vec", tag = "2")]
2068    pub row_key: ::prost::alloc::vec::Vec<u8>,
2069    /// Required. Rules specifying how the specified row's contents are to be
2070    /// transformed into writes. Entries are applied in order, meaning that earlier
2071    /// rules will affect the results of later ones.
2072    #[prost(message, repeated, tag = "3")]
2073    pub rules: ::prost::alloc::vec::Vec<ReadModifyWriteRule>,
2074}
2075/// Response message for Bigtable.ReadModifyWriteRow.
2076#[serde_with::serde_as]
2077#[derive(serde::Serialize, serde::Deserialize)]
2078#[serde(rename_all = "camelCase")]
2079#[derive(Clone, PartialEq, ::prost::Message)]
2080pub struct ReadModifyWriteRowResponse {
2081    /// A Row containing the new contents of all cells modified by the request.
2082    #[prost(message, optional, tag = "1")]
2083    pub row: ::core::option::Option<Row>,
2084}
2085/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2086/// Request message for Bigtable.GenerateInitialChangeStreamPartitions.
2087#[serde_with::serde_as]
2088#[derive(serde::Serialize, serde::Deserialize)]
2089#[serde(rename_all = "camelCase")]
2090#[derive(Clone, PartialEq, ::prost::Message)]
2091pub struct GenerateInitialChangeStreamPartitionsRequest {
2092    /// Required. The unique name of the table from which to get change stream
2093    /// partitions. Values are of the form
2094    /// `projects/<project>/instances/<instance>/tables/<table>`.
2095    /// Change streaming must be enabled on the table.
2096    #[prost(string, tag = "1")]
2097    pub table_name: ::prost::alloc::string::String,
2098    /// This value specifies routing for replication. If not specified, the
2099    /// "default" application profile will be used.
2100    /// Single cluster routing must be configured on the profile.
2101    #[prost(string, tag = "2")]
2102    pub app_profile_id: ::prost::alloc::string::String,
2103}
2104/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2105/// Response message for Bigtable.GenerateInitialChangeStreamPartitions.
2106#[serde_with::serde_as]
2107#[derive(serde::Serialize, serde::Deserialize)]
2108#[serde(rename_all = "camelCase")]
2109#[derive(Clone, PartialEq, ::prost::Message)]
2110pub struct GenerateInitialChangeStreamPartitionsResponse {
2111    /// A partition of the change stream.
2112    #[prost(message, optional, tag = "1")]
2113    pub partition: ::core::option::Option<StreamPartition>,
2114}
2115/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2116/// Request message for Bigtable.ReadChangeStream.
2117#[serde_with::serde_as]
2118#[derive(serde::Serialize, serde::Deserialize)]
2119#[serde(rename_all = "camelCase")]
2120#[derive(Clone, PartialEq, ::prost::Message)]
2121pub struct ReadChangeStreamRequest {
2122    /// Required. The unique name of the table from which to read a change stream.
2123    /// Values are of the form
2124    /// `projects/<project>/instances/<instance>/tables/<table>`.
2125    /// Change streaming must be enabled on the table.
2126    #[prost(string, tag = "1")]
2127    pub table_name: ::prost::alloc::string::String,
2128    /// This value specifies routing for replication. If not specified, the
2129    /// "default" application profile will be used.
2130    /// Single cluster routing must be configured on the profile.
2131    #[prost(string, tag = "2")]
2132    pub app_profile_id: ::prost::alloc::string::String,
2133    /// The partition to read changes from.
2134    #[prost(message, optional, tag = "3")]
2135    pub partition: ::core::option::Option<StreamPartition>,
2136    /// If specified, OK will be returned when the stream advances beyond
2137    /// this time. Otherwise, changes will be continuously delivered on the stream.
2138    /// This value is inclusive and will be truncated to microsecond granularity.
2139    #[prost(message, optional, tag = "5")]
2140    pub end_time: ::core::option::Option<::prost_wkt_types::Timestamp>,
2141    /// If specified, the duration between `Heartbeat` messages on the stream.
2142    /// Otherwise, defaults to 5 seconds.
2143    #[prost(message, optional, tag = "7")]
2144    pub heartbeat_duration: ::core::option::Option<::prost_wkt_types::Duration>,
2145    /// Options for describing where we want to start reading from the stream.
2146    #[prost(oneof = "read_change_stream_request::StartFrom", tags = "4, 6")]
2147    pub start_from: ::core::option::Option<read_change_stream_request::StartFrom>,
2148}
2149/// Nested message and enum types in `ReadChangeStreamRequest`.
2150pub mod read_change_stream_request {
2151    /// Options for describing where we want to start reading from the stream.
2152    #[serde_with::serde_as]
2153    #[derive(serde::Serialize, serde::Deserialize)]
2154    #[serde(rename_all = "camelCase")]
2155    #[derive(Clone, PartialEq, ::prost::Oneof)]
2156    pub enum StartFrom {
2157        /// Start reading the stream at the specified timestamp. This timestamp must
2158        /// be within the change stream retention period, less than or equal to the
2159        /// current time, and after change stream creation, whichever is greater.
2160        /// This value is inclusive and will be truncated to microsecond granularity.
2161        #[prost(message, tag = "4")]
2162        StartTime(::prost_wkt_types::Timestamp),
2163        /// Tokens that describe how to resume reading a stream where reading
2164        /// previously left off. If specified, changes will be read starting at the
2165        /// the position. Tokens are delivered on the stream as part of `Heartbeat`
2166        /// and `CloseStream` messages.
2167        ///
2168        /// If a single token is provided, the token’s partition must exactly match
2169        /// the request’s partition. If multiple tokens are provided, as in the case
2170        /// of a partition merge, the union of the token partitions must exactly
2171        /// cover the request’s partition. Otherwise, INVALID_ARGUMENT will be
2172        /// returned.
2173        #[prost(message, tag = "6")]
2174        ContinuationTokens(super::StreamContinuationTokens),
2175    }
2176}
2177/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2178/// Response message for Bigtable.ReadChangeStream.
2179#[serde_with::serde_as]
2180#[derive(serde::Serialize, serde::Deserialize)]
2181#[serde(rename_all = "camelCase")]
2182#[derive(Clone, PartialEq, ::prost::Message)]
2183pub struct ReadChangeStreamResponse {
2184    /// The data or control message on the stream.
2185    #[prost(oneof = "read_change_stream_response::StreamRecord", tags = "1, 2, 3")]
2186    pub stream_record: ::core::option::Option<read_change_stream_response::StreamRecord>,
2187}
2188/// Nested message and enum types in `ReadChangeStreamResponse`.
2189pub mod read_change_stream_response {
2190    /// A partial or complete mutation.
2191    #[serde_with::serde_as]
2192    #[derive(serde::Serialize, serde::Deserialize)]
2193    #[serde(rename_all = "camelCase")]
2194    #[derive(Clone, PartialEq, ::prost::Message)]
2195    pub struct MutationChunk {
2196        /// If set, then the mutation is a `SetCell` with a chunked value across
2197        /// multiple messages.
2198        #[prost(message, optional, tag = "1")]
2199        pub chunk_info: ::core::option::Option<mutation_chunk::ChunkInfo>,
2200        /// If this is a continuation of a chunked message (`chunked_value_offset` >
2201        /// 0), ignore all fields except the `SetCell`'s value and merge it with
2202        /// the previous message by concatenating the value fields.
2203        #[prost(message, optional, tag = "2")]
2204        pub mutation: ::core::option::Option<super::Mutation>,
2205    }
2206    /// Nested message and enum types in `MutationChunk`.
2207    pub mod mutation_chunk {
2208        /// Information about the chunking of this mutation.
2209        /// Only `SetCell` mutations can be chunked, and all chunks for a `SetCell`
2210        /// will be delivered contiguously with no other mutation types interleaved.
2211        #[serde_with::serde_as]
2212        #[derive(serde::Serialize, serde::Deserialize)]
2213        #[serde(rename_all = "camelCase")]
2214        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
2215        pub struct ChunkInfo {
2216            /// The total value size of all the chunks that make up the `SetCell`.
2217            #[prost(int32, tag = "1")]
2218            pub chunked_value_size: i32,
2219            /// The byte offset of this chunk into the total value size of the
2220            /// mutation.
2221            #[prost(int32, tag = "2")]
2222            pub chunked_value_offset: i32,
2223            /// When true, this is the last chunk of a chunked `SetCell`.
2224            #[prost(bool, tag = "3")]
2225            pub last_chunk: bool,
2226        }
2227    }
2228    /// A message corresponding to one or more mutations to the partition
2229    /// being streamed. A single logical `DataChange` message may also be split
2230    /// across a sequence of multiple individual messages. Messages other than
2231    /// the first in a sequence will only have the `type` and `chunks` fields
2232    /// populated, with the final message in the sequence also containing `done`
2233    /// set to true.
2234    #[serde_with::serde_as]
2235    #[derive(serde::Serialize, serde::Deserialize)]
2236    #[serde(rename_all = "camelCase")]
2237    #[derive(Clone, PartialEq, ::prost::Message)]
2238    pub struct DataChange {
2239        /// The type of the mutation.
2240        #[prost(enumeration = "data_change::Type", tag = "1")]
2241        pub r#type: i32,
2242        /// The cluster where the mutation was applied.
2243        /// Not set when `type` is `GARBAGE_COLLECTION`.
2244        #[prost(string, tag = "2")]
2245        pub source_cluster_id: ::prost::alloc::string::String,
2246        /// The row key for all mutations that are part of this `DataChange`.
2247        /// If the `DataChange` is chunked across multiple messages, then this field
2248        /// will only be set for the first message.
2249        #[prost(bytes = "vec", tag = "3")]
2250        pub row_key: ::prost::alloc::vec::Vec<u8>,
2251        /// The timestamp at which the mutation was applied on the Bigtable server.
2252        #[prost(message, optional, tag = "4")]
2253        pub commit_timestamp: ::core::option::Option<::prost_wkt_types::Timestamp>,
2254        /// A value that lets stream consumers reconstruct Bigtable's
2255        /// conflict resolution semantics.
2256        /// <https://cloud.google.com/bigtable/docs/writes#conflict-resolution>
2257        /// In the event that the same row key, column family, column qualifier,
2258        /// timestamp are modified on different clusters at the same
2259        /// `commit_timestamp`, the mutation with the larger `tiebreaker` will be the
2260        /// one chosen for the eventually consistent state of the system.
2261        #[prost(int32, tag = "5")]
2262        pub tiebreaker: i32,
2263        /// The mutations associated with this change to the partition.
2264        /// May contain complete mutations or chunks of a multi-message chunked
2265        /// `DataChange` record.
2266        #[prost(message, repeated, tag = "6")]
2267        pub chunks: ::prost::alloc::vec::Vec<MutationChunk>,
2268        /// When true, indicates that the entire `DataChange` has been read
2269        /// and the client can safely process the message.
2270        #[prost(bool, tag = "8")]
2271        pub done: bool,
2272        /// An encoded position for this stream's partition to restart reading from.
2273        /// This token is for the StreamPartition from the request.
2274        #[prost(string, tag = "9")]
2275        pub token: ::prost::alloc::string::String,
2276        /// An estimate of the commit timestamp that is usually lower than or equal
2277        /// to any timestamp for a record that will be delivered in the future on the
2278        /// stream. It is possible that, under particular circumstances that a future
2279        /// record has a timestamp is is lower than a previously seen timestamp. For
2280        /// an example usage see
2281        /// <https://beam.apache.org/documentation/basics/#watermarks>
2282        #[prost(message, optional, tag = "10")]
2283        pub estimated_low_watermark: ::core::option::Option<::prost_wkt_types::Timestamp>,
2284    }
2285    /// Nested message and enum types in `DataChange`.
2286    pub mod data_change {
2287        /// The type of mutation.
2288        #[serde_with::serde_as]
2289        #[derive(serde::Serialize, serde::Deserialize)]
2290        #[serde(rename_all = "camelCase")]
2291        #[derive(
2292            Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration,
2293        )]
2294        #[repr(i32)]
2295        pub enum Type {
2296            /// The type is unspecified.
2297            Unspecified = 0,
2298            /// A user-initiated mutation.
2299            User = 1,
2300            /// A system-initiated mutation as part of garbage collection.
2301            /// <https://cloud.google.com/bigtable/docs/garbage-collection>
2302            GarbageCollection = 2,
2303            /// This is a continuation of a multi-message change.
2304            Continuation = 3,
2305        }
2306        impl Type {
2307            /// String value of the enum field names used in the ProtoBuf definition.
2308            ///
2309            /// The values are not transformed in any way and thus are considered stable
2310            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2311            pub fn as_str_name(&self) -> &'static str {
2312                match self {
2313                    Self::Unspecified => "TYPE_UNSPECIFIED",
2314                    Self::User => "USER",
2315                    Self::GarbageCollection => "GARBAGE_COLLECTION",
2316                    Self::Continuation => "CONTINUATION",
2317                }
2318            }
2319            /// Creates an enum from field names used in the ProtoBuf definition.
2320            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2321                match value {
2322                    "TYPE_UNSPECIFIED" => Some(Self::Unspecified),
2323                    "USER" => Some(Self::User),
2324                    "GARBAGE_COLLECTION" => Some(Self::GarbageCollection),
2325                    "CONTINUATION" => Some(Self::Continuation),
2326                    _ => None,
2327                }
2328            }
2329        }
2330    }
2331    /// A periodic message with information that can be used to checkpoint
2332    /// the state of a stream.
2333    #[serde_with::serde_as]
2334    #[derive(serde::Serialize, serde::Deserialize)]
2335    #[serde(rename_all = "camelCase")]
2336    #[derive(Clone, PartialEq, ::prost::Message)]
2337    pub struct Heartbeat {
2338        /// A token that can be provided to a subsequent `ReadChangeStream` call
2339        /// to pick up reading at the current stream position.
2340        #[prost(message, optional, tag = "1")]
2341        pub continuation_token: ::core::option::Option<super::StreamContinuationToken>,
2342        /// An estimate of the commit timestamp that is usually lower than or equal
2343        /// to any timestamp for a record that will be delivered in the future on the
2344        /// stream. It is possible that, under particular circumstances that a future
2345        /// record has a timestamp is is lower than a previously seen timestamp. For
2346        /// an example usage see
2347        /// <https://beam.apache.org/documentation/basics/#watermarks>
2348        #[prost(message, optional, tag = "2")]
2349        pub estimated_low_watermark: ::core::option::Option<::prost_wkt_types::Timestamp>,
2350    }
2351    /// A message indicating that the client should stop reading from the stream.
2352    /// If status is OK and `continuation_tokens` & `new_partitions` are empty, the
2353    /// stream has finished (for example if there was an `end_time` specified).
2354    /// If `continuation_tokens` & `new_partitions` are present, then a change in
2355    /// partitioning requires the client to open a new stream for each token to
2356    /// resume reading. Example:
2357    /// \[B,      D) ends
2358    /// \|
2359    /// v
2360    /// new_partitions:  \[A,  C) \[C,  E)
2361    /// continuation_tokens.partitions:  \[B,C) \[C,D)
2362    /// ^---^ ^---^
2363    /// ^     ^
2364    /// \|     |
2365    /// \|     StreamContinuationToken 2
2366    /// \|
2367    /// StreamContinuationToken 1
2368    /// To read the new partition \[A,C), supply the continuation tokens whose
2369    /// ranges cover the new partition, for example ContinuationToken\[A,B) &
2370    /// ContinuationToken\[B,C).
2371    #[serde_with::serde_as]
2372    #[derive(serde::Serialize, serde::Deserialize)]
2373    #[serde(rename_all = "camelCase")]
2374    #[derive(Clone, PartialEq, ::prost::Message)]
2375    pub struct CloseStream {
2376        /// The status of the stream.
2377        #[prost(message, optional, tag = "1")]
2378        pub status: ::core::option::Option<super::super::super::rpc::Status>,
2379        /// If non-empty, contains the information needed to resume reading their
2380        /// associated partitions.
2381        #[prost(message, repeated, tag = "2")]
2382        pub continuation_tokens: ::prost::alloc::vec::Vec<super::StreamContinuationToken>,
2383        /// If non-empty, contains the new partitions to start reading from, which
2384        /// are related to but not necessarily identical to the partitions for the
2385        /// above `continuation_tokens`.
2386        #[prost(message, repeated, tag = "3")]
2387        pub new_partitions: ::prost::alloc::vec::Vec<super::StreamPartition>,
2388    }
2389    /// The data or control message on the stream.
2390    #[serde_with::serde_as]
2391    #[derive(serde::Serialize, serde::Deserialize)]
2392    #[serde(rename_all = "camelCase")]
2393    #[derive(Clone, PartialEq, ::prost::Oneof)]
2394    pub enum StreamRecord {
2395        /// A mutation to the partition.
2396        #[prost(message, tag = "1")]
2397        DataChange(DataChange),
2398        /// A periodic heartbeat message.
2399        #[prost(message, tag = "2")]
2400        Heartbeat(Heartbeat),
2401        /// An indication that the stream should be closed.
2402        #[prost(message, tag = "3")]
2403        CloseStream(CloseStream),
2404    }
2405}
2406/// Request message for Bigtable.ExecuteQuery
2407#[serde_with::serde_as]
2408#[derive(serde::Serialize, serde::Deserialize)]
2409#[serde(rename_all = "camelCase")]
2410#[derive(Clone, PartialEq, ::prost::Message)]
2411pub struct ExecuteQueryRequest {
2412    /// Required. The unique name of the instance against which the query should be
2413    /// executed.
2414    /// Values are of the form `projects/<project>/instances/<instance>`
2415    #[prost(string, tag = "1")]
2416    pub instance_name: ::prost::alloc::string::String,
2417    /// Optional. This value specifies routing for replication. If not specified,
2418    /// the `default` application profile will be used.
2419    #[prost(string, tag = "2")]
2420    pub app_profile_id: ::prost::alloc::string::String,
2421    /// Required. The query string.
2422    #[prost(string, tag = "3")]
2423    pub query: ::prost::alloc::string::String,
2424    /// Optional. If this request is resuming a previously interrupted query
2425    /// execution, `resume_token` should be copied from the last
2426    /// PartialResultSet yielded before the interruption. Doing this
2427    /// enables the query execution to resume where the last one left
2428    /// off.
2429    /// The rest of the request parameters must exactly match the
2430    /// request that yielded this token. Otherwise the request will fail.
2431    #[prost(bytes = "vec", tag = "8")]
2432    pub resume_token: ::prost::alloc::vec::Vec<u8>,
2433    /// Required. params contains string type keys and Bigtable type values that
2434    /// bind to placeholders in the query string. In query string, a parameter
2435    /// placeholder consists of the
2436    /// `@` character followed by the parameter name (for example, `@firstName`) in
2437    /// the query string.
2438    ///
2439    /// For example, if
2440    /// `params\["firstName"\] = bytes_value: "foo" type {bytes_type {}}`
2441    /// then `@firstName` will be replaced with googlesql bytes value "foo" in the
2442    /// query string during query evaluation.
2443    ///
2444    /// In case of Value.kind is not set, it will be set to corresponding null
2445    /// value in googlesql.
2446    /// `params\["firstName"\] =  type {string_type {}}`
2447    /// then `@firstName` will be replaced with googlesql null string.
2448    ///
2449    /// Value.type should always be set and no inference of type will be made from
2450    /// Value.kind. If Value.type is not set, we will return INVALID_ARGUMENT
2451    /// error.
2452    #[prost(map = "string, message", tag = "7")]
2453    pub params: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
2454    /// Required. Requested data format for the response.
2455    #[prost(oneof = "execute_query_request::DataFormat", tags = "4")]
2456    pub data_format: ::core::option::Option<execute_query_request::DataFormat>,
2457}
2458/// Nested message and enum types in `ExecuteQueryRequest`.
2459pub mod execute_query_request {
2460    /// Required. Requested data format for the response.
2461    #[serde_with::serde_as]
2462    #[derive(serde::Serialize, serde::Deserialize)]
2463    #[serde(rename_all = "camelCase")]
2464    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
2465    pub enum DataFormat {
2466        /// Protocol buffer format as described by ProtoSchema and ProtoRows
2467        /// messages.
2468        #[prost(message, tag = "4")]
2469        ProtoFormat(super::ProtoFormat),
2470    }
2471}
2472/// Response message for Bigtable.ExecuteQuery
2473#[serde_with::serde_as]
2474#[derive(serde::Serialize, serde::Deserialize)]
2475#[serde(rename_all = "camelCase")]
2476#[derive(Clone, PartialEq, ::prost::Message)]
2477pub struct ExecuteQueryResponse {
2478    /// The first response streamed from the server is of type `ResultSetMetadata`
2479    /// and includes information about the columns and types of the result set.
2480    /// From there on, we stream `PartialResultSet` messages with no additional
2481    /// information. `PartialResultSet` will contain `resume_token` to restart the
2482    /// response if query interrupts. In case of resumption with `resume_token`,
2483    /// the server will not resend the ResultSetMetadata.
2484    #[prost(oneof = "execute_query_response::Response", tags = "1, 2")]
2485    pub response: ::core::option::Option<execute_query_response::Response>,
2486}
2487/// Nested message and enum types in `ExecuteQueryResponse`.
2488pub mod execute_query_response {
2489    /// The first response streamed from the server is of type `ResultSetMetadata`
2490    /// and includes information about the columns and types of the result set.
2491    /// From there on, we stream `PartialResultSet` messages with no additional
2492    /// information. `PartialResultSet` will contain `resume_token` to restart the
2493    /// response if query interrupts. In case of resumption with `resume_token`,
2494    /// the server will not resend the ResultSetMetadata.
2495    #[serde_with::serde_as]
2496    #[derive(serde::Serialize, serde::Deserialize)]
2497    #[serde(rename_all = "camelCase")]
2498    #[derive(Clone, PartialEq, ::prost::Oneof)]
2499    pub enum Response {
2500        /// Structure of rows in this response stream. The first (and only the first)
2501        /// response streamed from the server will be of this type.
2502        #[prost(message, tag = "1")]
2503        Metadata(super::ResultSetMetadata),
2504        /// A partial result set with row data potentially including additional
2505        /// instructions on how recent past and future partial responses should be
2506        /// interpreted.
2507        #[prost(message, tag = "2")]
2508        Results(super::PartialResultSet),
2509    }
2510}
2511/// Generated client implementations.
2512pub mod bigtable_client {
2513    #![allow(
2514        unused_variables,
2515        dead_code,
2516        missing_docs,
2517        clippy::wildcard_imports,
2518        clippy::let_unit_value
2519    )]
2520    use tonic::codegen::http::Uri;
2521    use tonic::codegen::*;
2522    /// Service for reading from and writing to existing Bigtable tables.
2523    #[derive(Debug, Clone)]
2524    pub struct BigtableClient<T> {
2525        inner: tonic::client::Grpc<T>,
2526    }
2527    impl BigtableClient<tonic::transport::Channel> {
2528        /// Attempt to create a new client by connecting to a given endpoint.
2529        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
2530        where
2531            D: TryInto<tonic::transport::Endpoint>,
2532            D::Error: Into<StdError>,
2533        {
2534            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
2535            Ok(Self::new(conn))
2536        }
2537    }
2538    impl<T> BigtableClient<T>
2539    where
2540        T: tonic::client::GrpcService<tonic::body::BoxBody>,
2541        T::Error: Into<StdError>,
2542        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
2543        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
2544    {
2545        pub fn new(inner: T) -> Self {
2546            let inner = tonic::client::Grpc::new(inner);
2547            Self { inner }
2548        }
2549        pub fn with_origin(inner: T, origin: Uri) -> Self {
2550            let inner = tonic::client::Grpc::with_origin(inner, origin);
2551            Self { inner }
2552        }
2553        pub fn with_interceptor<F>(
2554            inner: T,
2555            interceptor: F,
2556        ) -> BigtableClient<InterceptedService<T, F>>
2557        where
2558            F: tonic::service::Interceptor,
2559            T::ResponseBody: Default,
2560            T: tonic::codegen::Service<
2561                http::Request<tonic::body::BoxBody>,
2562                Response = http::Response<
2563                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
2564                >,
2565            >,
2566            <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error:
2567                Into<StdError> + std::marker::Send + std::marker::Sync,
2568        {
2569            BigtableClient::new(InterceptedService::new(inner, interceptor))
2570        }
2571        /// Compress requests with the given encoding.
2572        ///
2573        /// This requires the server to support it otherwise it might respond with an
2574        /// error.
2575        #[must_use]
2576        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2577            self.inner = self.inner.send_compressed(encoding);
2578            self
2579        }
2580        /// Enable decompressing responses.
2581        #[must_use]
2582        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2583            self.inner = self.inner.accept_compressed(encoding);
2584            self
2585        }
2586        /// Limits the maximum size of a decoded message.
2587        ///
2588        /// Default: `4MB`
2589        #[must_use]
2590        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2591            self.inner = self.inner.max_decoding_message_size(limit);
2592            self
2593        }
2594        /// Limits the maximum size of an encoded message.
2595        ///
2596        /// Default: `usize::MAX`
2597        #[must_use]
2598        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2599            self.inner = self.inner.max_encoding_message_size(limit);
2600            self
2601        }
2602        /// Streams back the contents of all requested rows in key order, optionally
2603        /// applying the same Reader filter to each. Depending on their size,
2604        /// rows and cells may be broken up across multiple responses, but
2605        /// atomicity of each row will still be preserved. See the
2606        /// ReadRowsResponse documentation for details.
2607        pub async fn read_rows(
2608            &mut self,
2609            request: impl tonic::IntoRequest<super::ReadRowsRequest>,
2610        ) -> std::result::Result<
2611            tonic::Response<tonic::codec::Streaming<super::ReadRowsResponse>>,
2612            tonic::Status,
2613        > {
2614            self.inner.ready().await.map_err(|e| {
2615                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2616            })?;
2617            let codec = tonic::codec::ProstCodec::default();
2618            let path =
2619                http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/ReadRows");
2620            let mut req = request.into_request();
2621            req.extensions_mut()
2622                .insert(GrpcMethod::new("google.bigtable.v2.Bigtable", "ReadRows"));
2623            self.inner.server_streaming(req, path, codec).await
2624        }
2625        /// Returns a sample of row keys in the table. The returned row keys will
2626        /// delimit contiguous sections of the table of approximately equal size,
2627        /// which can be used to break up the data for distributed tasks like
2628        /// mapreduces.
2629        pub async fn sample_row_keys(
2630            &mut self,
2631            request: impl tonic::IntoRequest<super::SampleRowKeysRequest>,
2632        ) -> std::result::Result<
2633            tonic::Response<tonic::codec::Streaming<super::SampleRowKeysResponse>>,
2634            tonic::Status,
2635        > {
2636            self.inner.ready().await.map_err(|e| {
2637                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2638            })?;
2639            let codec = tonic::codec::ProstCodec::default();
2640            let path =
2641                http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/SampleRowKeys");
2642            let mut req = request.into_request();
2643            req.extensions_mut().insert(GrpcMethod::new(
2644                "google.bigtable.v2.Bigtable",
2645                "SampleRowKeys",
2646            ));
2647            self.inner.server_streaming(req, path, codec).await
2648        }
2649        /// Mutates a row atomically. Cells already present in the row are left
2650        /// unchanged unless explicitly changed by `mutation`.
2651        pub async fn mutate_row(
2652            &mut self,
2653            request: impl tonic::IntoRequest<super::MutateRowRequest>,
2654        ) -> std::result::Result<tonic::Response<super::MutateRowResponse>, tonic::Status> {
2655            self.inner.ready().await.map_err(|e| {
2656                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2657            })?;
2658            let codec = tonic::codec::ProstCodec::default();
2659            let path =
2660                http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/MutateRow");
2661            let mut req = request.into_request();
2662            req.extensions_mut()
2663                .insert(GrpcMethod::new("google.bigtable.v2.Bigtable", "MutateRow"));
2664            self.inner.unary(req, path, codec).await
2665        }
2666        /// Mutates multiple rows in a batch. Each individual row is mutated
2667        /// atomically as in MutateRow, but the entire batch is not executed
2668        /// atomically.
2669        pub async fn mutate_rows(
2670            &mut self,
2671            request: impl tonic::IntoRequest<super::MutateRowsRequest>,
2672        ) -> std::result::Result<
2673            tonic::Response<tonic::codec::Streaming<super::MutateRowsResponse>>,
2674            tonic::Status,
2675        > {
2676            self.inner.ready().await.map_err(|e| {
2677                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2678            })?;
2679            let codec = tonic::codec::ProstCodec::default();
2680            let path =
2681                http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/MutateRows");
2682            let mut req = request.into_request();
2683            req.extensions_mut()
2684                .insert(GrpcMethod::new("google.bigtable.v2.Bigtable", "MutateRows"));
2685            self.inner.server_streaming(req, path, codec).await
2686        }
2687        /// Mutates a row atomically based on the output of a predicate Reader filter.
2688        pub async fn check_and_mutate_row(
2689            &mut self,
2690            request: impl tonic::IntoRequest<super::CheckAndMutateRowRequest>,
2691        ) -> std::result::Result<tonic::Response<super::CheckAndMutateRowResponse>, tonic::Status>
2692        {
2693            self.inner.ready().await.map_err(|e| {
2694                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2695            })?;
2696            let codec = tonic::codec::ProstCodec::default();
2697            let path = http::uri::PathAndQuery::from_static(
2698                "/google.bigtable.v2.Bigtable/CheckAndMutateRow",
2699            );
2700            let mut req = request.into_request();
2701            req.extensions_mut().insert(GrpcMethod::new(
2702                "google.bigtable.v2.Bigtable",
2703                "CheckAndMutateRow",
2704            ));
2705            self.inner.unary(req, path, codec).await
2706        }
2707        /// Warm up associated instance metadata for this connection.
2708        /// This call is not required but may be useful for connection keep-alive.
2709        pub async fn ping_and_warm(
2710            &mut self,
2711            request: impl tonic::IntoRequest<super::PingAndWarmRequest>,
2712        ) -> std::result::Result<tonic::Response<super::PingAndWarmResponse>, tonic::Status>
2713        {
2714            self.inner.ready().await.map_err(|e| {
2715                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2716            })?;
2717            let codec = tonic::codec::ProstCodec::default();
2718            let path =
2719                http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/PingAndWarm");
2720            let mut req = request.into_request();
2721            req.extensions_mut().insert(GrpcMethod::new(
2722                "google.bigtable.v2.Bigtable",
2723                "PingAndWarm",
2724            ));
2725            self.inner.unary(req, path, codec).await
2726        }
2727        /// Modifies a row atomically on the server. The method reads the latest
2728        /// existing timestamp and value from the specified columns and writes a new
2729        /// entry based on pre-defined read/modify/write rules. The new value for the
2730        /// timestamp is the greater of the existing timestamp or the current server
2731        /// time. The method returns the new contents of all modified cells.
2732        pub async fn read_modify_write_row(
2733            &mut self,
2734            request: impl tonic::IntoRequest<super::ReadModifyWriteRowRequest>,
2735        ) -> std::result::Result<tonic::Response<super::ReadModifyWriteRowResponse>, tonic::Status>
2736        {
2737            self.inner.ready().await.map_err(|e| {
2738                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2739            })?;
2740            let codec = tonic::codec::ProstCodec::default();
2741            let path = http::uri::PathAndQuery::from_static(
2742                "/google.bigtable.v2.Bigtable/ReadModifyWriteRow",
2743            );
2744            let mut req = request.into_request();
2745            req.extensions_mut().insert(GrpcMethod::new(
2746                "google.bigtable.v2.Bigtable",
2747                "ReadModifyWriteRow",
2748            ));
2749            self.inner.unary(req, path, codec).await
2750        }
2751        /// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2752        /// Returns the current list of partitions that make up the table's
2753        /// change stream. The union of partitions will cover the entire keyspace.
2754        /// Partitions can be read with `ReadChangeStream`.
2755        pub async fn generate_initial_change_stream_partitions(
2756            &mut self,
2757            request: impl tonic::IntoRequest<super::GenerateInitialChangeStreamPartitionsRequest>,
2758        ) -> std::result::Result<
2759            tonic::Response<
2760                tonic::codec::Streaming<super::GenerateInitialChangeStreamPartitionsResponse>,
2761            >,
2762            tonic::Status,
2763        > {
2764            self.inner.ready().await.map_err(|e| {
2765                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2766            })?;
2767            let codec = tonic::codec::ProstCodec::default();
2768            let path = http::uri::PathAndQuery::from_static(
2769                "/google.bigtable.v2.Bigtable/GenerateInitialChangeStreamPartitions",
2770            );
2771            let mut req = request.into_request();
2772            req.extensions_mut().insert(GrpcMethod::new(
2773                "google.bigtable.v2.Bigtable",
2774                "GenerateInitialChangeStreamPartitions",
2775            ));
2776            self.inner.server_streaming(req, path, codec).await
2777        }
2778        /// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2779        /// Reads changes from a table's change stream. Changes will
2780        /// reflect both user-initiated mutations and mutations that are caused by
2781        /// garbage collection.
2782        pub async fn read_change_stream(
2783            &mut self,
2784            request: impl tonic::IntoRequest<super::ReadChangeStreamRequest>,
2785        ) -> std::result::Result<
2786            tonic::Response<tonic::codec::Streaming<super::ReadChangeStreamResponse>>,
2787            tonic::Status,
2788        > {
2789            self.inner.ready().await.map_err(|e| {
2790                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2791            })?;
2792            let codec = tonic::codec::ProstCodec::default();
2793            let path = http::uri::PathAndQuery::from_static(
2794                "/google.bigtable.v2.Bigtable/ReadChangeStream",
2795            );
2796            let mut req = request.into_request();
2797            req.extensions_mut().insert(GrpcMethod::new(
2798                "google.bigtable.v2.Bigtable",
2799                "ReadChangeStream",
2800            ));
2801            self.inner.server_streaming(req, path, codec).await
2802        }
2803        /// Executes a BTQL query against a particular Cloud Bigtable instance.
2804        pub async fn execute_query(
2805            &mut self,
2806            request: impl tonic::IntoRequest<super::ExecuteQueryRequest>,
2807        ) -> std::result::Result<
2808            tonic::Response<tonic::codec::Streaming<super::ExecuteQueryResponse>>,
2809            tonic::Status,
2810        > {
2811            self.inner.ready().await.map_err(|e| {
2812                tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2813            })?;
2814            let codec = tonic::codec::ProstCodec::default();
2815            let path =
2816                http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/ExecuteQuery");
2817            let mut req = request.into_request();
2818            req.extensions_mut().insert(GrpcMethod::new(
2819                "google.bigtable.v2.Bigtable",
2820                "ExecuteQuery",
2821            ));
2822            self.inner.server_streaming(req, path, codec).await
2823        }
2824    }
2825}