# frozen_string_literal: true

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Cloud
    module Datastream
      module V1
        # Oracle database profile.
        # @!attribute [rw] hostname
        #   @return [::String]
        #     Required. Hostname for the Oracle connection.
        # @!attribute [rw] port
        #   @return [::Integer]
        #     Port for the Oracle connection, default value is 1521.
        # @!attribute [rw] username
        #   @return [::String]
        #     Required. Username for the Oracle connection.
        # @!attribute [rw] password
        #   @return [::String]
        #     Required. Password for the Oracle connection.
        # @!attribute [rw] database_service
        #   @return [::String]
        #     Required. Database for the Oracle connection.
        # @!attribute [rw] connection_attributes
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Connection string attributes
        class OracleProfile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class ConnectionAttributesEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # MySQL database profile.
        # @!attribute [rw] hostname
        #   @return [::String]
        #     Required. Hostname for the MySQL connection.
        # @!attribute [rw] port
        #   @return [::Integer]
        #     Port for the MySQL connection, default value is 3306.
        # @!attribute [rw] username
        #   @return [::String]
        #     Required. Username for the MySQL connection.
        # @!attribute [rw] password
        #   @return [::String]
        #     Required. Input only. Password for the MySQL connection.
        # @!attribute [rw] ssl_config
        #   @return [::Google::Cloud::Datastream::V1::MysqlSslConfig]
        #     SSL configuration for the MySQL connection.
        class MysqlProfile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # PostgreSQL database profile.
        # @!attribute [rw] hostname
        #   @return [::String]
        #     Required. Hostname for the PostgreSQL connection.
        # @!attribute [rw] port
        #   @return [::Integer]
        #     Port for the PostgreSQL connection, default value is 5432.
        # @!attribute [rw] username
        #   @return [::String]
        #     Required. Username for the PostgreSQL connection.
        # @!attribute [rw] password
        #   @return [::String]
        #     Required. Password for the PostgreSQL connection.
        # @!attribute [rw] database
        #   @return [::String]
        #     Required. Database for the PostgreSQL connection.
        class PostgresqlProfile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Cloud Storage bucket profile.
        # @!attribute [rw] bucket
        #   @return [::String]
        #     Required. The Cloud Storage bucket name.
        # @!attribute [rw] root_path
        #   @return [::String]
        #     The root path inside the Cloud Storage bucket.
        class GcsProfile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # BigQuery warehouse profile.
        class BigQueryProfile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Static IP address connectivity. Used when the source database is configured
        # to allow incoming connections from the Datastream public IP addresses
        # for the region specified in the connection profile.
        class StaticServiceIpConnectivity
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Forward SSH Tunnel connectivity.
        # @!attribute [rw] hostname
        #   @return [::String]
        #     Required. Hostname for the SSH tunnel.
        # @!attribute [rw] username
        #   @return [::String]
        #     Required. Username for the SSH tunnel.
        # @!attribute [rw] port
        #   @return [::Integer]
        #     Port for the SSH tunnel, default value is 22.
        # @!attribute [rw] password
        #   @return [::String]
        #     Input only. SSH password.
        # @!attribute [rw] private_key
        #   @return [::String]
        #     Input only. SSH private key.
        class ForwardSshTunnelConnectivity
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The VPC Peering configuration is used to create VPC peering between
        # Datastream and the consumer's VPC.
        # @!attribute [rw] vpc
        #   @return [::String]
        #     Required. Fully qualified name of the VPC that Datastream will peer to.
        #     Format: `projects/{project}/global/{networks}/{name}`
        # @!attribute [rw] subnet
        #   @return [::String]
        #     Required. A free subnet for peering. (CIDR of /29)
        class VpcPeeringConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The PrivateConnection resource is used to establish private connectivity
        # between Datastream and a customer's network.
        # @!attribute [r] name
        #   @return [::String]
        #     Output only. The resource's name.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The create time of the resource.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The update time of the resource.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Labels.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Required. Display name.
        # @!attribute [r] state
        #   @return [::Google::Cloud::Datastream::V1::PrivateConnection::State]
        #     Output only. The state of the Private Connection.
        # @!attribute [r] error
        #   @return [::Google::Cloud::Datastream::V1::Error]
        #     Output only. In case of error, the details of the error in a user-friendly
        #     format.
        # @!attribute [rw] vpc_peering_config
        #   @return [::Google::Cloud::Datastream::V1::VpcPeeringConfig]
        #     VPC Peering Config.
        class PrivateConnection
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Private Connection state.
          module State
            # Unspecified state.
            STATE_UNSPECIFIED = 0

            # The private connection is in creation state - creating resources.
            CREATING = 1

            # The private connection has been created with all of its resources.
            CREATED = 2

            # The private connection creation has failed.
            FAILED = 3

            # The private connection is being deleted.
            DELETING = 4

            # Delete request has failed, resource is in invalid state.
            FAILED_TO_DELETE = 5
          end
        end

        # Private Connectivity
        # @!attribute [rw] private_connection
        #   @return [::String]
        #     Required. A reference to a private connection resource.
        #     Format: `projects/{project}/locations/{location}/privateConnections/{name}`
        class PrivateConnectivity
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The route resource is the child of the private connection resource,
        # used for defining a route for a private connection.
        # @!attribute [r] name
        #   @return [::String]
        #     Output only. The resource's name.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The create time of the resource.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The update time of the resource.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Labels.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Required. Display name.
        # @!attribute [rw] destination_address
        #   @return [::String]
        #     Required. Destination address for connection
        # @!attribute [rw] destination_port
        #   @return [::Integer]
        #     Destination port for connection
        class Route
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # MySQL SSL configuration information.
        # @!attribute [rw] client_key
        #   @return [::String]
        #     Input only. PEM-encoded private key associated with the Client Certificate.
        #     If this field is used then the 'client_certificate' and the
        #     'ca_certificate' fields are mandatory.
        # @!attribute [r] client_key_set
        #   @return [::Boolean]
        #     Output only. Indicates whether the client_key field is set.
        # @!attribute [rw] client_certificate
        #   @return [::String]
        #     Input only. PEM-encoded certificate that will be used by the replica to
        #     authenticate against the source database server. If this field is used
        #     then the 'client_key' and the 'ca_certificate' fields are mandatory.
        # @!attribute [r] client_certificate_set
        #   @return [::Boolean]
        #     Output only. Indicates whether the client_certificate field is set.
        # @!attribute [rw] ca_certificate
        #   @return [::String]
        #     Input only. PEM-encoded certificate of the CA that signed the source
        #     database server's certificate.
        # @!attribute [r] ca_certificate_set
        #   @return [::Boolean]
        #     Output only. Indicates whether the ca_certificate field is set.
        class MysqlSslConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A set of reusable connection configurations to be used as a source or
        # destination for a stream.
        # @!attribute [r] name
        #   @return [::String]
        #     Output only. The resource's name.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The create time of the resource.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The update time of the resource.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Labels.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Required. Display name.
        # @!attribute [rw] oracle_profile
        #   @return [::Google::Cloud::Datastream::V1::OracleProfile]
        #     Oracle ConnectionProfile configuration.
        # @!attribute [rw] gcs_profile
        #   @return [::Google::Cloud::Datastream::V1::GcsProfile]
        #     Cloud Storage ConnectionProfile configuration.
        # @!attribute [rw] mysql_profile
        #   @return [::Google::Cloud::Datastream::V1::MysqlProfile]
        #     MySQL ConnectionProfile configuration.
        # @!attribute [rw] bigquery_profile
        #   @return [::Google::Cloud::Datastream::V1::BigQueryProfile]
        #     BigQuery Connection Profile configuration.
        # @!attribute [rw] postgresql_profile
        #   @return [::Google::Cloud::Datastream::V1::PostgresqlProfile]
        #     PostgreSQL Connection Profile configuration.
        # @!attribute [rw] static_service_ip_connectivity
        #   @return [::Google::Cloud::Datastream::V1::StaticServiceIpConnectivity]
        #     Static Service IP connectivity.
        # @!attribute [rw] forward_ssh_connectivity
        #   @return [::Google::Cloud::Datastream::V1::ForwardSshTunnelConnectivity]
        #     Forward SSH tunnel connectivity.
        # @!attribute [rw] private_connectivity
        #   @return [::Google::Cloud::Datastream::V1::PrivateConnectivity]
        #     Private connectivity.
        class ConnectionProfile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # Oracle Column.
        # @!attribute [rw] column
        #   @return [::String]
        #     Column name.
        # @!attribute [rw] data_type
        #   @return [::String]
        #     The Oracle data type.
        # @!attribute [rw] length
        #   @return [::Integer]
        #     Column length.
        # @!attribute [rw] precision
        #   @return [::Integer]
        #     Column precision.
        # @!attribute [rw] scale
        #   @return [::Integer]
        #     Column scale.
        # @!attribute [rw] encoding
        #   @return [::String]
        #     Column encoding.
        # @!attribute [rw] primary_key
        #   @return [::Boolean]
        #     Whether or not the column represents a primary key.
        # @!attribute [rw] nullable
        #   @return [::Boolean]
        #     Whether or not the column can accept a null value.
        # @!attribute [rw] ordinal_position
        #   @return [::Integer]
        #     The ordinal position of the column in the table.
        class OracleColumn
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Oracle table.
        # @!attribute [rw] table
        #   @return [::String]
        #     Table name.
        # @!attribute [rw] oracle_columns
        #   @return [::Array<::Google::Cloud::Datastream::V1::OracleColumn>]
        #     Oracle columns in the schema.
        #     When unspecified as part of include/exclude objects, includes/excludes
        #     everything.
        class OracleTable
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Oracle schema.
        # @!attribute [rw] schema
        #   @return [::String]
        #     Schema name.
        # @!attribute [rw] oracle_tables
        #   @return [::Array<::Google::Cloud::Datastream::V1::OracleTable>]
        #     Tables in the schema.
        class OracleSchema
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Oracle database structure.
        # @!attribute [rw] oracle_schemas
        #   @return [::Array<::Google::Cloud::Datastream::V1::OracleSchema>]
        #     Oracle schemas/databases in the database server.
        class OracleRdbms
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Oracle data source configuration
        # @!attribute [rw] include_objects
        #   @return [::Google::Cloud::Datastream::V1::OracleRdbms]
        #     Oracle objects to include in the stream.
        # @!attribute [rw] exclude_objects
        #   @return [::Google::Cloud::Datastream::V1::OracleRdbms]
        #     Oracle objects to exclude from the stream.
        # @!attribute [rw] max_concurrent_cdc_tasks
        #   @return [::Integer]
        #     Maximum number of concurrent CDC tasks. The number should be non-negative.
        #     If not set (or set to 0), the system's default value is used.
        # @!attribute [rw] max_concurrent_backfill_tasks
        #   @return [::Integer]
        #     Maximum number of concurrent backfill tasks. The number should be
        #     non-negative. If not set (or set to 0), the system's default value is used.
        # @!attribute [rw] drop_large_objects
        #   @return [::Google::Cloud::Datastream::V1::OracleSourceConfig::DropLargeObjects]
        #     Drop large object values.
        # @!attribute [rw] stream_large_objects
        #   @return [::Google::Cloud::Datastream::V1::OracleSourceConfig::StreamLargeObjects]
        #     Stream large object values. NOTE: This feature is currently experimental.
        class OracleSourceConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Configuration to drop large object values.
          class DropLargeObjects
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Configuration to stream large object values.
          class StreamLargeObjects
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # PostgreSQL Column.
        # @!attribute [rw] column
        #   @return [::String]
        #     Column name.
        # @!attribute [rw] data_type
        #   @return [::String]
        #     The PostgreSQL data type.
        # @!attribute [rw] length
        #   @return [::Integer]
        #     Column length.
        # @!attribute [rw] precision
        #   @return [::Integer]
        #     Column precision.
        # @!attribute [rw] scale
        #   @return [::Integer]
        #     Column scale.
        # @!attribute [rw] primary_key
        #   @return [::Boolean]
        #     Whether or not the column represents a primary key.
        # @!attribute [rw] nullable
        #   @return [::Boolean]
        #     Whether or not the column can accept a null value.
        # @!attribute [rw] ordinal_position
        #   @return [::Integer]
        #     The ordinal position of the column in the table.
        class PostgresqlColumn
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # PostgreSQL table.
        # @!attribute [rw] table
        #   @return [::String]
        #     Table name.
        # @!attribute [rw] postgresql_columns
        #   @return [::Array<::Google::Cloud::Datastream::V1::PostgresqlColumn>]
        #     PostgreSQL columns in the schema.
        #     When unspecified as part of include/exclude objects,
        #     includes/excludes everything.
        class PostgresqlTable
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # PostgreSQL schema.
        # @!attribute [rw] schema
        #   @return [::String]
        #     Schema name.
        # @!attribute [rw] postgresql_tables
        #   @return [::Array<::Google::Cloud::Datastream::V1::PostgresqlTable>]
        #     Tables in the schema.
        class PostgresqlSchema
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # PostgreSQL database structure.
        # @!attribute [rw] postgresql_schemas
        #   @return [::Array<::Google::Cloud::Datastream::V1::PostgresqlSchema>]
        #     PostgreSQL schemas in the database server.
        class PostgresqlRdbms
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # PostgreSQL data source configuration
        # @!attribute [rw] include_objects
        #   @return [::Google::Cloud::Datastream::V1::PostgresqlRdbms]
        #     PostgreSQL objects to include in the stream.
        # @!attribute [rw] exclude_objects
        #   @return [::Google::Cloud::Datastream::V1::PostgresqlRdbms]
        #     PostgreSQL objects to exclude from the stream.
        # @!attribute [rw] replication_slot
        #   @return [::String]
        #     Required. Immutable. The name of the logical replication slot that's
        #     configured with the pgoutput plugin.
        # @!attribute [rw] publication
        #   @return [::String]
        #     Required. The name of the publication that includes the set of all tables
        #     that are defined in the stream's include_objects.
        # @!attribute [rw] max_concurrent_backfill_tasks
        #   @return [::Integer]
        #     Maximum number of concurrent backfill tasks. The number should be non
        #     negative. If not set (or set to 0), the system's default value will be
        #     used.
        class PostgresqlSourceConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # MySQL Column.
        # @!attribute [rw] column
        #   @return [::String]
        #     Column name.
        # @!attribute [rw] data_type
        #   @return [::String]
        #     The MySQL data type. Full data types list can be found here:
        #     https://dev.mysql.com/doc/refman/8.0/en/data-types.html
        # @!attribute [rw] length
        #   @return [::Integer]
        #     Column length.
        # @!attribute [rw] collation
        #   @return [::String]
        #     Column collation.
        # @!attribute [rw] primary_key
        #   @return [::Boolean]
        #     Whether or not the column represents a primary key.
        # @!attribute [rw] nullable
        #   @return [::Boolean]
        #     Whether or not the column can accept a null value.
        # @!attribute [rw] ordinal_position
        #   @return [::Integer]
        #     The ordinal position of the column in the table.
        # @!attribute [rw] precision
        #   @return [::Integer]
        #     Column precision.
        # @!attribute [rw] scale
        #   @return [::Integer]
        #     Column scale.
        class MysqlColumn
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # MySQL table.
        # @!attribute [rw] table
        #   @return [::String]
        #     Table name.
        # @!attribute [rw] mysql_columns
        #   @return [::Array<::Google::Cloud::Datastream::V1::MysqlColumn>]
        #     MySQL columns in the database.
        #     When unspecified as part of include/exclude objects, includes/excludes
        #     everything.
        class MysqlTable
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # MySQL database.
        # @!attribute [rw] database
        #   @return [::String]
        #     Database name.
        # @!attribute [rw] mysql_tables
        #   @return [::Array<::Google::Cloud::Datastream::V1::MysqlTable>]
        #     Tables in the database.
        class MysqlDatabase
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # MySQL database structure
        # @!attribute [rw] mysql_databases
        #   @return [::Array<::Google::Cloud::Datastream::V1::MysqlDatabase>]
        #     Mysql databases on the server
        class MysqlRdbms
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # MySQL source configuration
        # @!attribute [rw] include_objects
        #   @return [::Google::Cloud::Datastream::V1::MysqlRdbms]
        #     MySQL objects to retrieve from the source.
        # @!attribute [rw] exclude_objects
        #   @return [::Google::Cloud::Datastream::V1::MysqlRdbms]
        #     MySQL objects to exclude from the stream.
        # @!attribute [rw] max_concurrent_cdc_tasks
        #   @return [::Integer]
        #     Maximum number of concurrent CDC tasks. The number should be non negative.
        #     If not set (or set to 0), the system's default value will be used.
        # @!attribute [rw] max_concurrent_backfill_tasks
        #   @return [::Integer]
        #     Maximum number of concurrent backfill tasks. The number should be non
        #     negative. If not set (or set to 0), the system's default value will be
        #     used.
        class MysqlSourceConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The configuration of the stream source.
        # @!attribute [rw] source_connection_profile
        #   @return [::String]
        #     Required. Source connection profile resoource.
        #     Format: `projects/{project}/locations/{location}/connectionProfiles/{name}`
        # @!attribute [rw] oracle_source_config
        #   @return [::Google::Cloud::Datastream::V1::OracleSourceConfig]
        #     Oracle data source configuration.
        # @!attribute [rw] mysql_source_config
        #   @return [::Google::Cloud::Datastream::V1::MysqlSourceConfig]
        #     MySQL data source configuration.
        # @!attribute [rw] postgresql_source_config
        #   @return [::Google::Cloud::Datastream::V1::PostgresqlSourceConfig]
        #     PostgreSQL data source configuration.
        class SourceConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # AVRO file format configuration.
        class AvroFileFormat
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # JSON file format configuration.
        # @!attribute [rw] schema_file_format
        #   @return [::Google::Cloud::Datastream::V1::JsonFileFormat::SchemaFileFormat]
        #     The schema file format along JSON data files.
        # @!attribute [rw] compression
        #   @return [::Google::Cloud::Datastream::V1::JsonFileFormat::JsonCompression]
        #     Compression of the loaded JSON file.
        class JsonFileFormat
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Schema file format.
          module SchemaFileFormat
            # Unspecified schema file format.
            SCHEMA_FILE_FORMAT_UNSPECIFIED = 0

            # Do not attach schema file.
            NO_SCHEMA_FILE = 1

            # Avro schema format.
            AVRO_SCHEMA_FILE = 2
          end

          # Json file compression.
          module JsonCompression
            # Unspecified json file compression.
            JSON_COMPRESSION_UNSPECIFIED = 0

            # Do not compress JSON file.
            NO_COMPRESSION = 1

            # Gzip compression.
            GZIP = 2
          end
        end

        # Google Cloud Storage destination configuration
        # @!attribute [rw] path
        #   @return [::String]
        #     Path inside the Cloud Storage bucket to write data to.
        # @!attribute [rw] file_rotation_mb
        #   @return [::Integer]
        #     The maximum file size to be saved in the bucket.
        # @!attribute [rw] file_rotation_interval
        #   @return [::Google::Protobuf::Duration]
        #     The maximum duration for which new events are added before a file is
        #     closed and a new file is created. Values within the range of 15-60 seconds
        #     are allowed.
        # @!attribute [rw] avro_file_format
        #   @return [::Google::Cloud::Datastream::V1::AvroFileFormat]
        #     AVRO file format configuration.
        # @!attribute [rw] json_file_format
        #   @return [::Google::Cloud::Datastream::V1::JsonFileFormat]
        #     JSON file format configuration.
        class GcsDestinationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # BigQuery destination configuration
        # @!attribute [rw] single_target_dataset
        #   @return [::Google::Cloud::Datastream::V1::BigQueryDestinationConfig::SingleTargetDataset]
        #     Single destination dataset.
        # @!attribute [rw] source_hierarchy_datasets
        #   @return [::Google::Cloud::Datastream::V1::BigQueryDestinationConfig::SourceHierarchyDatasets]
        #     Source hierarchy datasets.
        # @!attribute [rw] data_freshness
        #   @return [::Google::Protobuf::Duration]
        #     The guaranteed data freshness (in seconds) when querying tables created by
        #     the stream. Editing this field will only affect new tables created in the
        #     future, but existing tables will not be impacted. Lower values mean that
        #     queries will return fresher data, but may result in higher cost.
        class BigQueryDestinationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # A single target dataset to which all data will be streamed.
          # @!attribute [rw] dataset_id
          #   @return [::String]
          #     The dataset ID of the target dataset.
          class SingleTargetDataset
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Destination datasets are created so that hierarchy of the destination data
          # objects matches the source hierarchy.
          # @!attribute [rw] dataset_template
          #   @return [::Google::Cloud::Datastream::V1::BigQueryDestinationConfig::SourceHierarchyDatasets::DatasetTemplate]
          #     The dataset template to use for dynamic dataset creation.
          class SourceHierarchyDatasets
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Dataset template used for dynamic dataset creation.
            # @!attribute [rw] location
            #   @return [::String]
            #     Required. The geographic location where the dataset should reside. See
            #     https://cloud.google.com/bigquery/docs/locations for supported
            #     locations.
            # @!attribute [rw] dataset_id_prefix
            #   @return [::String]
            #     If supplied, every created dataset will have its name prefixed by the
            #     provided value. The prefix and name will be separated by an underscore.
            #     i.e. <prefix>_<dataset_name>.
            # @!attribute [rw] kms_key_name
            #   @return [::String]
            #     Describes the Cloud KMS encryption key that will be used to
            #     protect destination BigQuery table. The BigQuery Service Account
            #     associated with your project requires access to this encryption key.
            #     i.e.
            #     projects/\\{project}/locations/\\{location}/keyRings/\\{key_ring}/cryptoKeys/\\{cryptoKey}.
            #     See https://cloud.google.com/bigquery/docs/customer-managed-encryption
            #     for more information.
            class DatasetTemplate
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end
          end
        end

        # The configuration of the stream destination.
        # @!attribute [rw] destination_connection_profile
        #   @return [::String]
        #     Required. Destination connection profile resource.
        #     Format: `projects/{project}/locations/{location}/connectionProfiles/{name}`
        # @!attribute [rw] gcs_destination_config
        #   @return [::Google::Cloud::Datastream::V1::GcsDestinationConfig]
        #     A configuration for how data should be loaded to Cloud Storage.
        # @!attribute [rw] bigquery_destination_config
        #   @return [::Google::Cloud::Datastream::V1::BigQueryDestinationConfig]
        #     BigQuery destination configuration.
        class DestinationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A resource representing streaming data from a source to a destination.
        # @!attribute [r] name
        #   @return [::String]
        #     Output only. The stream's name.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The creation time of the stream.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The last update time of the stream.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Labels.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Required. Display name.
        # @!attribute [rw] source_config
        #   @return [::Google::Cloud::Datastream::V1::SourceConfig]
        #     Required. Source connection profile configuration.
        # @!attribute [rw] destination_config
        #   @return [::Google::Cloud::Datastream::V1::DestinationConfig]
        #     Required. Destination connection profile configuration.
        # @!attribute [rw] state
        #   @return [::Google::Cloud::Datastream::V1::Stream::State]
        #     The state of the stream.
        # @!attribute [rw] backfill_all
        #   @return [::Google::Cloud::Datastream::V1::Stream::BackfillAllStrategy]
        #     Automatically backfill objects included in the stream source
        #     configuration. Specific objects can be excluded.
        # @!attribute [rw] backfill_none
        #   @return [::Google::Cloud::Datastream::V1::Stream::BackfillNoneStrategy]
        #     Do not automatically backfill any objects.
        # @!attribute [r] errors
        #   @return [::Array<::Google::Cloud::Datastream::V1::Error>]
        #     Output only. Errors on the Stream.
        # @!attribute [rw] customer_managed_encryption_key
        #   @return [::String]
        #     Immutable. A reference to a KMS encryption key.
        #     If provided, it will be used to encrypt the data.
        #     If left blank, data will be encrypted using an internal Stream-specific
        #     encryption key provisioned through KMS.
        class Stream
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Backfill strategy to automatically backfill the Stream's objects.
          # Specific objects can be excluded.
          # @!attribute [rw] oracle_excluded_objects
          #   @return [::Google::Cloud::Datastream::V1::OracleRdbms]
          #     Oracle data source objects to avoid backfilling.
          # @!attribute [rw] mysql_excluded_objects
          #   @return [::Google::Cloud::Datastream::V1::MysqlRdbms]
          #     MySQL data source objects to avoid backfilling.
          # @!attribute [rw] postgresql_excluded_objects
          #   @return [::Google::Cloud::Datastream::V1::PostgresqlRdbms]
          #     PostgreSQL data source objects to avoid backfilling.
          class BackfillAllStrategy
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Backfill strategy to disable automatic backfill for the Stream's objects.
          class BackfillNoneStrategy
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Stream state.
          module State
            # Unspecified stream state.
            STATE_UNSPECIFIED = 0

            # The stream has been created but has not yet started streaming data.
            NOT_STARTED = 1

            # The stream is running.
            RUNNING = 2

            # The stream is paused.
            PAUSED = 3

            # The stream is in maintenance mode.
            #
            # Updates are rejected on the resource in this state.
            MAINTENANCE = 4

            # The stream is experiencing an error that is preventing data from being
            # streamed.
            FAILED = 5

            # The stream has experienced a terminal failure.
            FAILED_PERMANENTLY = 6

            # The stream is starting, but not yet running.
            STARTING = 7

            # The Stream is no longer reading new events, but still writing events in
            # the buffer.
            DRAINING = 8
          end
        end

        # A specific stream object (e.g a specific DB table).
        # @!attribute [r] name
        #   @return [::String]
        #     Output only. The object resource's name.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The creation time of the object.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The last update time of the object.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Required. Display name.
        # @!attribute [r] errors
        #   @return [::Array<::Google::Cloud::Datastream::V1::Error>]
        #     Output only. Active errors on the object.
        # @!attribute [rw] backfill_job
        #   @return [::Google::Cloud::Datastream::V1::BackfillJob]
        #     The latest backfill job that was initiated for the stream object.
        # @!attribute [rw] source_object
        #   @return [::Google::Cloud::Datastream::V1::SourceObjectIdentifier]
        #     The object identifier in the data source.
        class StreamObject
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Represents an identifier of an object in the data source.
        # @!attribute [rw] oracle_identifier
        #   @return [::Google::Cloud::Datastream::V1::SourceObjectIdentifier::OracleObjectIdentifier]
        #     Oracle data source object identifier.
        # @!attribute [rw] mysql_identifier
        #   @return [::Google::Cloud::Datastream::V1::SourceObjectIdentifier::MysqlObjectIdentifier]
        #     Mysql data source object identifier.
        # @!attribute [rw] postgresql_identifier
        #   @return [::Google::Cloud::Datastream::V1::SourceObjectIdentifier::PostgresqlObjectIdentifier]
        #     PostgreSQL data source object identifier.
        class SourceObjectIdentifier
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Oracle data source object identifier.
          # @!attribute [rw] schema
          #   @return [::String]
          #     Required. The schema name.
          # @!attribute [rw] table
          #   @return [::String]
          #     Required. The table name.
          class OracleObjectIdentifier
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # PostgreSQL data source object identifier.
          # @!attribute [rw] schema
          #   @return [::String]
          #     Required. The schema name.
          # @!attribute [rw] table
          #   @return [::String]
          #     Required. The table name.
          class PostgresqlObjectIdentifier
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Mysql data source object identifier.
          # @!attribute [rw] database
          #   @return [::String]
          #     Required. The database name.
          # @!attribute [rw] table
          #   @return [::String]
          #     Required. The table name.
          class MysqlObjectIdentifier
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # Represents a backfill job on a specific stream object.
        # @!attribute [rw] state
        #   @return [::Google::Cloud::Datastream::V1::BackfillJob::State]
        #     Backfill job state.
        # @!attribute [rw] trigger
        #   @return [::Google::Cloud::Datastream::V1::BackfillJob::Trigger]
        #     Backfill job's triggering reason.
        # @!attribute [r] last_start_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Backfill job's start time.
        # @!attribute [r] last_end_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Backfill job's end time.
        # @!attribute [r] errors
        #   @return [::Array<::Google::Cloud::Datastream::V1::Error>]
        #     Output only. Errors which caused the backfill job to fail.
        class BackfillJob
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # State of the stream object's backfill job.
          module State
            # Default value.
            STATE_UNSPECIFIED = 0

            # Backfill job was never started for the stream object (stream has backfill
            # strategy defined as manual or object was explicitly excluded from
            # automatic backfill).
            NOT_STARTED = 1

            # Backfill job will start pending available resources.
            PENDING = 2

            # Backfill job is running.
            ACTIVE = 3

            # Backfill job stopped (next job run will start from beginning).
            STOPPED = 4

            # Backfill job failed (due to an error).
            FAILED = 5

            # Backfill completed successfully.
            COMPLETED = 6

            # Backfill job failed since the table structure is currently unsupported
            # for backfill.
            UNSUPPORTED = 7
          end

          # Triggering reason for a backfill job.
          module Trigger
            # Default value.
            TRIGGER_UNSPECIFIED = 0

            # Object backfill job was triggered automatically according to the stream's
            # backfill strategy.
            AUTOMATIC = 1

            # Object backfill job was triggered manually using the dedicated API.
            MANUAL = 2
          end
        end

        # Represent a user-facing Error.
        # @!attribute [rw] reason
        #   @return [::String]
        #     A title that explains the reason for the error.
        # @!attribute [rw] error_uuid
        #   @return [::String]
        #     A unique identifier for this specific error,
        #     allowing it to be traced throughout the system in logs and API responses.
        # @!attribute [rw] message
        #   @return [::String]
        #     A message containing more information about the error that occurred.
        # @!attribute [rw] error_time
        #   @return [::Google::Protobuf::Timestamp]
        #     The time when the error occurred.
        # @!attribute [rw] details
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Additional information about the error.
        class Error
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class DetailsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # Contains the current validation results.
        # @!attribute [rw] validations
        #   @return [::Array<::Google::Cloud::Datastream::V1::Validation>]
        #     A list of validations (includes both executed as well as not executed
        #     validations).
        class ValidationResult
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A validation to perform on a stream.
        # @!attribute [rw] description
        #   @return [::String]
        #     A short description of the validation.
        # @!attribute [rw] state
        #   @return [::Google::Cloud::Datastream::V1::Validation::State]
        #     Validation execution status.
        # @!attribute [rw] message
        #   @return [::Array<::Google::Cloud::Datastream::V1::ValidationMessage>]
        #     Messages reflecting the validation results.
        # @!attribute [rw] code
        #   @return [::String]
        #     A custom code identifying this validation.
        class Validation
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Validation execution state.
          module State
            # Unspecified state.
            STATE_UNSPECIFIED = 0

            # Validation did not execute.
            NOT_EXECUTED = 1

            # Validation failed.
            FAILED = 2

            # Validation passed.
            PASSED = 3
          end
        end

        # Represent user-facing validation result message.
        # @!attribute [rw] message
        #   @return [::String]
        #     The result of the validation.
        # @!attribute [rw] level
        #   @return [::Google::Cloud::Datastream::V1::ValidationMessage::Level]
        #     Message severity level (warning or error).
        # @!attribute [rw] metadata
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Additional metadata related to the result.
        # @!attribute [rw] code
        #   @return [::String]
        #     A custom code identifying this specific message.
        class ValidationMessage
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class MetadataEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Validation message level.
          module Level
            # Unspecified level.
            LEVEL_UNSPECIFIED = 0

            # Potentially cause issues with the Stream.
            WARNING = 1

            # Definitely cause issues with the Stream.
            ERROR = 2
          end
        end
      end
    end
  end
end