1 // Copyright 2018 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_BIGTABLE_INSTANCE_CONFIG_H 16 #define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_BIGTABLE_INSTANCE_CONFIG_H 17 18 #include "google/cloud/bigtable/cluster_config.h" 19 #include "google/cloud/bigtable/version.h" 20 #include <google/bigtable/admin/v2/bigtable_instance_admin.pb.h> 21 #include <google/bigtable/admin/v2/common.pb.h> 22 #include <map> 23 #include <vector> 24 25 namespace google { 26 namespace cloud { 27 namespace bigtable { 28 inline namespace BIGTABLE_CLIENT_NS { 29 /// Specify the initial configuration for a new instance. 30 class InstanceConfig { 31 public: InstanceConfig(std::string instance_id,std::string display_name,std::map<std::string,ClusterConfig> clusters)32 InstanceConfig(std::string instance_id, std::string display_name, 33 std::map<std::string, ClusterConfig> clusters) { 34 proto_.set_instance_id(std::move(instance_id)); 35 proto_.mutable_instance()->set_display_name(std::move(display_name)); 36 for (auto& kv : clusters) { 37 (*proto_.mutable_clusters())[kv.first] = std::move(kv.second).as_proto(); 38 } 39 } 40 //@{ 41 /// @name Convenient shorthands for the instance types. 42 using InstanceType = google::bigtable::admin::v2::Instance::Type; 43 // NOLINTNEXTLINE(readability-identifier-naming) 44 constexpr static InstanceType TYPE_UNSPECIFIED = 45 google::bigtable::admin::v2::Instance::TYPE_UNSPECIFIED; 46 // NOLINTNEXTLINE(readability-identifier-naming) 47 constexpr static InstanceType PRODUCTION = 48 google::bigtable::admin::v2::Instance::PRODUCTION; 49 // NOLINTNEXTLINE(readability-identifier-naming) 50 constexpr static InstanceType DEVELOPMENT = 51 google::bigtable::admin::v2::Instance::DEVELOPMENT; 52 //@} 53 set_type(InstanceType type)54 InstanceConfig& set_type(InstanceType type) { 55 proto_.mutable_instance()->set_type(type); 56 return *this; 57 } 58 insert_label(std::string const & key,std::string const & value)59 InstanceConfig& insert_label(std::string const& key, 60 std::string const& value) { 61 (*proto_.mutable_instance()->mutable_labels())[key] = value; 62 return *this; 63 } 64 emplace_label(std::string const & key,std::string value)65 InstanceConfig& emplace_label(std::string const& key, std::string value) { 66 (*proto_.mutable_instance()->mutable_labels())[key] = std::move(value); 67 return *this; 68 } 69 70 // NOLINT: accessors can (and should) be snake_case. as_proto()71 google::bigtable::admin::v2::CreateInstanceRequest const& as_proto() const& { 72 return proto_; 73 } 74 75 // NOLINT: accessors can (and should) be snake_case. as_proto()76 google::bigtable::admin::v2::CreateInstanceRequest&& as_proto() && { 77 return std::move(proto_); 78 } 79 80 private: 81 google::bigtable::admin::v2::CreateInstanceRequest proto_; 82 }; 83 84 } // namespace BIGTABLE_CLIENT_NS 85 } // namespace bigtable 86 } // namespace cloud 87 } // namespace google 88 89 #endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_BIGTABLE_INSTANCE_CONFIG_H 90