/*!
@mainpage Google Cloud Platform Bigtable C++ Client Library

Cloud Bigtable is Google's NoSQL Big Data database service. It's the same
database that powers many core Google services, including Search, Analytics,
Maps, and Gmail.

The Cloud Bigtable C++ Client library offers types and functions
to access Cloud Bigtable from C++ applications. It offers access to the Cloud
Bigtable API, including admin operations to list, read, write, and delete
[Instances, Clusters][about-instances-clusters], [Tables][about-tables],
and [Application Profiles][about-app-profiles].

@tableofcontents{HTML:2}

## Quickstart

The following "Hello World" program should give you a sense of how to use the
library.

@snippet quickstart.cc all

## More Information

- Read more about [Cloud Bigtable](https://cloud.google.com/bigtable/docs/)
- [Table::ReadRow()] - to read a single row from an existing Table
- [Table::ReadRows()] - to read multiple rows from an existing Table
- [Table::Apply()] - to update or insert new rows into a Table
- [Table::BulkApply()] - to update or insert multiple rows into a Table
- @ref bigtable-hello-world
- @ref bigtable-samples-data-client
- @ref bigtable-hello-table-admin
- @ref bigtable-hello-instance-admin
- @ref bigtable-error-handling to learn how the library reports run-time errors.
- @ref bigtable-environment-variables for environment variables affecting the
  library.  Some of these environment variables enable logging to the console.
  This can be an effective approach to diagnose runtime problems.
- @ref bigtable-endpoint-example
- @ref bigtable-auth-example
- @ref bigtable-override-retry
- @ref bigtable-universe-domain-example
- @ref bigtable-mocking "Mocking the Cloud Bigtable C++ client"
- The [Setting up your development environment] guide describes how to set up
  a C++ development environment in various platforms, including the Google Cloud
  C++ client libraries.

[Table::ReadRows()]: @ref google::cloud::bigtable::Table::ReadRows()
[Table::ReadRow()]: @ref google::cloud::bigtable::Table::ReadRow()
[Table::Apply()]: @ref google::cloud::bigtable::Table::Apply()
[Table::BulkApply()]: @ref google::cloud::bigtable::Table::BulkApply()
[about-instances-clusters]: https://cloud.google.com/bigtable/docs/instances-clusters-nodes 'Instances and Clusters'
[about-tables]: https://cloud.google.com/bigtable/docs/overview 'Tables'
[about-app-profiles]: https://cloud.google.com/bigtable/docs/app-profiles 'Application Profiles'

[google-cloud-cpp]: https://github.com/googleapis/google-cloud-cpp
[project-readme]:   https://github.com/googleapis/google-cloud-cpp#readme
[project-build]:    https://github.com/googleapis/google-cloud-cpp#building-and-installing
[howto-setup-dev-workstation]: https://github.com/googleapis/google-cloud-cpp/blob/main/doc/contributor/howto-guide-setup-development-workstation.md
[quickstart guide]: https://github.com/googleapis/google-cloud-cpp/tree/main/google/cloud/bigtable/quickstart#readme
[packaging guide]:  https://github.com/googleapis/google-cloud-cpp/blob/main/doc/packaging%2Emd
[Setting up your development environment]: https://cloud.google.com/cpp/docs/setup

*/

/**
@page bigtable-endpoint-example Override the default endpoint

In some cases, you may need to override the default endpoint used by the client
library. Use the `google::cloud::EndpointOption` when initializing the client
library to change this default.  For example, this will override the default
endpoint for `google::cloud::bigtable::Table`:

@snippet client_samples.cc table-set-endpoint

Changing the default endpoint for other `*Client` classes is very similar, as
shown in these examples:

- [`BigtableTableAdminClient`](@ref BigtableTableAdminClient-set-endpoint-snippet)
- [`InstanceTableAdminClient`](@ref BigtableInstanceAdminClient-set-endpoint-snippet)
*/

/**
@page bigtable-auth-example Override the authentication configuration

Some applications cannot use the default authentication mechanism (known as
[Application Default Credentials]). You can override this default using
`google::cloud::UnifiedCredentialsOption`. The following example shows how
to explicitly load a service account key file.

@snippet client_samples.cc table-with-service-account

Keep in mind that we chose this as an example because it is relatively easy to
understand. Consult the [Best practices for managing service account keys]
guide for more details.

Changing the default authentication configuration for other `*Client` classes is
very similar, as shown in these examples:

- [`BigtableTableAdminClient`](@ref BigtableTableAdminClient-with-service-account-snippet)
- [`InstanceTableAdminClient`](@ref BigtableInstanceAdminClient-with-service-account-snippet)

Keep in mind that we chose this as an example because it is relatively easy to
understand. Consult the [Best practices for managing service account keys]
guide for more details.

@see @ref guac - for more information on the factory functions to create
`google::cloud::Credentials` objects.

[Best practices for managing service account keys]: https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys
[Application Default Credentials]: https://cloud.google.com/docs/authentication#adc

*/

/**
@page bigtable-universe-domain-example Override the default Universe Domain

In some cases, you may need to override the default universe domain used by the
client library. Use `AddUniverseDomainOption` when initializing the client
library to change this default.

@snippet client_samples.cc table-set-universe-domain

Changing the default universe domain for other `*Client` classes is very similar, as
shown in these examples:

- [`BigtableTableAdminClient`](@ref BigtableTableAdminClient-set-universe-domain-snippet)
- [`InstanceTableAdminClient`](@ref BigtableInstanceAdminClient-set-universe-domain-snippet)
*/

/*! @page Table-set-endpoint-snippet Override Table Default Endpoint

@snippet google/cloud/bigtable/examples/client_samples.cc table-set-endpoint
*/

/*! @page Table-with-service-account-snippet Override Table Default Authentication

@snippet google/cloud/bigtable/examples/client_samples.cc table-with-service-account
*/

/*! @page Table-set-universe-domain-snippet Override Table Default Universe Domain

@snippet google/cloud/bigtable/examples/client_samples.cc table-set-universe-domain
*/

/*! @page BigtableTableAdminClient-set-endpoint-snippet Override BigtableTableAdminClient Default Endpoint

@snippet google/cloud/bigtable/admin/samples/bigtable_table_admin_client_samples.cc set-client-endpoint
*/

/*! @page BigtableTableAdminClient-with-service-account-snippet Override BigtableTableAdminClient Default Authentication

@snippet google/cloud/bigtable/admin/samples/bigtable_table_admin_client_samples.cc with-service-account
*/

/*! @page BigtableTableAdminClient-set-universe-domain-snippet Override BigtableTableAdminClient Default Universe Domain

@snippet google/cloud/bigtable/admin/samples/bigtable_table_admin_client_samples.cc set-client-universe-domain
*/

/*! @page BigtableInstanceAdminClient-set-endpoint-snippet Override BigtableInstanceAdminClient Default Endpoint

@snippet google/cloud/bigtable/admin/samples/bigtable_instance_admin_client_samples.cc set-client-endpoint
*/

/*! @page BigtableInstanceAdminClient-with-service-account-snippet Override BigtableInstanceAdminClient Default Authentication

@snippet google/cloud/bigtable/admin/samples/bigtable_instance_admin_client_samples.cc with-service-account
*/

/*! @page BigtableInstanceAdminClient-set-universe-domain-snippet Override BigtableInstanceAdminClient Default Universe Domain

@snippet google/cloud/bigtable/admin/samples/bigtable_instance_admin_client_samples.cc set-client-universe-domain
*/
